0

我正在尝试找到一种使用 PowerShell 创建 CD 或 DVD 的校验和/哈希的方法。我知道Get-Filehash在文件上效果很好,但我不知道如何为光学媒体做这件事。我在想我也许可以Get-Content用来获取比特流并将其通过管道传输到Get-Filehash,但是运行Get-Content -Path D:\(其中 D: 是光盘)返回一个“拒绝访问路径 'D:\'。Get-Volume似乎只返回一个对象属性,而不是比特流。

我已经有光盘的 ISO 映像文件。我正在尝试获取整个原始光盘上的校验和,以与 ISO 进行比较,以确保它被正确翻录。

有什么建议或指示吗?

4

3 回答 3

0

从您的示例中,Get-Content -Path D:\失败是因为您没有指向文件。从获取内容文档

-小路

指定 Get-Content 获取内容的项目的路径。允许使用通配符。路径必须是指向项目的路径,而不是指向容器的路径。例如,您必须指定一个或多个文件的路径,而不是目录的路径。

即,光驱不是该 cmdlet 的问题;如果你在你的C:/驱动器上尝试过,你会看到同样的错误。

从这个问题中,我不确定您的光驱是否包含提取的 ISO 或仅包含 ISO,但这样的事情应该让您开始:

Get-ChildItem -Path d:\ -Recurse -File | foreach { 
    Get-FileHash $_.FullName; 
}
于 2020-01-24T23:43:16.913 回答
0

我想出了以下方法:

function Hash-Media([string]$drive, [string]$algorithm){
     <#
     .SYNOPSIS
         Hashes the entire drive letter using the provided algorithm
     .PARAMETER  $drive
         The drive letter, eg 'd:'
     .PARAMETER  $algorithm
         Any algorithm acceptable by Get-FileHash, eg SHA1, SHA256, etc
     .EXAMPLE
         PS> Hash-Media e: SHA256
         43E2B7D5142592222FFA39F7AB15706911B8D14AAF0186D2A44CA07581F5FEBA
     #>

     
     
     $raw_stream = [System.IO.File]::Open('\\.\' + $drive, 'open', 'Read', 'Read')
     $hash = Get-FileHash -InputStream $raw_stream -Algorithm $algorithm
     return $hash.Hash
}

这将返回与在刻录之前直接检查 ISO 文件相同的值。

于 2021-02-11T15:24:57.947 回答
0

如果我正确理解了这个问题,您希望获得 CD 上所有内容的哈希值(获取整个原始光盘上的校验和)。

为此,您可以使用以下辅助函数:

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:\

希望有帮助

于 2020-01-25T11:12:43.887 回答