2016-04-14 4 views
0

ディレクトリ内のファイルの束のファイルハッシュ(sha1)を示すHTMLテーブルを生成したい。ファイル名を絶対パスではなく現在のディレクトリからの相対パスにします。ファイルハッシュのHTMLテーブルを作成する方法 - 相対パスのみを使用する方法

私は別々のビットを別々にする方法を知っていますが、チェーンを張る方法を理解できません。

私にこの与え
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値は絶対値です。

私は「解決パス」コマンドレットを使用して相対パスを取得する簡単な方法を知っている:

dir | Resolve-Path -Relative 

.\empty.txt 
.\hello.txt 

をしかし、私は私のスクリプトの残りの部分では「フィット」にそれを得ることはできません。私は彼らが異なる方法でこれを行うための.NET関数かもしれないと思いますか?または、括弧で囲まれた忍者を使って、この呼び出しを 'select-object'リストのコマンドレットinsdeに絞り込むことができますか?

私はこれを試してみました:しかし、それは動作しません:

この上でいくつかの進歩を遂げ
# NOTE: this code does not work ! 
PS > dir|get-filehash|select-object hash, (path|Resolve-Path -relative) 

答えて

0

- しかし、解決策はまだ非常に満足のいくものではない - 私も、ヘッダーだけを制御する必要があります(というよりもいるので'name'、HashTableが提供する 'value')。

これらのヘッダーは 'format-table'で動作しますが、 'convertto-html'では表示されません。

ここでのコードは、これまでだ:これは与え

$table_format = @{Expression={$_.Name} ; Label="Filename"}, @{Expression={$_.Value} ; Label="CHECKSUM(SHA1)"} 
dir|get-relative|format-table $table_format 

function get-relative($infile) { 
begin { [email protected]{} } 
process { 
    $relative_path=($_|resolve-path -Relative) 
    $filehash=($_| Get-FileHash -Algorithm sha1).hash 
    $return_hash.add($relative_path, $filehash) 
} 
end { return $return_hash } 

} 

そして、フォーマッタでそれを呼び出すための

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> 
関連する問題