Powershell-显示清理(在.txt文件中获取文件哈希结果)
这是一个清理/显示类问题。我的小powershell脚本接受文件夹中的任何.exe文件,为每个条目查找多个哈希值,并将其输出到.txt文件。我的问题是文件中的格式。这是我用来生成这些结果的循环Powershell-显示清理(在.txt文件中获取文件哈希结果),powershell,Powershell,这是一个清理/显示类问题。我的小powershell脚本接受文件夹中的任何.exe文件,为每个条目查找多个哈希值,并将其输出到.txt文件。我的问题是文件中的格式。这是我用来生成这些结果的循环 $output = foreach($file in $table){ $File.Name get-filehash -path $file.FullName get-filehash -path $file.FullName -Algorithm SHA1 get-filehash -
$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
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
有没有办法在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
现在,您的输出将按连续文件路径分组到单独的表中:
$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
支持计算属性表达式,因此如果您只需要文件的名称
,也可以:
$output |Format-Table -GroupBy @{Name='Name';Expression={[System.IO.Path]::GetFileName($_.Path)}} |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
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