ファイルのチェックサムを表示するPowerShellスクリプト

## 追記

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先生にお願いしたほうが早いのはこの際忘れておいてください。

といいつつ、今後改良するかも…

「ファイルのチェックサムを表示するPowerShellスクリプト」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中