Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Массовое определение контрольных сумм файлов

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

Старожил


Сообщения: 184
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добрый день! Хочу в папке 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"
На windows 10 вроде как делает но выходит ошибка (которая не мешает проведению контроля целостности):

Цитата:
Test-Path : Не удается привязать аргумент к параметру "Path", так как он представляет собой пустую строку.
строка:1 знак:21
+ if (-Not (Test-Path $FolderPath))
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidData: (Very Happy [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.Test
PathCommand
На 7 и XP пытается делать но результата ноль ошибка другого формата:
Цитата:
Test-Path : Не удается привязать аргумент к параметру "Path", так как он представляет собой пустую строку.
строка:5 знак:20
+ if (-Not (Test-Path <<<< $FolderPath))
+ CategoryInfo : InvalidData: (Very Happy [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.Test
PathCommand

Ошибка при обработке файла C:\windows\explorer.exe: Имя "Get-FileHash" не распознано как имя командлета, функции, файла
скрипта или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после че
го повторите попытку.
Ошибка при обработке файла C:\windows\hh.exe: Имя "Get-FileHash" не распознано как имя командлета, функции, файла скрипт
а или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего пов
торите попытку.
Подскажите, что подправить, что бы взлетело? Спасибо!

Отправлено: 13:19, 28-12-2024

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4626
Благодарности: 1110

Профиль | Отправить PM | Цитировать


Цитата alexdomovoi:
На windows 10 вроде как делает но выходит ошибка (которая не мешает проведению контроля целостности): »
Параметр для задания каталога Вы передаёте? Каким образом Вы запускаете сценарий?

Как вариант, задайте путь к каталогу в первой переменной, как это присвоение сделано во второй переменной.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:37, 28-12-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 184
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата NickM:
Параметр для задания каталога Вы передаёте? Каким образом Вы запускаете сценарий? »
Запускаю PowerShell под админом туда копирую код и все.

Отправлено: 13:48, 28-12-2024 | #3


Аватара для NickM

Ветеран


Contributor


Сообщения: 4626
Благодарности: 1110

Профиль | Отправить PM | Цитировать


Цитата alexdomovoi:
Запускаю PowerShell под админом туда копирую код и все. »
Ну вот, а первый параметр следует передавать, поэтому:
Цитата NickM:
Как вариант, задайте путь к каталогу в первой переменной, как это присвоение сделано во второй переменной. »

Отправлено: 14:00, 28-12-2024 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1232
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата alexdomovoi:
На windows 10 вроде как делает но выходит ошибка (которая не мешает проведению контроля целостности) »
Что-то Вы недоговариваете...

Цитата alexdomovoi:
Test-Path : Не удается привязать аргумент к параметру "Path", так как он представляет собой пустую строку. »
такая ошибка возникнет только тогда, когда скрипт будет запущен без параметра с указанным каталогом для проверки...

Цитата alexdomovoi:
Ошибка при обработке файла C:\windows\explorer.exe: Имя "Get-FileHash" не распознано как имя командлета, функции, файла
скрипта или выполняемой программы. »
А здесь, вроде по-русски написано... в powershell версии 2.0 попросту нет такого командлета. Обновляйте powershell в win7, а XP - придумайте, что-то другое для подсчета hash

Цитата alexdomovoi:
Запускаю PowerShell под админом туда копирую код и все. »
Этот код написан для файла сценария, которому при запуске необходимо задавать каталог в качестве параметра.
Если хотите запускать так, то эту часть измените:
Код: Выделить весь код
param (
    [string]$FolderPath,  # c:\windows
    [string]$LogFile = "c:\1\checksums.log" 
)
на:
Код: Выделить весь код
[string]$FolderPath = 'c:\windows'
[string]$LogFile = "c:\1\checksums.log"

-------
scio me nihil scire. Ѫ


Отправлено: 14:04, 28-12-2024 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6690
Благодарности: 1566

Профиль | Отправить PM | Цитировать


Можно через 7-zip:
Код: Выделить весь код
$7z = 'C:\Program Files\7-Zip\7z.exe'
$report = @()
dir C:\temp\*.exe |% {
    $obj = [pscustomobject]@{
        Path = $_.fullname
        Checksum = (& $7z h -scrcsha256 $_.fullname) -match 'for data' -replace '.*\s+' -as [string]
    }
$report += $obj
}
Код: Выделить весь код
# Выгрузка в CSV
$report |export-csv c:\temp\checksum.csv -Encoding utf8 -Delimiter ';' -NoTypeInformation

gc c:\temp\checksum.csv

"Path";"Checksum"
"C:\temp\DjVuLibre-3.5.28_DjView-4.12_Setup.exe";"16c0a63926d0380280f35c8d9570efe01032c03c262ba61aa72a341b8cb58469"
"C:\temp\handheld_quake_setup.exe";"cdc755bd5052d3b7a4d837e579d932baef2162fcad001479f2214b1506bb43ee"
"C:\temp\LibreELEC.USB-SD.Creator.Win32.exe";"3730ee946845d59d85926d7f55b3149b3ba3fc8db8d2bec319f3c3c635ba9775"

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:36, 28-12-2024 | #6


(*.*)


Сообщения: 36570
Благодарности: 6700

Профиль | Сайт | Отправить PM | Цитировать


Зачем 7-zip если есть certutil https://www.outsidethebox.ms/10527/

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 29-12-2024 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6690
Благодарности: 1566

Профиль | Отправить PM | Цитировать


Вариант с certutil в скрипте выше
Код: Выделить весь код

$7z = 'C:\Program Files\7-Zip\7z.exe'
Checksum = (& certutil.exe -hashfile $_.fullname sha256)[1]

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:19, 29-12-2024 | #8


(*.*)


Сообщения: 36570
Благодарности: 6700

Профиль | Сайт | Отправить PM | Цитировать


DJ Mogarych, проверял? Алгоритм хэша надо указывать в верхнем регистре:) Трюки утилиты certutil

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 18:57, 29-12-2024 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6690
Благодарности: 1566

Профиль | Отправить PM | Цитировать


И в нижнем работает:
Код: Выделить весь код
PS C:\WINDOWS\System32> $report |select -first 5

Path                                                  Checksum                                                        
----                                                  --------                                                        
C:\WINDOWS\System32\agentactivationruntimestarter.exe be21cc87cd36ef8b88d738cd227270c0355ba93e2e4eff72e9fbf1d5c50de348
C:\WINDOWS\System32\AgentService.exe                  1adf75a3cd3eb83aebc8a6d72853970857f9b0cabdc29e5d6fbb915f2f7d688c
C:\WINDOWS\System32\AggregatorHost.exe                64aa037f7033a7b9701bddc8fa2f0aa34765d354eaec413719a3eeb466cfd703
C:\WINDOWS\System32\aitstatic.exe                     3aa57252eed27c048e58a16d7f2e9e80e3c860e29af0e7c8cad1f95b082f5858
C:\WINDOWS\System32\alg.exe                           268d5226f97813b3280b67ad3037c2aadd32bee89e319df760d79f67e1f5388b

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 19:26, 29-12-2024 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Массовое определение контрольных сумм файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход