MENU

PowerShellでコピー後のファイルを照合

当ページのリンクには広告(PR)が含まれていることがあります。
PowerShellでコピー後のファイルを照合。コピーした資料、ハッシュを照合、内容の一致を確認の処理例。

名前を変えてコピーしたファイルが、元と同じ内容か確かめたい。更新日時やファイルサイズだけでは、同じ内容だと判断しきれません。PowerShellのGet-FileHashでファイルの内容から計算した値を比べられます。

SHA-256などの同じアルゴリズムで計算したハッシュを照合します。ファイル名や保存場所が違っても、内容が同じなら同じ値になります。ただし、ハッシュの一致は、元の内容が正しいことや、信頼できる相手が作ったことまで証明するものではありません。

目次

練習用の2ファイルを比べる

次は一時フォルダーの新しい場所へテキストを作り、別名でコピーする例です。既存ファイルの移動、上書き、削除は行いません。

$practiceDir = Join-Path ([IO.Path]::GetTempPath()) ('hash-' + [guid]::NewGuid())
[IO.Directory]::CreateDirectory($practiceDir) | Out-Null
$sourceFile = Join-Path $practiceDir 'original.txt'
$copiedFile = Join-Path $practiceDir 'copied.txt'
Set-Content -LiteralPath $sourceFile -Value 'practice data' -Encoding UTF8
Copy-Item -LiteralPath $sourceFile -Destination $copiedFile
$sourceHash = Get-FileHash -LiteralPath $sourceFile -Algorithm SHA256
$copiedHash = Get-FileHash -LiteralPath $copiedFile -Algorithm SHA256
if ($sourceHash.Hash -eq $copiedHash.Hash) {
    '内容のハッシュは一致しています'
} else {
    '内容のハッシュが異なります'
}

期待する表示は一致です。読み込んでいる場所が元とコピーの2件になっているかも確認します。変数を取り違えて同じファイルを2回計算すれば、コピーの照合にはなりません。必要に応じてハッシュ結果のPathも表示してください。

一文字だけ変えて違いを確かめる

練習用コピーの内容だけをエディタで変え、もう一度両方のハッシュを計算します。文字の追加だけでなく、改行や文字コードが変わっても、バイト列が変われば結果に反映されます。見た目が同じだから同じハッシュだとは限りません。

元のファイルは触らず、練習用のコピーだけで確認してください。実際の資料で試す前に、同じ場合と異なる場合を区別できるかを、こうした小さな入力で見ます。

サイズと日時からの違い

ファイルサイズが同じでも、中身の一部が変わっている場合があります。更新日時もコピーや展開の方法によって保持されたり変わったりします。ハッシュは名前や日時ではなく内容の照合に使う点が違います。

一方で、ハッシュ計算だけではアクセス権やファイルの作成日時まで同じかは分かりません。バックアップの確認なら、必要なファイルの一覧、件数、権限、復元手順も対象に合わせて確かめます。ハッシュを記録しただけで復元試験が終わったとは扱いません。

公表された値を使う場合

配布元がハッシュを公開している場合は、その値と計算結果を比べられます。ただし、比較する値をどこから得たかも確認します。改ざんされたファイルと同じ場所から不正なハッシュを取得しても、信頼の確認として十分とは言えません。

業務で自分のファイルを照合する場合も、どちらを基準にしたか、いつ計算したかを残します。処理中にファイルが書き換わる可能性があるなら、静止したコピーなど同じ状態を照合できる条件を決めます。

この例はWindows PowerShell 5.1とPowerShell 7で作った練習用ファイルについて、コピー後の一致と内容変更後の不一致を確認する範囲です。実際のバックアップや入手ファイルが安全だと判定した結果ではありません。

関連する記事

自動化ツールのバックアップ設計|設定・ログ・出力を分ける

WordPressバックアップの基本|API運用前に守るべきこと

公式資料

Get-FileHash (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn

Copy-Item (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次