【ファイルサーバー移行】PowerShell一発で「最終更新者」と「作成者」を含めた棚卸しリストを自動生成する方法

17.【ファイルサーバー移行】PowerShell一発で「最終更新者」と「作成者」を含めた棚卸しリストを自動生成する方法 無料ツール
この記事は約6分で読めます。
記事内に広告が含まれています。

ファイルサーバーの移行期、避けて通れないのが「不要ファイルのクリーンアップ(整理)」です。

長年使われたサーバーには、いつの間にか大量のゴミデータが溜まっています。
しかし、システム担当者だけで勝手に削除するわけにはいきません。
現場に「これ消していいですか?」と確認しようにも、「いつのファイル?」「誰が作ったの?」が分からないと、確認すらスムーズに進まないのが現実です。

そこで今回は、特別なソフトを一切インストールせず、Windows標準の「PowerShell(パワーシェル)」という機能を使い、「ファイル名・サイズ・最終更新日・作成者・最終更新者」を網羅したCSVリスト(Excelで開ける一覧表)を一撃で出力する手順を、初学者向けに分かりやすく解説します!

スポンサーリンク

なぜ「最終更新者」と「作成者」の情報が必要なのか?

通常のファイル一覧出力コマンド(dir や基本的な Get-ChildItem)では、ファイルの作成日時やサイズは取れても、「誰の持ち物か」が分かりません。

今回ご紹介するスクリプトでは、以下の2つの情報をセットで取得します。

  • 作成者(所有者): セキュリティ情報から、そのファイルを最初に作った(または所有している)人を特定
  • 最終更新者: ファイルのプロパティから、最後に上書き保存した人を特定

これらが分かると、「退職したAさんが5年前に作ったまま放置されている、10GBの動画ファイル」や、「Bさんが先週まで編集していた現役のファイル」といったことが一目で判別できるようになります。

初学者でもできる!棚卸しリスト作成の3ステップ

特別な準備は不要です。以下の手順通りに進めてみてください。

ステップ1:PowerShellを起動する

  1. 画面左下のWindowsスタートボタンを右クリックします。
  2. メニューの中から「ターミナル」または「Windows PowerShell」を選択してクリックします。
  3. 青色(または黒色)の画面が表示されれば準備完了です。

ステップ2:スクリプトをコピー&ペーストする

以下のコードの、1行目(調べたいフォルダ)2行目(リストの保存先)をご自身の環境に合わせて書き換えてください。

📌 初心者向けヒント: フォルダのパスは \\server\share\folder のようなネットワークパス(UNCパス)でもそのまま指定できます。

PowerShell

# 【設定項目】ここをあなたの環境に合わせて書き換えてください
$targetFolder = "C:\Users\YourUsername\Documents"  # 例:調べたいフォルダのパス
$exportPath = "$home\Desktop\file_maintenance_list.csv"  # デスクトップに「file_maintenance_list.csv」という名前で保存されます

# ここから下は書き換えずにそのままコピーしてPowerShellに貼り付けてください
Get-ChildItem -Path $targetFolder -Recurse -File | ForEach-Object {
    try {
        # ファイルのセキュリティ情報から「作成者(所有者)」を取得
        $acl = Get-Acl -Path $_.FullName
        $owner = $acl.Owner
        
        # ファイルのプロパティから「最終更新者」を取得
        $lastAuthor = (Get-ItemProperty -Path $_.FullName).LastAuthor
        # もし最終更新者が空なら、作成者を代入する
        if (-not $lastAuthor) { $lastAuthor = $owner }

        # Excelで扱いやすいように項目を整理(カスタムオブジェクトの作成)
        [PSCustomObject]@{
            "ファイルパス"   = $_.FullName
            "ファイル名"     = $_.Name
            "サイズ(MB)"     = [Math]::Round($_.Length / 1MB, 2) # バイトをMB単位に変換
            "作成日時"       = $_.CreationTime
            "最終更新日時"   = $_.LastWriteTime
            "作成者(所有者)" = $owner
            "最終更新者"     = $lastAuthor
        }
    } catch {
        # アクセス権限エラーなどで情報を取得できなかった場合の処理
        [PSCustomObject]@{
            "ファイルパス"   = $_.FullName
            "ファイル名"     = $_.Name
            "サイズ(MB)"     = "エラー"
            "作成日時"       = $_.CreationTime
            "最終更新日時"   = $_.LastWriteTime
            "作成者(所有者)" = "アクセス権限なし"
            "最終更新者"     = "アクセス権限なし"
        }
    }
} | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation

Write-Host "処理が完了しました!デスクトップを確認してください。" -ForegroundColor Green

ステップ3:出力されたCSVをExcelで確認する

処理が終わると、デスクトップに file_maintenance_list.csv というファイルができあがります。 これをExcelで開くだけで、きれいに整理された表が表示されます。

コード解説:裏側で何が起きている?(初学者向け)

少しだけ、このプログラムが何をしているかを解説します。

  • Get-ChildItem -Recurse -File 指定したフォルダの中身だけでなく、その中にある「子フォルダ」のさらに中身まで(=Recurse)、すべての「ファイル(=File)」を漏れなくスキャンしています。
  • try { ... } catch { ... } ファイルサーバーの中には、管理者でもアクセスできない特殊なファイルや、エラーが起きるファイルが紛れ込んでいます。それによってプログラムが途中で止まってしまわないよう、「エラーが起きても無視して次のファイルを調べる」という安全装置を入れています。
  • [Math]::Round($_.Length / 1MB, 2) 通常、パソコンはファイルサイズを「Byte(バイト)」という非常に細かい単位で数えます。これだと桁数が多すぎてExcelで見づらいため、普段見慣れている「MB(メガバイト)」単位に計算し直し、小数第2位で四捨五入しています。

まとめ

このスクリプトを使えば、数万件のファイルがあっても、自動で「誰の、いつの、どれくらい大きいファイルか」のリストが完成します。

このリストをExcelのテーブル機能やフィルター機能を使って部署ごとに切り出し、「5年以上更新がない、かつ作成者が退職しているファイルは移行対象から外す」といった明確なルールを敷くことで、移行作業が驚くほどスムーズになります。ぜひ試してみてください!

コメント

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