Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Массовое определение контрольных сумм файлов (http://forum.oszone.net/showthread.php?t=356009)

alexdomovoi 28-12-2024 13:19 3034563

Массовое определение контрольных сумм файлов
 
Добрый день! Хочу в папке 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" не распознано как имя командлета, функции, файла скрипт
а или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего пов
торите попытку.
Подскажите, что подправить, что бы взлетело? Спасибо!

NickM 28-12-2024 13:37 3034564

Цитата:

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

Параметр для задания каталога Вы передаёте? Каким образом Вы запускаете сценарий?

Как вариант, задайте путь к каталогу в первой переменной, как это присвоение сделано во второй переменной.

alexdomovoi 28-12-2024 13:48 3034565

Цитата:

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

Запускаю PowerShell под админом туда копирую код и все.

NickM 28-12-2024 14:00 3034566

Цитата:

Цитата alexdomovoi
Запускаю PowerShell под админом туда копирую код и все. »

Ну вот, а первый параметр следует передавать, поэтому:
Цитата:

Цитата NickM
Как вариант, задайте путь к каталогу в первой переменной, как это присвоение сделано во второй переменной. »


YuS_2 28-12-2024 14:04 3034567

Цитата:

Цитата 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"


DJ Mogarych 28-12-2024 21:36 3034575

Можно через 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"


Vadikan 29-12-2024 14:22 3034586

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

DJ Mogarych 29-12-2024 15:19 3034587

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


$7z = 'C:\Program Files\7-Zip\7z.exe'

Checksum = (& certutil.exe -hashfile $_.fullname sha256)[1]


Vadikan 29-12-2024 18:57 3034599

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

DJ Mogarych 29-12-2024 19:26 3034600

И в нижнем работает:
Код:

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


Vadikan 29-12-2024 19:54 3034601

DJ Mogarych, значит исправили

alexdomovoi 30-12-2024 02:31 3034610

Цитата:

Цитата DJ Mogarych
И в нижнем работает:
Код: Выделить весь код
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 268d5226f97813b3280b67ad3037c2aadd32bee89e319d »

Сделал так:
Цитата:

$report = @()
dir C:\windows\*.exe |% {
$obj = [pscustomobject]@{
Path = $_.fullname
Checksum = (& certutil.exe -hashfile $_.fullname sha256) -match 'for data' -replace '.*\s+' -as [string]
}
$report += $obj
}
все равно не взлетает. в 10 тоже

DJ Mogarych 30-12-2024 08:54 3034613

Напишите правильно строку с Checksum, сейчас у вас одна половина из одного варианта, а вторая - из другого.

Uragan66 31-12-2024 19:16 3034665

Самый простой вариант:

Код:

# Укажите путь к папке
$folderPath = "C:\MyFolder"

# Выберите алгоритм хеширования (MD5, SHA1, SHA256)
$hashAlgorithm = "SHA256"

# Получите список файлов в папке
$files = Get-ChildItem -Path $folderPath -File

# Переберите все файлы и вычислите контрольную сумму
foreach ($file in $files) {
  # Вычислите контрольную сумму с помощью выбранного алгоритма
  $hash = Get-FileHash -Algorithm $hashAlgorithm -Path $file.FullName

  # Выведите информацию о файле и его контрольной сумме
  Write-Host "Файл: $($file.Name)"
  Write-Host "Контрольная сумма ($hashAlgorithm): $($hash.Hash)"
  Write-Host ""
}

Кстати, скрипт писал ИИ. У себя проверил, работает.

DJ Mogarych 01-01-2025 19:30 3034678

Uragan66, выше писали о том, что Get-FileHash недоступен на древних операционках.

Foreigner 03-01-2025 10:14 3034712

Цитата:

Цитата Uragan66
-Path $file.FullName »

А просто $File, без Fullname не работает? Я уже забыл как это в Windows PowerShell (5.1), в 7+ путь берется сам, из объекта System.IO.FileInfo или DirectoryInfo.

DJ Mogarych 03-01-2025 11:46 3034713

Foreigner, работает и в 5.1.

YuS_2 03-01-2025 13:59 3034715

Цитата:

Цитата DJ Mogarych
Get-FileHash недоступен на древних операционках. »

можно попробовать:
Код:

$hash = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$hash.computehash

но, это если ТС-у ещё нужно, до сих пор. :)

