![]() |
Массовое определение контрольных сумм файлов
Добрый день! Хочу в папке Windows всем exe файлам определить контрольные суммы (в дальнейшем и не только в Windows). Через PowerShell:
Код:
param ( Цитата:
Цитата:
|
Цитата:
Как вариант, задайте путь к каталогу в первой переменной, как это присвоение сделано во второй переменной. |
Цитата:
|
|
Цитата:
Цитата:
Цитата:
Цитата:
Если хотите запускать так, то эту часть измените: Код:
param ( Код:
[string]$FolderPath = 'c:\windows' |
Можно через 7-zip:
Код:
$7z = 'C:\Program Files\7-Zip\7z.exe' Код:
# Выгрузка в CSV |
Зачем 7-zip если есть certutil https://www.outsidethebox.ms/10527/
|
Вариант с certutil в скрипте выше
Код:
|
DJ Mogarych, проверял? Алгоритм хэша надо указывать в верхнем регистре:) Трюки утилиты certutil
|
И в нижнем работает:
Код:
PS C:\WINDOWS\System32> $report |select -first 5 |
DJ Mogarych, значит исправили
|
Цитата:
Цитата:
|
Напишите правильно строку с Checksum, сейчас у вас одна половина из одного варианта, а вторая - из другого.
|
Самый простой вариант:
Код:
# Укажите путь к папке |
Uragan66, выше писали о том, что Get-FileHash недоступен на древних операционках.
|
Цитата:
|
Foreigner, работает и в 5.1.
|
Цитата:
Код:
$hash = new-object System.Security.Cryptography.SHA256CryptoServiceProvider |
Прежде всего Get-FileHash является функцией, код которой вполне можно подсмотреть:
Код:
Get-Content function:Get-FileHash Код:
$a = [Security.Cryptography.SHA256]::Create() Код:
Get-FileHash "$([Environment]::SystemDirectory)\*.exe" |
Цитата:
|
Я же правильно понимаю если для XP сделать, то и на 7 взлетит?
|
Цитата:
Вот, функция: Код:
function get-fhash($x){ |
Реально проверил на Windows XP sp3.
Там отсутствует certutil.exe в стандартной поставке, а на Код:
$hash = new-object Security.Cryptography.SHA256CryptoServiceProvider Код:
New-Object : Исключение при вызове ".ctor" с "0" аргументами: "The specified cryptographic algorithm is not supported on this platform." Код:
$7z = 'C:\Program Files\7-Zip\7z.exe' Код:
$report = @() |
Цитата:
Но если работает: Код:
[Security.Cryptography.SHA256] Код:
function get-fhash($x){ |
Да, так работает.
|
Вложений: 1
Цитата:
единственное подскажите как этот результат сразу в файл загнать? а так что бы он не только в папке system32 но и в подпапках всех сразу собрал по маске контрольные суммы и выдал с путями их полными. а то он только в system32 exe дает, а в подпапках как? Спасибо! |
Вложений: 1
проверяю SHA 256
а суммы у файлов разные...... |
Цитата:
Цитата:
Цитата:
Код:
function get-fhash($x){ |
Вложений: 1
Цитата YuS_2:
function get-fhash($x){ $hash = [security.cryptography.sha256]::create() $file = gi $x $stream = $file.openread() $strb = new-object Text.StringBuilder foreach($byte in $hash.computehash($stream)){ $null = $strb.append($byte.tostring('x2')) } $stream.close() return $strb.tostring() } dir $env:windir\system32\*.exe -rec|%{ new-object PSObject -Property @{Path = $_.fullname;SHA256 = get-fhash $_} } |convertto-csv -notyp |out-file out.csv -enc utf8 » тишина какая то, или неправильно что то делаю? |
|
А там может путь к файлу прописать?
|
Цитата:
|
Цитата YuS_2:
можно и прописать... можно и рядом со скриптом его поискать... тут уж, чего больше душа пожелает... » Да, спасибо с файлом разобрался, подскажите, а нельзя сюда применить из первого сообщения Цитата:
по хешу разному разобрался утилита certutil дает хеш тот который дает и скрипт, а вот почему 7zip дает другой при выборе SHA256 непонятно ну и ладно, у меня 7zip в системе нет. |
Цитата:
Цитата:
Но если хочется, то проблем никаких нет: Код:
param ( |
Резюмирую:
Проверил на XP-7 PowerShell 2.0 Код:
param ( Цитата:
вот этот вариант на XP-7 PowerShell 2.0: Код:
function get-fhash($x){ |
Цитата:
Цитата:
Код:
param ( Цитата:
Так он мог себя вести до того, как я его поправлял... если там в коде вызов функции был таким: Код:
...get-fhash $_} Код:
...get-fhash $_.fullname} |
Вложений: 1
Цитата:
|
Цитата:
Цитата:
Код:
dir $env:windir\system32\*.exe -rec Код:
dir $env:windir\system32 -rec -filt "*.exe" |
Время: 12:03. |
Время: 12:03.
© OSzone.net 2001-