|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Массовое определение контрольных сумм файлов |
|
|
PowerShell - Массовое определение контрольных сумм файлов
|
|
Старожил Сообщения: 184 |
Добрый день! Хочу в папке Windows всем exe файлам определить контрольные суммы (в дальнейшем и не только в Windows). Через PowerShell:
param (
[string]$FolderPath, # c:\windows
[string]$LogFile = "c:\1\checksums.log"
)
if (-Not (Test-Path $FolderPath))
{
Write-Host "Путь не найден: $FolderPath"
exit
}
$files = Get-ChildItem -Path $FolderPath -Recurse -Filter *.exe
$logFileStream = New-Object System.IO.StreamWriter($LogFile, $false)
foreach ($file in $files) {
try {
$hash = Get-FileHash -Path $file.FullName -Algorithm SHA256
$logEntry = "{0} {1}" -f $hash.Hash, $file.FullName
$logFileStream.WriteLine($logEntry)
Write-Host "Контрольная сумма для $($file.FullName): $($hash.Hash)"
} catch {
Write-Host "Ошибка при обработке файла $($file.FullName): $_"
}
}
$logFileStream.Close()
Write-Host "Результаты сохранены в $LogFile"
Цитата:
Цитата:
|
|||
|
Отправлено: 13:19, 28-12-2024 |
|
Старожил Сообщения: 184
|
Профиль | Отправить PM | Цитировать Я же правильно понимаю если для XP сделать, то и на 7 взлетит?
|
|
Отправлено: 16:36, 04-01-2025 | #21 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата alexdomovoi:
![]() Вот, функция: 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
|
|
|
------- Отправлено: 18:19, 04-01-2025 | #22 |
|
fascinating rhythm Сообщения: 6699
|
Профиль | Отправить PM | Цитировать Реально проверил на Windows XP sp3.
Там отсутствует certutil.exe в стандартной поставке, а на выдаёт ошибки New-Object : Исключение при вызове ".ctor" с "0" аргументами: "The specified cryptographic algorithm is not supported on this platform."
строка:1 знак:11
+ new-object <<<< System.Security.Cryptography.SHA256CryptoServiceProvider
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
или
New-Object : Не удается найти тип [System.Security.Cryptography.SHA256CryptoServiceProvider]: убедитесь в том, что сборка, содержащая этот тип, загружена.
строка:4 знак:19
+ $hash = new-object <<<< System.Security.Cryptography.SHA256CryptoServiceProvider
+ CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
$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, 04-01-2025 в 20:36. Отправлено: 20:26, 04-01-2025 | #23 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Но если работает: то функция может быть такой: |
|
|
------- Отправлено: 00:48, 05-01-2025 | #24 |
|
fascinating rhythm Сообщения: 6699
|
Профиль | Отправить PM | Цитировать Да, так работает.
|
|
------- Отправлено: 05:54, 05-01-2025 | #25 |
|
Старожил Сообщения: 184
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
единственное подскажите как этот результат сразу в файл загнать? а так что бы он не только в папке system32 но и в подпапках всех сразу собрал по маске контрольные суммы и выдал с путями их полными. а то он только в system32 exe дает, а в подпапках как? Спасибо! |
|
|
Отправлено: 16:29, 05-01-2025 | #26 |
|
Старожил Сообщения: 184
|
Профиль | Отправить PM | Цитировать проверяю SHA 256
а суммы у файлов разные...... |
|
Отправлено: 16:40, 05-01-2025 | #27 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата alexdomovoi:
Цитата alexdomovoi:
Цитата alexdomovoi:
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
|
|||
|
------- Последний раз редактировалось YuS_2, 08-01-2025 в 22:28. Причина: поправлен код для корректной работы get-fhash $_ -> get-fhash $_.fullname + ещё правка для рекурсии Отправлено: 19:02, 05-01-2025 | #28 |
|
Старожил Сообщения: 184
|
Профиль | Отправить PM | Цитировать Цитата 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 » тишина какая то, или неправильно что то делаю? |
|
Последний раз редактировалось alexdomovoi, 06-01-2025 в 13:55. Отправлено: 11:46, 06-01-2025 | #29 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать |
|
------- Отправлено: 14:49, 06-01-2025 | #30 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| CMD/BAT - Массовое переименование файлов | Super_Kolobok | Скриптовые языки администрирования Windows | 4 | 19-05-2024 16:28 | |
| Программы для сверки контрольных сумм | KaSpieC 666 | Хочу все знать | 17 | 16-12-2014 18:39 | |
| CMD/BAT - Сравнение контрольных сумм md5 | vodka | Скриптовые языки администрирования Windows | 11 | 09-01-2013 07:11 | |
| Прочие - Программы для подсчёта контрольных сумм файлов | ALEXEY_DFD | Программное обеспечение Windows | 14 | 18-11-2011 15:30 | |
| C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах | Drongo | Программирование и базы данных | 49 | 30-08-2010 18:39 | |
|