如何生成HTML表文件 - 仅使用相对路径?

时间:2016-04-14 11:34:39

标签: powershell cmdlet

我想生成一个HTML表,显示目录中一堆文件的filehash(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'cmdlet获取相对路径的简单方法:

dir | Resolve-Path -Relative

.\empty.txt
.\hello.txt

但我不能让它“适合”我的其余部分;我想他们可能是一个.NET函数以不同的方式做到这一点?或者是否有一些花哨的忍者使用括号,让我将这个调用压缩到'select-object'列表的cmdlet insde?

我尝试了这个:但它不起作用:

# NOTE: this code does not work !
PS > dir|get-filehash|select-object hash, (path|Resolve-Path -relative)

1 个答案:

答案 0 :(得分:0)

在此方面取得了一些进展 - 但解决方案仍然不是很令人满意 - 因为我还需要控制标题(而不仅仅是'名称','值',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>