## 追記
PowerShell 4.0だと “Get-FileHash” コマンドレットがありますので、そっちを使うと幸せになれるかも。
→ PowerShellでファイルハッシュを取得する方法
ファイルをダウンロードしたときに、チェックサムを計算すると思います。
Windowsだと、Microsoft純正の “FCIV.exe” がありますが、これの場合はアルゴリズムに “MD5” と “SHA1” しか使えないんですね。
それだと “SHA256” でしか置かれてなかったりすると、検証ができないなーと。
というわけで、各種アルゴリズムで使えるようにPowerShellのスクリプトを書いてみました。
書いてみたというよりは、ちょっと必要になったから急遽書いただけとゆー。
なお、いつものごとく使用は自己責任でお願いします。
# Get-Checksum.ps1: File Checksum Integrity Verifier Param( [string] $filename, [string] $algorithm = ( 'sha1' ), [switch] $help ) Function Calc-Hash { $fileStream = [system.io.file]::openread( ( resolve-path $filename ) ) $hash = [System.Security.Cryptography.HashAlgorithm]::create( $algorithm ).ComputeHash( $fileStream ) $fileStream.close() $fileStream.dispose() $value = [System.BitConverter]::ToString( $hash ).Replace( "-", "" ).ToLower() Write-Host "$value $filename" } Function View-Help { Write-Host "Usage: Get-Checksum [OPTION]... [FILE]... Print or check checksums. OPTIONS: -a, -algorithm md5, sha1, sha256, sha384, sha512, mactripledes, ripemd160 -h, -help Display this help. EXAMPLES: Get-Checksum filename.zip Get-Checksum -a md5 filename.zip " } Function Get-Options { If( $help ) { View-Help } elseif( !$filename ) { Write-Host "Missing filename. (`"Get-Checksum -help`" )" } else { Calc-Hash } } Get-Options
とりあえず実行したらこうなりますよっていう例を示しておきます。
なお、前提条件は次の通りです。
- PowerShellの実行ポリシーは “Restricted” から “RemoteSigned” に変更している
- PowerShellスクリプトのファイル名は “Get-Checksum.ps1” とする
- スクリプトは “C:\pss” ディレクトリに格納して、パスを通している
- カレントディレクトリはデスクトップ
- OpenBSDのサイトから、cd54.iso と SHA256 の2ファイルをダウンロードしてきている
1. “cd54.iso” のファイルチェックサムを計算して比較
PS C:\Users\shirase\Desktop> Get-Checksum -a sha256 cd54.iso 03124d2e38b9ac04d77be681c9c723dffb2cdd6b0688f823834c4ce1ceaa93b2 cd54.iso PS C:\Users\shirase\Desktop> type SHA256 | findstr cd54.iso SHA256 (cd54.iso) = 03124d2e38b9ac04d77be681c9c723dffb2cdd6b0688f823834c4ce1ceaa93b2
2. オプションを付けずに実行
PS C:\Users\shirase\Desktop> Get-Checksum Missing filename. ("Get-Checksum -help" )
3. ヘルプが表示される
PS C:\Users\shirase\Desktop> Get-Checksum -help Usage: Get-Checksum [OPTION]... [FILE]... Print or check checksums. OPTIONS: -a, -algorithm md5, sha1, sha256, sha384, sha512, mactripledes, ripemd160 -h, -help Display this help. EXAMPLES: Get-Checksum filename.zip Get-Checksum -a md5 filename.zip
4. 短縮オプションでもヘルプが表示される
PS C:\Users\shirase\Desktop> Get-Checksum -h Usage: Get-Checksum [OPTION]... [FILE]... Print or check checksums. OPTIONS: -a, -algorithm md5, sha1, sha256, sha384, sha512, mactripledes, ripemd160 -h, -help Display this help. EXAMPLES: Get-Checksum filename.zip Get-Checksum -a md5 filename.zip
5. アルゴリズムを指定しない場合はデフォルトの “SHA1” で計算される
PS C:\Users\shirase\Desktop> Get-Checksum cd54.iso 077c055bcbf814a00ff614c259a9976aac903c7b cd54.iso PS C:\Users\shirase\Desktop> Get-Checksum -a sha1 cd54.iso 077c055bcbf814a00ff614c259a9976aac903c7b cd54.iso
とまぁ、こんな感じで。
出力形式が何から何までUnixコマンドのパクりなのは、多分気のせいじゃないです。
“Print or check checksums” とか書いておいて、チェック機能を載せてないのは仕様です。
エラー処理がないのも、もちろん仕様です。
こんなのを書くより、Google先生にお願いしたほうが早いのはこの際忘れておいてください。
といいつつ、今後改良するかも…