ファイルサーバーの移行期、避けて通れないのが「不要ファイルのクリーンアップ(整理)」です。
長年使われたサーバーには、いつの間にか大量のゴミデータが溜まっています。
しかし、システム担当者だけで勝手に削除するわけにはいきません。
現場に「これ消していいですか?」と確認しようにも、「いつのファイル?」「誰が作ったの?」が分からないと、確認すらスムーズに進まないのが現実です。
そこで今回は、特別なソフトを一切インストールせず、Windows標準の「PowerShell(パワーシェル)」という機能を使い、「ファイル名・サイズ・最終更新日・作成者・最終更新者」を網羅したCSVリスト(Excelで開ける一覧表)を一撃で出力する手順を、初学者向けに分かりやすく解説します!
なぜ「最終更新者」と「作成者」の情報が必要なのか?
通常のファイル一覧出力コマンド(dir や基本的な Get-ChildItem)では、ファイルの作成日時やサイズは取れても、「誰の持ち物か」が分かりません。
今回ご紹介するスクリプトでは、以下の2つの情報をセットで取得します。
- 作成者(所有者): セキュリティ情報から、そのファイルを最初に作った(または所有している)人を特定
- 最終更新者: ファイルのプロパティから、最後に上書き保存した人を特定
これらが分かると、「退職したAさんが5年前に作ったまま放置されている、10GBの動画ファイル」や、「Bさんが先週まで編集していた現役のファイル」といったことが一目で判別できるようになります。
初学者でもできる!棚卸しリスト作成の3ステップ
特別な準備は不要です。以下の手順通りに進めてみてください。
ステップ1:PowerShellを起動する
- 画面左下のWindowsスタートボタンを右クリックします。
- メニューの中から「ターミナル」または「Windows PowerShell」を選択してクリックします。
- 青色(または黒色)の画面が表示されれば準備完了です。
ステップ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年以上更新がない、かつ作成者が退職しているファイルは移行対象から外す」といった明確なルールを敷くことで、移行作業が驚くほどスムーズになります。ぜひ試してみてください!


コメント