Get-FileHash
指定されたハッシュ アルゴリズムを使用して、ファイルのハッシュ値を計算します。
構文
Get-FileHash
[-Path] <String[]>
[-Algorithm <String>]
[<CommonParameters>]
Get-FileHash
-LiteralPath <String[]>
[-Algorithm <String>]
[<CommonParameters>]
Get-FileHash
-InputStream <Stream>
[-Algorithm <String>]
[<CommonParameters>]
説明
Get-FileHash
コマンドレットは、指定したハッシュ アルゴリズムを使用してファイルのハッシュ値を計算します。
ハッシュ値とは、ファイルの内容に対応する一意の値です。 ハッシュは、ファイルの内容をファイル名や拡張子などの指定で識別するのではなく、ファイルの内容に一意の値を割り当てます。 ファイル名と拡張子は、ファイルの内容を変更することなく、ハッシュ値を変更することもなく、変更できます。 同様に、ファイルの内容は名前や拡張子を変更せずに変更できます。 ただし、ファイルの内容を 1 文字でも変更すると、ファイルのハッシュ値は変更されます。
ハッシュ値の目的は、ファイルの内容が変更されていないことを確認するための、暗号化による安全な方法を提供することです。 MD5 や SHA1 を含む一部のハッシュ アルゴリズムは攻撃に対してセキュリティで保護されていると見なされなくなりましたが、セキュリティで保護されたハッシュ アルゴリズムの目的は、誤って、または悪意のある試みまたは未承認の試行によってファイルの内容を変更することが不可能になり、同じハッシュ値を維持することです。 また、ハッシュ値を使用して、2 つの異なるファイルの内容がまったく同じかどうかを確認することもできます。 2 つのファイルのハッシュ値が同一の場合は、ファイルの内容も同一です。
既定では、 Get-FileHash
コマンドレットは SHA256 アルゴリズムを使用しますが、ターゲット オペレーティング システムでサポートされているハッシュ アルゴリズムは使用できます。
例
例 1: ファイルのハッシュ値を計算する
この例では、 Get-FileHash
コマンドレットを使用して、 Powershell.exe
ファイルのハッシュ値を計算します。
使用するハッシュ アルゴリズムは、既定の SHA256 です。 出力は、 Format-List
コマンドレットにパイプ処理され、出力を一覧として書式設定します。
Get-FileHash $PSHOME\powershell.exe | Format-List
Algorithm : SHA256
Hash : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
例 2: ISO ファイルのハッシュ値を計算する
この例では、 Get-FileHash
コマンドレットと SHA384 アルゴリズムを使用して、管理者がインターネットからダウンロードした ISO ファイルのハッシュ値を計算します。 出力は、 Format-List
コマンドレットにパイプ処理され、出力を一覧として書式設定します。
Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\user1\Downloads\Contoso8_1_ENT.iso
例 3: ストリームのハッシュ値を計算する
この例では、 System.Net.WebClient を使用して、 Powershell リリース ページからパッケージをダウンロードします。 リリース ページでは、各パッケージ ファイルの SHA256 ハッシュも文書化されています。 公開されたハッシュ値と、 Get-FileHash
で計算したハッシュ値を比較できます。
$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
True
例 4: 文字列のハッシュを計算する
PowerShell には、文字列のハッシュを計算するコマンドレットは用意されていません。 ただし、ストリームに文字列を書き込み、Get-FileHash
の InputStream パラメーターを使用してハッシュ値を取得できます。
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash
Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C
パラメーター
-Algorithm
指定したファイルまたはストリームの内容のハッシュ値を計算するために使用する暗号化ハッシュ関数を指定します。 暗号化ハッシュ関数には、同じハッシュ値を持つ 2 つの異なるファイルを検索することは不可能なプロパティがあります。 ハッシュ関数は、データの整合性を確保するために、よくデジタル署名と共に使用されます。 このパラメーターの有効値は、次のとおりです。
- SHA1
- SHA256
- SHA384
- SHA512
- MACTripleDES
- MD5
- RIPEMD160
値を指定しなかった場合、またはパラメーターを省略した場合、既定値は SHA256 です。
セキュリティ上の理由により、安全と見なされなくなった MD5 と SHA1 は、単純な変更の検証にのみ使用し、攻撃や改ざんからの保護が必要なファイルのハッシュ値の生成には使用しないでください。
型: | String |
指定可能な値: | SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160 |
配置: | Named |
規定値: | SHA256 |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InputStream
入力ストリームを指定します。
型: | Stream |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-LiteralPath
ファイルのパスを指定します。 Path パラメーターとは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、文字をエスケープ シーケンスとして解釈しないように PowerShell に指示します。
型: | String[] |
Aliases: | PSPath |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Path
1 つ以上のファイルへのパスを配列として指定します。 ワイルドカード文字を使用できます。
型: | String[] |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
入力
ファイルへのパスを含む文字列をこのコマンドレットにパイプできます。
出力
Microsoft.PowerShell.Utility.FileHash
このコマンドレットは、指定されたファイルへのパス、計算されたハッシュの値、およびハッシュの計算に使用されるアルゴリズムを表すオブジェクトを返します。
関連リンク
PowerShell