Windowsのシステム管理や日々の業務自動化において、ファイルの更新日時を正確に把握することは非常に重要です。
PowerShellを利用すれば、エクスプローラーを介さずにコマンドラインから素早くタイムスタンプを確認し、それに基づいた高度な処理を実行できます。
本記事では、PowerShellの基本コマンドレットであるGet-ItemやGet-ChildItemを用いて、ファイルの更新日時を取得するさまざまな手法を詳しく解説します。
初心者の方から実務でスクリプトを活用したい方まで、すぐに役立つ具体的なコード例を豊富に紹介します。
基本的な更新日時の取得方法
PowerShellでファイル情報を取得する際、中心となるのはGet-ItemとGet-ChildItemという2つのコマンドレットです。
これらはファイルシステム上のオブジェクトにアクセスし、その属性情報を取得するために使用されます。
Get-Itemを使用した単一ファイルの確認
特定の1つのファイルについて詳細な情報を取得したい場合には、Get-Itemコマンドレットが最適です。
以下の例では、Cドライブの直下にある「sample.txt」というファイルの更新日時を確認します。
# Get-Itemを使用してファイルのLastWriteTimeプロパティを取得する
$file = Get-Item "C:\temp\sample.txt"
$file.LastWriteTime
2026年5月25日 14:30:45
PowerShellにおいて、ファイルの更新日時はLastWriteTimeというプロパティに格納されています。
このプロパティを直接指定することで、日付と時刻の情報をDateTime型として取得できます。
Get-ChildItemを使用したディレクトリ内の確認
フォルダ内にある複数のファイルを一括で処理したい場合は、Get-ChildItemコマンドレットを使用します。
このコマンドレットはエクスプローラーでの一覧表示に似た動作を行い、各ファイルの情報をリスト形式で返します。
# フォルダ内の全ファイルのファイル名と更新日時を表示する
Get-ChildItem "C:\temp" | Select-Object Name, LastWriteTime
Name LastWriteTime
---- -------------
data01.csv 2026/05/20 10:00:00
report.docx 2026/05/24 18:15:30
sample.txt 2026/05/25 14:30:45
Select-Objectを組み合わせることで、必要な項目だけを抽出して見やすく整形することが可能です。
ファイルの更新日時に関するプロパティの種類
ファイルには、更新日時以外にもいくつかの重要なタイムスタンプが存在します。
目的に応じて適切なプロパティを使い分けることが、正確なファイル管理の第一歩となります。
タイムスタンプの種類と比較
一般的に利用されるタイムスタンプには、以下の3つの主要なプロパティがあります。
| プロパティ名 | 内容 |
|---|---|
| CreationTime | ファイルが作成された日時 |
| LastWriteTime | ファイルの内容が最後に更新(書き込み)された日時 |
| LastAccessTime | ファイルに最後にアクセス(読み取り等)した日時 |
実務で「更新日時」を指す場合は、ほとんどのケースでLastWriteTimeプロパティを使用します。
これら全ての情報を一度に取得して比較することも、PowerShellなら簡単に行えます。
# 作成日時、更新日時、アクセス日時をまとめて取得する
Get-Item "C:\temp\sample.txt" | Select-Object Name, CreationTime, LastWriteTime, LastAccessTime
取得した日時のフォーマットと抽出
取得した日時の情報は、デフォルトの状態ではシステム標準の形式で表示されます。
しかし、ログの出力やファイル名の生成に利用する場合、特定の形式にフォーマットしたいことがあります。
ToStringメソッドによる表示形式の変更
DateTimeオブジェクトが持つToStringメソッドを使用すれば、自由自在に書式を変更できます。
たとえば、「20260525」のように年、月、日を繋げた文字列を取得したい場合は以下のように記述します。
# 更新日時を「yyyyMMdd」形式の文字列に変換する
$file = Get-Item "C:\temp\sample.txt"
$file.LastWriteTime.ToString("yyyyMMdd")
20260525
このようにフォーマットすることで、バックアップファイルの名前に日付を付与するといった自動化処理が容易になります。
日付の要素を個別に取得する
DateTimeオブジェクトからは、年、月、日、時、分、秒といった個別の数値要素を取り出すことも可能です。
# 更新日時の「年」と「月」を個別に取得する
$updateDate = (Get-Item "C:\temp\sample.txt").LastWriteTime
Write-Host "更新年: $($updateDate.Year)"
Write-Host "更新月: $($updateDate.Month)"
条件分岐(if文)などで特定の月以降のファイルだけを処理したい場合に、これらの個別プロパティが役立ちます。
更新日時を活用した応用テクニック
PowerShellの真価は、取得した日時の情報をフィルタリングやソートに活用したときに発揮されます。
ここでは、実務で頻出する高度な使い方をいくつか紹介します。
更新日時によるファイルの並べ替え
フォルダ内のファイルを更新日時順に並べ替えたい場合は、Sort-Objectコマンドレットを使用します。
新しい順(降順)に並べ替えるには-Descendingパラメータを指定します。
# フォルダ内のファイルを更新日時が新しい順に並べ替える
Get-ChildItem "C:\temp" | Sort-Object LastWriteTime -Descending
これにより、最近編集したファイルを素早く特定して後続の処理に渡すことができます。
特定の期間内に更新されたファイルの抽出
「24時間以内に更新されたファイルのみをリストアップする」といった処理も、比較演算子を使用することで実現できます。
Get-Dateコマンドレットと組み合わせることで、現在時刻からの相対的な時間を計算できます。
# 過去24時間以内に更新されたファイルを抽出する
$limit = (Get-Date).AddDays(-1)
Get-ChildItem "C:\temp" | Where-Object { $_.LastWriteTime -gt $limit }
このスクリプトは、毎日の定期バックアップ対象を選別する際などに非常に重宝します。
-gtは「Greater Than(より大きい)」を意味し、指定した日時よりも後の日時を持つファイルをフィルタリングしています。
ファイル更新日時の変更(タイムスタンプの操作)
取得するだけでなく、PowerShellではファイルの更新日時を任意の日時に書き換えることも可能です。
これは、テスト環境で特定の条件を再現したい場合などに利用されます。
# 指定したファイルの更新日時を現在の時刻に更新する
$file = Get-Item "C:\temp\sample.txt"
$file.LastWriteTime = Get-Date
Unix系のtouchコマンドのような動作をPowerShellで実現する典型的な手法です。
ファイルの属性情報を表形式で出力する
多くのファイルを管理する場合、視認性を高めるために結果をテーブル形式で出力するのが一般的です。
Format-Tableを使用すれば、コンソール上での確認が格段にスムーズになります。
# 主要な属性を表形式で表示する(自動サイズ調整付き)
Get-ChildItem "C:\temp" | Format-Table Name, Length, LastWriteTime -AutoSize
ファイルサイズ(Length)と並べて表示することで、どのファイルがいつ、どの程度の規模で更新されたのかを一目で把握できます。
トラブルシューティングと注意点
ファイルの更新日時を扱う際には、いくつか注意すべきポイントがあります。
まず、ネットワーク上の共有フォルダにあるファイルを扱う場合、権限不足により情報の取得に失敗することがあります。
また、一部のファイルシステムやストレージデバイスでは、タイムスタンプの精度やサポート状況が異なる場合があります。
特にLastAccessTimeは、パフォーマンス向上のためにOS側で更新が無効化されている設定も珍しくありません。
したがって、信頼性の高い管理を行うためには、可能な限りLastWriteTimeを基準にロジックを組むことを推奨します。
また、読み取り専用属性が付いているファイルでも更新日時の「取得」自体は可能ですが、書き換えは失敗するため注意が必要です。
まとめ
PowerShellを使用してファイルの更新日時を取得する方法について、基本から応用まで解説しました。
Get-ItemやGet-ChildItemで取得できるオブジェクトには、LastWriteTimeをはじめとする豊富な時間情報が含まれています。
これらの情報をSelect-ObjectやWhere-Objectと組み合わせることで、ファイル管理の自動化を強力に推進できます。
今回紹介したテクニックを活用し、煩雑な手作業から解放された効率的なシステム運用を実現してください。
日時のフォーマット変更やフィルタリングは、一度書き方を覚えればあらゆるスクリプトで使い回すことができる汎用性の高いスキルとなります。
