[Windows PowerShell] MD5ハッシュ値を出力する簡単スクリプト
Windows PowerShell でMD5のハッシュ値を返す簡単スクリプト
SQL Server Integration Services(SSIS) でのMD5取得
MD5Hash.ps1
・使い方(1)
コマンドプロンプト(cmd.exe) から実行する場合、次の様なコマンドで実行する。
オプションの"-ExecutionPolicy ByPass" は、OSに設定されたPowerShellスクリプトの実行ポリシーを無視してスクリプトを実行する。
大抵のOSは既定の実行ポリシーが"Restricted" のすべて実行しない状態になっている。
以下の画像は Microsoft社が無償で公開している fciv.exe とのMD5値比較。
※クリックで拡大
fciv.exe は SHA-1 の値も出力することが可能なメリットがあるものの、Unicodeではない為か日本語のパスに対応していないデメリットがある。(2015/06/22 現在 Ver.2.05)
・使い方(2)
これを利用して SQL Server Integration Services(SSIS) でMD5を取得する。
スクリプト実行タスク を デザイナ の 制御フロー タブに入れ、以下の画像のように設定する。
英語環境のため説明は下記参照。
※クリックで拡大
通常は Foreachコンテナなどでファイルパスは変数に格納するが、今回は主な話ではないので設定しない。
Executable は実行プログラムを指定するため、直接 PowerShell.exeを指定する。
Arguments は Executable で指定したプログラムに対して引数を指定する。
StandardOutputVariable はプログラムから返る結果を変数に格納するので、その変数を指定。
FailTaskIfReturnCodeIsNotSuccessValue はプロセス終了コードが SuccessValue で指定されている値と異なった場合、タスクを終了するかどうかを指定。
今回の場合、画像ではFalseにしており、ReturnにはMD5が返るようにしているものの、Trueで試しても問題ないことを確認。
WindowStyle は Executable で指定したプログラムを隠すか、ウィンドウ表示するか最小化するかなどを指定。
※クリックで拡大
結果として変数にはMD5のハッシュ値が格納される。ただし、"\r\n"(0x0A0D)といった余分な改行コードが入るため、Replace関数やLeft関数で取り除くことが必要。
下のFor Debuggingのデータフロータスクはブレークポイントのために設置しているため無関係。
・動作確認表(スクリプト)
いずれも Windows Azure にて新規仮想マシン環境
・関連
Microsoft Support / File Checksum Integrity Verifier ユーティリティの概要と入手方法
https://support.microsoft.com/ja-jp/kb/841290/ja
SQL Server Integration Services(SSIS) でのMD5取得
MD5Hash.ps1
1 2 3 4 5 |
param($filename) $stream = New-Object IO.StreamReader $filename $md5 =[System.Security.Cryptography.MD5]::Create().ComputeHash($stream.BaseStream); $result = [System.BitConverter]::ToString($md5).Replace("-","").ToLower() Return $result |
・使い方(1)
コマンドプロンプト(cmd.exe) から実行する場合、次の様なコマンドで実行する。
> | powershell -ExecutionPolicy ByPass -command ".'C:\temp\MD5Hash.ps1' 'C:\temp\a.txt'" |
オプションの"-ExecutionPolicy ByPass" は、OSに設定されたPowerShellスクリプトの実行ポリシーを無視してスクリプトを実行する。
大抵のOSは既定の実行ポリシーが"Restricted" のすべて実行しない状態になっている。
以下の画像は Microsoft社が無償で公開している fciv.exe とのMD5値比較。
※クリックで拡大
fciv.exe は SHA-1 の値も出力することが可能なメリットがあるものの、Unicodeではない為か日本語のパスに対応していないデメリットがある。(2015/06/22 現在 Ver.2.05)
・使い方(2)
これを利用して SQL Server Integration Services(SSIS) でMD5を取得する。
スクリプト実行タスク を デザイナ の 制御フロー タブに入れ、以下の画像のように設定する。
英語環境のため説明は下記参照。
※クリックで拡大
通常は Foreachコンテナなどでファイルパスは変数に格納するが、今回は主な話ではないので設定しない。
Executable は実行プログラムを指定するため、直接 PowerShell.exeを指定する。
Arguments は Executable で指定したプログラムに対して引数を指定する。
StandardOutputVariable はプログラムから返る結果を変数に格納するので、その変数を指定。
FailTaskIfReturnCodeIsNotSuccessValue はプロセス終了コードが SuccessValue で指定されている値と異なった場合、タスクを終了するかどうかを指定。
今回の場合、画像ではFalseにしており、ReturnにはMD5が返るようにしているものの、Trueで試しても問題ないことを確認。
WindowStyle は Executable で指定したプログラムを隠すか、ウィンドウ表示するか最小化するかなどを指定。
※クリックで拡大
結果として変数にはMD5のハッシュ値が格納される。ただし、"\r\n"(0x0A0D)といった余分な改行コードが入るため、Replace関数やLeft関数で取り除くことが必要。
下のFor Debuggingのデータフロータスクはブレークポイントのために設置しているため無関係。
・動作確認表(スクリプト)
いずれも Windows Azure にて新規仮想マシン環境
Windows 7 | Windows PowerShell 2.0 | ○ |
Windows Server 2008 R2 | Windows PowerShell 2.0 | ○ |
Windows Server 2012 | Windows PowerShell 3.0 | ○ |
Windows 8.1 | Windows PowerShell 4.0 | ○ |
Windows Server 2012 R2 | Windows PowerShell 4.0 | ○ |
・関連
Microsoft Support / File Checksum Integrity Verifier ユーティリティの概要と入手方法
https://support.microsoft.com/ja-jp/kb/841290/ja
スポンサーサイト