Сортировать результаты из Get-ChildItem с Get-FileHash перед выводом - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь написать сценарий Windows PowerShell. Мне нужно получить хеш файла из всех файлов в дереве каталогов.

Это то, что я получил до сих пор:

Get-ChildItem -Path "c:\temp\path" -Recurse -Force -Attributes !Directory | % {Get-FileHash $_.Fullname} | Out-File "c:\temp\report_file.txt"

Файл c:\temp\report_file.txt выглядит примерно так:

Algorithm Hash Path                                                                         
--------- ---- ----                                                                         
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt                                                        
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt                                                       
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt                                                      
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt                                                     
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**              

Все отлично работает.

Ожидать:
Я запускаю этот командлет много раз в день. Файлы удаляются и время от времени воссоздаются в этом дереве каталогов. И ... Несколько раз порядок файлов в выходном файле не совпадает. В приведенном ниже примере файл report5.txt в файле отчета должен находиться в последней строке, но во второй строке. Я полагаю, это потому, что выбран вариант рекурсии. Этот вариант рекурса мне нужен. Когда я запускаю командлет в каталоге без подкаталогов, результат всегда одинаков. Но когда на каталог с подкаталогами (дерево каталогов) - нет.

Algorithm Hash Path                                                                         
--------- ---- ----                                                                         
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt                                                        
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**              
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt                                                       
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt                                                      
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt                                                     

Есть ли здесь решение для какой-либо сортировки всех данных по полному пути столбца до того, как данные переданы в файл отчета?

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете сортировать по свойству пути хеш-объекта.

Вы также можете запускать файлы непосредственно в Get-FileHash без использования цикла, и я предлагаю экспортировать их в CSV вместо текста, чтобы он разделял алгоритм, хэш и путь, чтобы вам было проще использовать их:

Get-ChildItem -path "c:\temp\path" -Recurse -Force -File | 
    Get-FileHash | 
    Sort-Object -Property 'Path' |
    Export-Csv -Path "c:\temp\report_file.csv" -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...