Генерация хеш-кодов для определенных типов файлов только с помощью Powershell - PullRequest
0 голосов
/ 30 сентября 2019

Я - новичок в Powershell и создании сценариев и успешно использую Out-GridView для отображения некоторых свойств файлов, которые у меня есть в моих каталогах, используя следующее:

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime | out-gridview

где я указываю расширение файла, например, $type = "*.pdf".

Я также хотел бы начать сравнение файлов с использованием хеш-кодов, поэтому я попробовал эту команду:

ls | Get-Filehash

Однако я хотел бы иметь хеш-коды в окне вывода в виде отдельного столбца с внешним видом сетки. Это возможно? Я пробовал

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime,Filehash | out-gridview

и

dir D:\Folder1\$type -Recurse | Select Fullname,Directory,LastWriteTime | Get-Filehash | out-gridview

Конечно, ни одна из этих работ.

Кто-нибудьесть способ генерировать хеш-коды только для определенного расширения файла?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете сделать это, используя вычисляемое свойство с Select-Object:

Get-ChildItem -Path 'D:\Folder1\$type'-Recurse |
    Select-Object FullName,Directory,LastWriteTime, @{Label='FileHash'; Expression={(Get-Filehash -Path $_.FullName).Hash}} |
        Out-GridView

Вы должны увидеть новый столбец в представлении сетки, называемый Filehash, который содержит хэш файла SHA256. Вы можете изменить алгоритм (скажем, MD5), используя параметр -Algorithm, равный Get-FileHash.

Если вам интересно, что это делает, важными частями являются:

@{...} означает хеш-таблицу. например, набор пар ключ-значение

label - это ключ, который определяет, каким будет ваше свойство (имя столбца) в виде сетки

expression определяет фрагмент кода ({...}), который вычисляет значение этого свойства

$_ означает, что мы работаем с текущим объектом (в данном случае с файлом), проходящим по конвейеру

...