24時間以内に変更が加えられたファイルの一覧を出力するPowerShellスクリプト

毎日のバックアップファイルの増分が巨大になっている場合など,最近変更されたファイルの一覧を,ファイルサイズと共にPowerShellで出力したい場合があります。

また,良く知らないアプリケーションのトラブルシューティングをする場合,最近変更が加えられたであろうログファイルの一覧などを見つけたいかも知れません。

そのような時に使えるPowerShellコマンドは,Get-ChildItemです。

Get-ChildItemコマンドで最近変更されたファイルの一覧を出力する方法


例えば,Dドライブ全体を検索範囲とし,24時間以内に変更が加えられたファイルの一覧を出力するコマンドは以下の通りです。

$RootPath = 'D:\'
$OutputFile = 'C:\Path\FileList.csv'
Get-ChildItem -Path $RootPath -Recurse -File | Where-Object {$_.LastWriteTime -gt (Get-Date).AddHours(-24)} | Select Name, DirectoryName, LastWriteTime, @{Name="KBytes";Expression={$_.Length / 1Kb}} | Export-Csv $OutputFile -NoTypeInformation

また,過去7日間に変更があったファイルをリストアップしたい場合には,AddHoursをAddDaysに置き換えて次のようなPowerShellスクリプトになります。

$RootPath = 'D:\'
$OutputFile = 'C:\Path\FileList.csv'
Get-ChildItem -Path $RootPath -Recurse -File | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | Select Name, DirectoryName, LastWriteTime, @{Name="KBytes";Expression={$_.Length / 1Kb}} | Export-Csv $OutputFile -NoTypeInformation

特定の拡張子を持つファイルだけを抽出したい場合には,-Filterオプションを付けます。

$RootPath = 'D:\'
$OutputFile = 'C:\Path\FileList.csv'
Get-ChildItem -Path $RootPath -Recurse -File -Filter *.mp4 | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | Select Name, DirectoryName, LastWriteTime, @{Name="KBytes";Expression={$_.Length / 1Kb}} | Export-Csv $OutputFile -NoTypeInformation

ファイルサイズをMBで出力したい場合には,ExpressionをMBに変更して,次のようなPowerShellコマンドになります。

$RootPath = 'D:\'
$OutputFile = 'C:\Path\FileList.csv'
Get-ChildItem -Path $RootPath -Recurse -File -Filter *.mp4 | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | Select Name, DirectoryName, LastWriteTime, @{Name="MB";Expression={$_.Length / 1MB}} | Export-Csv $OutputFile -NoTypeInformation

以上,最近変更が加えられたファイルの一覧を出力するPowerShellスクリプトでした。

コメント