Powershell - очистка дисплея (get-fileha sh приводит к текстовому файлу) - PullRequest
1 голос
/ 20 февраля 2020

Это вопрос очистки или отображения. Мой маленький скрипт powershell берет любые файлы .exe в папке, находит несколько значений ha sh для каждой записи и выводит их в файл .txt. Моя проблема заключается в формате в файле. Вот l oop, который я использую для генерации этих результатов.

$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 l oop? Я знаю, что это придирчиво, но есть ли способ переместить имя первого файла ниже имен столбцов или создать разрыв и иметь новые имена столбцов после имени каждого файла?

1 Ответ

2 голосов
/ 20 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...