Расчет Ha sh для всего оптического носителя Dis c с помощью PowerShell - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь найти способ создания контрольной суммы / га sh CD или DVD с помощью PowerShell. Я знаю, Get-Filehash очень хорошо работает с файлами, но я не могу понять, как это сделать для оптических носителей. Я думал, что смогу использовать Get-Content для получения потока битов и передачи его на Get-Filehash, но выполнение Get-Content -Path D:\ (где D: dis c) возвращает «Доступ к пути» D: \ 'запрещено. Get-Volume только кажется, что возвращает объект со свойствами, а не битовый поток.

У меня уже есть файл ISO-образа для диска c. Пытаюсь получить контрольную сумму в целом оригинальный диск c для сравнения с ISO, чтобы убедиться, что он был скопирован правильно.

Есть предложения или указатели?

Ответы [ 2 ]

0 голосов
/ 25 января 2020

Если я правильно понимаю вопрос, вы хотели бы получить хэш-значение для всего на компакт-диске ( получить контрольную сумму для всего оригинального диска c).

Для этого Вы можете использовать вспомогательную функцию ниже:

function Get-FolderHash {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [string]$Path,

        [ValidateSet('SHA1','SHA256','SHA384','SHA512','MD5')]
        [string]$Algorithm = 'MD5'
    )
    # create a new temporary file
    $temp=[System.IO.Path]::GetTempFileName()

    Get-ChildItem -Path $Path -File -Recurse | 
        Get-FileHash -Algorithm $Algorithm | 
        Select-Object -ExpandProperty Hash | 
        Out-File -FilePath $temp -NoNewline -Encoding ascii

    $hash = Get-FileHash -Path $temp -Algorithm $Algorithm
    $hash.Path = $Path

    Remove-Item -Path $temp

    return $hash
}

Get-FolderHash D:\

Надеюсь, что поможет

0 голосов
/ 25 января 2020

В вашем примере Get-Content -Path D:\ завершается ошибкой, потому что вы не указываете на файл. Из документации Get-Content :

-Path

Указывает путь к элементу, в который Get-Content получает содержимое. Подстановочные знаки разрешены. Пути должны быть путями к элементам, а не к контейнерам. Например, вы должны указать путь к одному или нескольким файлам, а не путь к каталогу.

Т.е. оптический привод не является проблемой для этого командлета; Вы увидите ту же ошибку, если попробуете это на своем C:/ диске.

Из вопроса я не уверен, содержит ли ваш оптический привод извлеченный ISO или только ISO, но что-то вроде этого должно Начало работы:

Get-ChildItem -Path d:\ -Recurse -File | foreach { 
    Get-FileHash $_.FullName; 
}
...