SQLai Lama 03-01-2025 20:56 3034720

Прежде всего 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 04-01-2025 15:55 3034733

Цитата:

Цитата YuS_2
о, это если ТС-у ещё нужно, до сих пор. »

Спасибо! Мне все варианты нужны так как парк от XP до 10 поэтому по всем ОС собрать нужно.

alexdomovoi 04-01-2025 16:36 3034734

Я же правильно понимаю если для XP сделать, то и на 7 взлетит?

YuS_2 04-01-2025 18:19 3034737

Цитата:

Цитата alexdomovoi
правильно понимаю если для XP сделать, то и на 7 взлетит? »

да... Вы бы уже просто попробовали :)
Вот, функция:
Код:

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

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

DJ Mogarych 04-01-2025 20:26 3034741

Реально проверил на 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 <<<<  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

Заработало 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


YuS_2 05-01-2025 00:48 3034750

Цитата:

Цитата DJ Mogarych
выдаёт ошибки »

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 05-01-2025 05:54 3034751

Да, так работает.

alexdomovoi 05-01-2025 16:29 3034771

Вложений: 1
Цитата:

Цитата 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 »

вот этот вариант заработал на xp и 7
единственное подскажите как этот результат сразу в файл загнать?
а так что бы он не только в папке system32 но и в подпапках всех сразу собрал по маске контрольные суммы и выдал с путями их полными. а то он только в system32 exe дает, а в подпапках как?
Спасибо!

alexdomovoi 05-01-2025 16:40 3034772

Вложений: 1
проверяю SHA 256
а суммы у файлов разные......

YuS_2 05-01-2025 19:02 3034779

Цитата:

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

Цитата:

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

Цитата:

Цитата 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


alexdomovoi 06-01-2025 11:46 3034789

Вложений: 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 06-01-2025 14:49 3034791

Цитата:

Цитата alexdomovoi
тишина какая то »

файл же надо поискать :)
вот же, это Вы писали:
Цитата:

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

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

Цитата alexdomovoi
out-file out.csv -enc utf8 »


alexdomovoi 06-01-2025 19:08 3034798

А там может путь к файлу прописать?

YuS_2 06-01-2025 20:42 3034804

Цитата:

Цитата alexdomovoi
может путь к файлу прописать? »

можно и прописать... можно и рядом со скриптом его поискать... тут уж, чего больше душа пожелает...

alexdomovoi 07-01-2025 04:37 3034808

Цитата YuS_2:
можно и прописать... можно и рядом со скриптом его поискать... тут уж, чего больше душа пожелает... »
Да, спасибо с файлом разобрался, подскажите, а нельзя сюда применить из первого сообщения
Цитата:

$files = Get-ChildItem -Path $FolderPath -Recurse -Filter *.exe
что бы собирались данные по exe из всех подпапок тоже?
по хешу разному разобрался утилита certutil дает хеш тот который дает и скрипт, а вот почему 7zip дает другой при выборе SHA256 непонятно ну и ладно, у меня 7zip в системе нет.

YuS_2 07-01-2025 12:29 3034823

Цитата:

Цитата alexdomovoi
нельзя сюда применить из первого сообщения »

да, можно, конечно.

Цитата:

Цитата alexdomovoi
что бы собирались данные по exe из всех подпапок тоже? »

на это влияет параметр -Recurse командлета Get-ChildItem, который в моем варианте также присутствует. Вы ведь можете увидеть, что в файле присутствуют пути к файлам из подкаталогов... то бишь, разницы никакой нет, ещё и экономия памяти в моем варианте...
Но если хочется, то проблем никаких нет:
Код:

