2016-04-14 1 views
0

Ich möchte eine HTML-Tabelle generieren, die einen Dateizugriff (sha1) von einer Reihe von Dateien in einem Verzeichnis zeigt; Ich möchte, dass die Dateinamen relativ zu meinem aktuellen Verzeichnis sind - nicht absolut.Wie man HTML-Tabelle von Filehashs produziert - mit nur dem relativen Pfad?

Ich weiß, wie man alle verschiedenen Bits getrennt macht, aber ich kann nicht herausfinden, wie man sie kettet.

Hier ist, was ich bisher habe:

dir|get-filehash -Algorithm sha1 

Was mich ergibt dies:

Algorithm  Hash                 Path 
---------  ----                 ---- 
SHA1   DA39A3EE5E6B4B0D3255BFEF95601890AFD80709        C:\temp\test\empty.txt 
SHA1   88A5B867C3D110207786E66523CD1E4A484DA697        C:\temp\test\hello.txt 

Jetzt möchte ich nur den Hash und den Dateinamen, so kann ich dies tun:

dir|get-filehash -Algorithm sha1|select-object hash, path 

Welches gibt mir:

Hash              Path 
----              ---- 
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709     C:\temp\test\empty.txt 
88A5B867C3D110207786E66523CD1E4A484DA697     C:\temp\test\hello.txt 

So kann ich Ausgang dieses in eine HTML-Datei wie folgt:

(dir|get-filehash -Algorithm sha1|select-object hash, path)|ConvertTo-html|add-content output.htm 

[ignorieren die Tatsache, dass dies funktioniert nur dann richtig, wenn die Ausgabedatei für jetzt nicht existiert].

<!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> 

So gibt mir das eine HTML-Tabelle; aber die PATH-Werte sind absolut.

Ich kenne eine einfache Art und Weise einen relativen Pfad des Erhaltens der ‚Resolve-Path‘ Cmdlets:

dir | Resolve-Path -Relative 

.\empty.txt 
.\hello.txt 

Aber ich kann sie nicht zu ‚fit‘ in den Rest meines Skript; Ich nehme an, sie könnten eine .NET-Funktion sein, um das auf andere Weise zu tun? Oder gibt es ein paar ausgefallene Ninja-Verwendung von Klammern, die mich diesen Aufruf zu einem Cmdlet in der 'Objektauswahlliste' komprimieren lassen?

Ich versuchte dies aber es funktioniert nicht:

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

Antwort

0

einige Fortschritte auf diesem Made - aber die Lösung ist noch nicht sehr befriedigend - da ich auch die Kontrolle über die Header-Dateien benötigt (und nicht nur 'Name', 'Wert', die die HashTable bietet).

Ich kann diese Header in einer 'Format-Tabelle' arbeiten, aber immer noch nicht in 'Convertto-HTML'.

Hier ist der Code so weit:

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 } 

} 

Und es mit einem Formatierer zu nennen:

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

Das gibt:

Filename                CHECKSUM(SHA1)               
--------                --------------               
.\goodbye.txt               DA39A3EE5E6B4B0D3255BFEF95601890AFD80709        
.\hello.txt                88A5B867C3D110207786E66523CD1E4A484DA697 

Aber wenn ich schiebe, dass durch eine ' convertto-html ", ergibt sich Verrücktheit. (Ich vermute, das liegt daran, dass die Ausgabe von 'format-table' nur eine Zeichenfolge ist ...)

<!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> 
Verwandte Themen