PowerShell - Массовое определение контрольных сумм файлов

Ответить
 • Просмотры: 9
Аватара пользователя
SQLai Lama

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение SQLai Lama »

Прежде всего Get-FileHash является функцией, код которой вполне можно подсмотреть:



Код:

Код: Выделить всё

Get-Content function:Get-FileHash

Однако копировать её код, в надежде "портировать" под XP, идея заведомо обречённая на провал, так как PowerShell второй версии, которая является пределом для XP, отличается рантайм либой. Поэтому придётся писать нечто вроде:



Код:

Код: Выделить всё

$a = [Security.Cryptography.SHA256]::Create()
-join$a.ComputeHash([IO.File]::ReadAllBytes("$env:windir\explorer.exe")).ForEach{$_.ToString('x2')}
$a.Dispose()

К слову, Get-FileHash вполне обходится без циклов:



Код:

Код: Выделить всё

Get-FileHash "$([Environment]::SystemDirectory)\*.exe"
Аватара пользователя
alexdomovoi

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение alexdomovoi »

Цитата alexdomovoi:



правильно понимаю если для XP сделать, то и на 7 взлетит?
PowerShell - Массовое определение контрольных сумм файлов




да... Вы бы уже просто попробовали Изображение

Вот, функция:



Код:

Код: Выделить всё

function get-fhash($x){
    $hash = new-object Security.Cryptography.SHA256CryptoServiceProvider
    $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()
}
$f = '.\explorer.exe'
get-fhash $f

- в функцию передавайте пути к файлам, лучше абсолютные... в общем, разберетесь.
Аватара пользователя
alexdomovoi

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение alexdomovoi »

Реально проверил на 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."
строка:1 знак:11
+ new-object 

Заработало 2 варианта - с 7-zip



Код:

Код: Выделить всё

$7z = 'C:\Program Files\7-Zip\7z.exe'
$report = @()
dir $env:windir\system32\*.exe |% {
    $props = @{
        Path = $_.fullname
        Checksum = (& $7z h -scrcsha256 $_.fullname) -match 'for data' -replace '.*\s+' -as [string]
    }
    $obj = New-Object -TypeName PSObject -Property $props
    $report += $obj
}
$report

И без



Код:

Код: Выделить всё

$report = @()
dir $env:windir\system32\*.exe |% {
    $a = [Security.Cryptography.SHA256]::Create()
    $props = @{
        Path = $_.fullname
        Checksum = ($a.ComputeHash([IO.File]::ReadAllBytes("$($_.fullname)")) |% {$_.ToString('x2')}) -join ''
    }
    $obj = New-Object -TypeName PSObject -Property $props
    $report += $obj
}
$report
Аватара пользователя
DJ Mogarych

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение DJ Mogarych »

Цитата DJ Mogarych:



выдаёт ошибки
PowerShell - Массовое определение контрольных сумм файлов




XP у меня нет, проверять нечем...

Но если работает:



Код:

Код: Выделить всё

[Security.Cryptography.SHA256]

то функция может быть такой:



Код:

Код: Выделить всё

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()
}
Аватара пользователя
DJ Mogarych

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение DJ Mogarych »

Цитата DJ Mogarych:



$report = @()

dir $env:windir\system32\*.exe |% {

$a = [Security.Cryptography.SHA256]::Create()

$props = @{

Path = $_.fullname

Checksum = ($a.ComputeHash([IO.File]::ReadAllBytes("$($_.fullname)")) |% {$_.ToString('x2')}) -join ''

}

$obj = New-Object -TypeName PSObject -Property $props

$report += $obj

}

$report
PowerShell - Массовое определение контрольных сумм файлов




вот этот вариант заработал на xp и 7

единственное подскажите как этот результат сразу в файл загнать?

а так что бы он не только в папке system32 но и в подпапках всех сразу собрал по маске контрольные суммы и выдал с путями их полными. а то он только в system32 exe дает, а в подпапках как?

Спасибо!
Аватара пользователя
alexdomovoi

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение alexdomovoi »

проверяю SHA 256

а суммы у файлов разные......
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
alexdomovoi

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение alexdomovoi »

Цитата alexdomovoi:



единственное подскажите как этот результат сразу в файл загнать?
PowerShell - Массовое определение контрольных сумм файлов





Цитата alexdomovoi:



так что бы он не только в папке system32 но и в подпапках всех сразу собрал по маске контрольные суммы и выдал с путями их полными. а то он только в system32 exe дает, а в подпапках как?
PowerShell - Массовое определение контрольных сумм файлов





Цитата alexdomovoi:



суммы у файлов разные
PowerShell - Массовое определение контрольных сумм файлов






Код:

Код: Выделить всё

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 -rec -filt "*.exe"|%{
	new-object PSObject -Property @{Path = $_.fullname;SHA256 = get-fhash $_.fullname}
} |convertto-csv -notyp |out-file out.csv -enc utf8
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
YuS_2

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение YuS_2 »

Цитата 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
PowerShell - Массовое определение контрольных сумм файлов


тишина какая то, или неправильно что то делаю?
Аватара пользователя
alexdomovoi

Re: PowerShell - Массовое определение контрольных сумм файлов

Сообщение alexdomovoi »

Цитата alexdomovoi:



тишина какая то
PowerShell - Массовое определение контрольных сумм файлов




файл же надо поискать Изображение

вот же, это Вы писали:


Цитата alexdomovoi:



подскажите как этот результат сразу в файл загнать?
PowerShell - Массовое определение контрольных сумм файлов




?

- так вот и надо теперь искать файл:


Цитата alexdomovoi:



out-file out.csv -enc utf8
PowerShell - Массовое определение контрольных сумм файлов
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Ответить

Вернуться в «Скриптовые языки администрирования Windows»