Откажитесь от вывода отдельного имени файла, передайте в 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