powershell - Powershell - 显示清理(get-filehash 生成 .txt 文件)
问题描述
这是一个清理/显示类型的问题。我的小 powershell 脚本获取文件夹中的任何 .exe 文件,为每个条目找到多个哈希值,并将其输出到 .txt 文件。我的问题是文件中的格式。这是我用来生成这些结果的循环。
$output = foreach($file in $table){
$File.Name
get-filehash -path $file.FullName
get-filehash -path $file.FullName -Algorithm SHA1
get-filehash -path $file.FullName -Algorithm MD5
}
$output | Out-File C:\filepath\file.txt
输出看起来像这样:
Name.exe
Algorithm Hash Path
---------- ---- -----
SHA256 Value C:\Path\Name.exe
SHA1 Value C:\Path\Name.exe
MD5 Value C:\Path\Name.exe
NextFile.exe
SHA256 Value C:\Path\NextFile.exe
SHA1 Value C:\Path\NextFile.exe
MD5 Value C:\Path\NextFile.exe
有没有办法在 foreach 循环中清理它?我知道它很挑剔,但是有没有办法将第一个文件的名称移动到列名下方,或者在每个文件名之后创建一个中断并使用新的列名?
解决方案
丢弃单独的文件名输出,管道到Format-Table
并使用-GroupBy
参数对文件路径上的表进行分组:
$output = foreach($file in $table){
Get-FileHash -Path $file.FullName
Get-FileHash -Path $file.FullName -Algorithm SHA1
Get-FileHash -Path $file.FullName -Algorithm MD5
}
$output |Format-Table -GroupBy Path |Out-File C:\filepath\file.txt
现在,您的输出将按连续文件路径分组到单独的表中:
Path: C:\path\to\Name.exe
Algorithm Hash Path
--------- ---- ----
SHA256 Value C:\path\to\Name.exe
SHA1 Value C:\path\to\Name.exe
MD5 Value C:\path\to\Name.exe
Path: C:\path\to\NextFile.exe
Algorithm Hash Path
--------- ---- ----
SHA256 Value C:\path\to\NextFile.exe
SHA1 Value C:\path\to\NextFile.exe
MD5 Value C:\path\to\NextFile.exe
-GroupBy
支持计算的属性表达式,所以如果你只需要Name
文件的,那也是可行的:
$output |Format-Table -GroupBy @{Name='Name';Expression={[System.IO.Path]::GetFileName($_.Path)}} |Out-File C:\filepath\file.txt
...导致这样的事情:
Name: Name.exe
Algorithm Hash Path
--------- ---- ----
SHA256 Value C:\path\to\Name.exe
SHA1 Value C:\path\to\Name.exe
MD5 Value C:\path\to\Name.exe
Name: NextFile.exe
Algorithm Hash Path
--------- ---- ----
SHA256 Value C:\path\to\NextFile.exe
SHA1 Value C:\path\to\NextFile.exe
MD5 Value C:\path\to\NextFile.exe