Powershell-显示清理(在.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 -

这是一个清理/显示类问题。我的小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

   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