[PowerShell]ファイル一覧と同時にMD5ハッシュを取得する

はじめに

ファイルの過不足チェックを行うためにファイル一覧を取得したいとき、「ファイルサーバのファイル一覧」を取得する方法は以下の通りです。

同様に、ファイルの同一性チェックを行うため、ファイル一覧と同時に「ファイルのハッシュ値MD5ハッシュ)」を取得してみます。

スクリプト

ソースコード

fileListWithMD5.ps1

# fileListWithMD5.ps1
#  指定のフォルダ配下のファイル一覧を作成する

param($targetDir)

# ISEでの実行用に引数がない場合に初期値を設定する
if($targetDir -eq $null){ $targetDir = '\\file-sever\targetDir' }    # 適宜コメントアウト

# 出力するファイル一覧のファイル名
$OutFile = ".\fileListWithMD5.txt"

# パラメタチェック
if ($targetDir -eq $null) {
    Write-Host "引数が足りません。(引数1:フルパスのフォルダ名)処理を中止します。"
    exit 1
}

# フォルダの存在チェック
if (!(Test-Path $targetDir)) {
    Write-Host "フォルダが存在しません。処理を中止します。"
    exit 1
}

# ファイル一覧作成
#  1.フルパスのファイル一覧を取得
#  2.昇順でソート
#  3.MD5ハッシュを取得し半角スペース区切りで連結
#  4.デフォルトの文字コード(SJIS)でファイル出力
try {

    Write-Host ('---ファイル一覧作成中---')
    $FileList = dir $targetDir -Recurse -Name -File | Sort-Object  

    $FileListWithMd5 = @();

    # 取得したファイルリストに対し1件つずつMD5ハッシュを取得する
    foreach($oneFile in $FileList){

        # パス+\+ファイル+半角スペース+MD5ハッシュ
        $FileListWithMd5 += @((Get-FileHash -Algorithm md5 $targetDir\$oneFile).Hash + " " + $targetDir + "\" + $oneFile)
    }
    
    Out-File -InputObject $FileListWithMd5 -FilePath $OutFile -Encoding default
    Write-Host ('---ファイル一覧作成完了---')

} catch [Exception] {
    $exp = $error[0].ToString()
    Write-Host ($exp)
}

処理の流れ

  1. Get-ChildItemSort-Objectで昇順に並び替えたファイル一覧を取得
  2. Get-FileHashでファイルのMD5ハッシュを取得
  3. 「MD5ハッシュ+△△+ファイル名」と連結して別の配列に格納する
    (△:半角スペース)
  4. Out-Fileでファイルに出力

出力形式

出力形式:MD5ハッシュ+△+ファイル名
(△:半角スペース)

実行方法

Windowsコマンドプロンプトで以下のコマンドを実行します。

powershell -NoProfile -ExecutionPolicy RemoteSigned .\fileListWithMD5.ps1 \\file-sever\targetDir

その他のハッシュアルゴリズム

Get-FileHashコマンドレットは「MD5」以外にも以下のアルゴリズムのハッシュ値を取得することが出来ます。

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

コメント

タイトルとURLをコピーしました