param (
    [string]$FolderPath,  # c:\windows
    [string]$LogFile = "c:\1\checksums.log"
)
if (-Not (Test-Path $FolderPath))
{
    Write-Host "Путь не найден: $FolderPath"
    exit
}

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()
}

$files = dir $FolderPath -rec -filt "*.exe"

$files|%{
        new-object PSObject -Property @{Path = $_.fullname;SHA256 = get-fhash $_.fullname}
} |convertto-csv -notyp|out-file $LogFile -enc utf8


alexdomovoi 08-01-2025 10:46 3034839

Резюмирую:
Проверил на XP-7 PowerShell 2.0

Код:

param (
    [string]$FolderPath,  # c:\windows
    [string]$LogFile = "c:\1\checksums.log"
)
if (-Not (Test-Path $FolderPath))
{
    Write-Host "Путь не найден: $FolderPath"
    exit
}

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()
}

$files = dir $FolderPath -rec -filt "*.exe"

$files|%{
        new-object PSObject -Property @{Path = $_.fullname;SHA256 = get-fhash $_.fullname}
} |convertto-csv -notyp|out-file $LogFile -enc utf8

выдает ошибку
Цитата:

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

вот этот вариант на XP-7 PowerShell 2.0:
Код:

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 $_.fullname}
} |convertto-csv -notyp |out-file c:\1\out.csv -enc utf8

отрабатывает без ошибки, но при этом отрабатывает exe только в одной папке в которой я запускаю данный скрипт без подпапок (windir\system32).

YuS_2 08-01-2025 15:04 3034850

Цитата:

Цитата alexdomovoi
выдает ошибку »

Ну так надо дать ему то, чего скрипт хочет... путь к каталогу в виде параметра к скрипту... ну, или указать его здесь:
Цитата:

Цитата alexdomovoi
[string]$FolderPath, # c:\windows »

например, так:
Код:

param (
    [string]$FolderPath = "c:\windows",  # c:\windows
    [string]$LogFile = "c:\1\checksums.log"
)
...

- если скрипт предполагаете запускать без параметров

Цитата:

Цитата alexdomovoi
отрабатывает без ошибки, но при этом отрабатывает exe только в одной папке в которой я запускаю данный скрипт без подпапок (windir\system32). »

Этого просто не может быть... я его проверял на Win 7, где ps 2.0
Так он мог себя вести до того, как я его поправлял... если там в коде вызов функции был таким:
Код:

...get-fhash $_}
а не как сейчас:
Код:

...get-fhash $_.fullname}

alexdomovoi 08-01-2025 19:39 3034853

Вложений: 1
Цитата:

Цитата YuS_2
Этого просто не может быть... я его проверял на Win 7, где ps 2.0 »

скрин исполнения и результата прилагаю

YuS_2 08-01-2025 22:23 3034858

Цитата:

Цитата alexdomovoi
скрин исполнения и результата прилагаю »

А, да... точно. Не обратил внимания, что подкаталогов нет. Параметр Recurse претерпел изменения с версии PS 3.0, а для PS 2.0 было так:
Цитата:

Параметр Recurse работает только в том случае, если путь указывает на контейнер с дочерними элементами, на
пример "C:\Windows" или "C:\Windows\*", и не работает, если путь указывает на элементы без дочерних элемен
тов, например "C:\Windows\*.exe".
так что да, необходимо поменять было эту комбинацию. Вот это:
Код:

dir $env:windir\system32\*.exe -rec
- надо поменять на это:
Код:

dir $env:windir\system32 -rec -filt "*.exe"
Ну или использовать тот последний вариант скрипта, где путь к каталогу можно указывать в качестве параметра скрипта.


Время: 12:03.

Время: 12:03.
© OSzone.net 2001-