2016-07-18 3 views
1

Я пытаюсь применить хеш-функцию ко всем файлам внутри папки как своего рода контроль версий. Идея состоит в том, чтобы создать тестовый файл, в котором перечислены имя файла и сформированная контрольная сумма. Рытье онлайн я нашел код, который должен сделать трюк (в теории):Powershell не отправляет правильный путь для файла в качестве аргумента

$list = Get-ChildItem 'C:\users\public\documents\folder' -Filter *.cab 
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

foreach ($file in $list) { 
$return = "" | Select Name, Hash 

$returnname = $file.Name 
$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.Name))) 
$return = "$returnname,$returnhash" 

Out-File -FilePath .\mylist.txt -Encoding Default -InputObject ($return) -Append 
} 

Когда я запускаю его, однако, я получаю сообщение об ошибке, потому что он пытается читать файлы из C: \ Users \ Me \, то где я запускаю скрипт. И файл c: \ users \ me \ aa.cab не существует и, следовательно, не может быть достигнут.

Я пробовал все, что мог придумать, но не повезло. Я использую Windows 7 с Powershell 2.0, если это помогает в любом случае.

ответ

2

Попробуйте использовать .FullName вместо имени .Name.

$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.FullName)))

+0

Это сделало трюк. Большое спасибо! – Variax

Смежные вопросы