Как создать HTML-таблицу файловых хешей - только с относительным путем?
Я хочу сгенерировать таблицу HTML, которая показывает файловый хеш (sha1) из набора файлов в каталоге; Я хочу, чтобы имена файлов были относительно моего текущего каталога - не абсолютные.
Я знаю, как сделать все разные биты отдельно, но я не могу понять, как их объединить.
Вот что у меня так далеко:
dir|get-filehash -Algorithm sha1
Что дает мне это:
Algorithm Hash Path
--------- ---- ----
SHA1 DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 C:\temp\test\empty.txt
SHA1 88A5B867C3D110207786E66523CD1E4A484DA697 C:\temp\test\hello.txt
Теперь я хочу только хэш и имя файла, поэтому я могу сделать это:
dir|get-filehash -Algorithm sha1|select-object hash, path
Что дает мне:
Hash Path
---- ----
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 C:\temp\test\empty.txt
88A5B867C3D110207786E66523CD1E4A484DA697 C:\temp\test\hello.txt
Так что я могу вывести это в HTML-файл, как это:
(dir|get-filehash -Algorithm sha1|select-object hash, path)|ConvertTo-html|add-content output.htm
[игнорировать тот факт, что это работает правильно, только если выходной файл не существует].
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/></colgroup>
<tr><th>Hash</th><th>Path</th></tr>
<tr><td>DA39A3EE5E6B4B0D3255BFEF95601890AFD80709</td><td>C:\temp\test\empty.txt</td></tr>
<tr><td>88A5B867C3D110207786E66523CD1E4A484DA697</td><td>C:\temp\test\hello.txt</td></tr>
</table>
Так что это дает мне таблицу HTML; но значения PATH являются абсолютными.
Я знаю простой способ получения относительного пути с помощью командлета Resolve-Path:
dir | Resolve-Path -Relative
.\empty.txt
.\hello.txt
Но я не могу заставить его "вписаться" в остальную часть моего сценария; Я думаю, что они могут быть.NET-функцией, чтобы сделать это по-другому? Или есть какое-то причудливое использование скобок ниндзя, которое позволяет мне сжать этот вызов командлета insde из списка "select-object"?
Я попробовал это, но это не работает:
# NOTE: this code does not work !
PS > dir|get-filehash|select-object hash, (path|Resolve-Path -relative)
1 ответ
Достигнут некоторый прогресс в этом - но решение все еще не очень удовлетворительное - поскольку мне также нужен контроль над заголовками (а не просто "имя", "значение", которое предоставляет HashTable).
Я могу заставить эти заголовки работать в "таблице форматов", но все еще не в "convertto-html".
Вот код на данный момент:
function get-relative($infile) {
begin { $return_hash=@{} }
process {
$relative_path=($_|resolve-path -Relative)
$filehash=($_| Get-FileHash -Algorithm sha1).hash
$return_hash.add($relative_path, $filehash)
}
end { return $return_hash }
}
И чтобы назвать это с форматером:
$table_format = @{Expression={$_.Name} ; Label="Filename"}, @{Expression={$_.Value} ; Label="CHECKSUM(SHA1)"}
dir|get-relative|format-table $table_format
Это дает:
Filename CHECKSUM(SHA1)
-------- --------------
.\goodbye.txt DA39A3EE5E6B4B0D3255BFEF95601890AFD80709
.\hello.txt 88A5B867C3D110207786E66523CD1E4A484DA697
Но если я протолкну это через "convertto-html", возникнет странность. (Я думаю, это потому, что вывод 'format-table' на данный момент является просто строкой....)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/><col/><col/><col/></colgroup>
<tr><th>ClassId2e4f51ef21dd47e99d3c952918aff9cd</th><th>pageHeaderEntry</th><th>pageFooterEntry</th><th>autosizeInfo</th><th>shapeInfo</th><th>
groupingEntry</th></tr>
<tr><td>033ecb2bc07a4d43b5ef94ed5a35d280</td><td></td><td></td><td></td><td>Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo</td><
td></td></tr>
<tr><td>9e210fe47d09416682b841769c78b8a3</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>27c87ef9bbda4f709f6b4002fa4af63c</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>4ec4f0187cb04f4cb6973460dfe252df</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>cf522b78d86c486691226b40aa69e95c</td><td></td><td></td><td></td><td></td><td></td></tr>
</table>
</body></html>