2016-04-14 1 views
0

Je veux générer un tableau HTML qui montre un fichierhash (sha1) d'un tas de fichiers dans un répertoire; Je veux que les noms de fichiers soient relatifs à mon répertoire actuel - pas absolu.Comment générer un tableau HTML de Filehashes - avec chemin relatif seulement?

Je sais comment faire tous les différents bits séparément, mais je ne peux pas comprendre comment les enchaîner.

Voici ce que j'ai jusqu'à présent:

dir|get-filehash -Algorithm sha1 

Ce qui me donne ceci:

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

Maintenant, je ne veux que le hachage et le nom, donc je peux le faire:

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

Ce qui donne:

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

sortie Je peux donc cela à un fichier HTML comme ceci:

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

[ignorer le fait que cela ne fonctionne que correctement si le fichier de sortie n'existe pas pour l'instant].

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

Cela me donne un tableau HTML; mais les valeurs de PATH sont absolues.

Je connais un moyen simple d'obtenir un chemin relatif à l'aide du « Resolve-Path » applet de commande:

dir | Resolve-Path -Relative 

.\empty.txt 
.\hello.txt 

Mais je ne peux pas le faire à « ajustement » dans le reste de mon script; Je suppose que leur pourrait être une fonction. NET pour le faire d'une manière différente? Ou y a-t-il une utilisation fantaisiste des parenthèses qui me permet de presser cet appel sur une cmdlet insde de la liste 'select-object'?

J'ai essayé mais ça ne marche pas:

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

Répondre

0

a fait quelques progrès dans ce domaine - mais la solution est encore peu satisfaisante - car je dois aussi le contrôle sur les en-têtes (plutôt que 'nom', 'valeur' ​​fourni par le HashTable).

Je peux obtenir ces en-têtes fonctionnant dans une 'table de format', mais pas encore dans 'convertto-html'.

Voici le code à ce jour:

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 } 

} 

Et pour appeler avec un formatter:

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

Cela donne:

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

Mais si je shove que par un ' convertto-html ', l'étrangeté s'ensuit. (Je suppose que c'est parce que la sortie de 'format-table' est juste une chaîne à ce moment ....)

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