Windows環境でのシステム管理や自動化において、ファイル操作は避けて通れないタスクの1つです。
PowerShellでファイルやフォルダの一覧を取得する際に中心となるコマンドレットがGet-ChildItemです。
このコマンドレットは、単にファイル名を表示するだけでなく、ファイルが持つ詳細な属性情報をオブジェクトとして取得できるため、後続の処理と組み合わせることで非常に強力なツールとなります。
本記事では、Get-ChildItemの基本的な使い方から、実務で役立つフィルタリング、パフォーマンスを意識したテクニックまで、具体的かつ詳細に解説します。
Get-ChildItemの基本概念とエイリアス
PowerShellのGet-ChildItemは、ファイルシステム、レジストリ、証明書ストアなどの「場所」から項目(チャイルドアイテム)を取得するためのコマンドレットです。
UNIX/Linuxシェルにおけるlsコマンドや、Windowsプロンプトにおけるdirコマンドに相当します。
エイリアスによる利便性
PowerShellでは、慣れ親しんだコマンド名で操作できるようにエイリアス (別名)が設定されています。
| エイリアス名 | 元のコマンドレット |
|---|---|
ls | Get-ChildItem |
dir | Get-ChildItem |
gci | Get-ChildItem |
日常的なコンソール操作ではこれらを使用しても構いませんが、スクリプトを作成する場合は、可読性と保守性を高めるために正式名称であるGet-ChildItemを使用することが推奨されます。
基本的なファイルの取得方法
最もシンプルな使い方は、現在のディレクトリにあるファイルとフォルダを一覧表示することです。
# 現在のディレクトリのファイル一覧を取得
Get-ChildItem
特定のディレクトリを指定する
特定のパスにあるファイルを確認したい場合は、-Pathパラメータを使用します。
# C:\Logs フォルダの内容を取得
Get-ChildItem -Path "C:\Logs"
サブディレクトリを含めて再帰的に取得する
指定したディレクトリだけでなく、その配下にあるすべてのフォルダやファイルを探索するには、-Recurseパラメータを付与します。
# 指定フォルダ以下をすべて表示
Get-ChildItem -Path "C:\Project" -Recurse
ファイルのみ、またはディレクトリのみを取得する
PowerShell 3.0以降では、特定の種類の項目だけを抽出する便利なスイッチが追加されています。
# ファイルだけを取得する
Get-ChildItem -File
# ディレクトリだけを取得する
Get-ChildItem -Directory
これにより、複雑なフィルタリングを書かなくても、目的の項目を素早く絞り込むことが可能です。
高度なフィルタリングテクニック
ファイル名の一部がわかっている場合や、特定の拡張子のみを対象にしたい場合には、フィルタリング機能が役立ちます。
ワイルドカードによるパターンマッチング
* (アスタリスク) や ? (疑問符) を使用して、柔軟な検索が行えます。
# 拡張子が .log のファイルのみを取得
Get-ChildItem -Path "C:\Logs\*.log"
# ファイル名の先頭が "Backup" で始まるものを取得
Get-ChildItem -Path "C:\Backup\Backup*"
-Filter パラメータによる高速な検索
Get-ChildItemには-Filterパラメータが存在します。
これはファイルシステムプロバイダーによって直接処理されるため、後からWhere-Objectで絞り込むよりも格段に動作が高速です。
# -Filter を使用した高速な絞り込み
Get-ChildItem -Path "C:\Data" -Filter "*.csv" -Recurse
大量のファイルが存在するサーバー環境などで検索を行う際は、積極的に-Filterを活用しましょう。
隠しファイルやシステムファイルの表示
デフォルトの設定では、隠し属性やシステム属性を持つファイルは表示されません。
これらを確認するには、-Forceパラメータが必要です。
# 隠しファイルを含めてすべて表示
Get-ChildItem -Force
オブジェクト操作による情報の整理と抽出
Get-ChildItemが返す結果は単なる文字列ではなく、System.IO.FileInfo や System.IO.DirectoryInfo というオブジェクトです。
これにより、サイズや更新日時といった情報を簡単に利用できます。
ファイルサイズや更新日時での並べ替え
Sort-Objectと組み合わせることで、整理されたリストを作成できます。
# 更新日時 (LastWriteTime) が新しい順に並べ替える
Get-ChildItem | Sort-Object LastWriteTime -Descending
Directory: C:\Sample
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2026/05/20 15:30 10240 latest_log.txt
-a---- 2026/05/18 10:00 5120 old_config.xml
d----- 2026/05/10 09:00 Backup
必要なプロパティのみを抽出する
すべての情報が必要でない場合は、Select-Objectを使って特定の項目だけを抜き出します。
# ファイル名、サイズ (KB単位)、最終更新日時を取得
Get-ChildItem | Select-Object Name, @{Name="Size(KB)";Expression={$_.Length / 1KB}}, LastWriteTime
実践で使えるGet-ChildItem活用例
現場でよく使われる具体的なシナリオに基づいたスクリプト例を紹介します。
特定の期間に更新されたファイルを探す
例えば、今日更新されたログファイルだけを確認したい場合は、Where-Objectを使って日付の比較を行います。
# 過去24時間以内に更新されたファイルを抽出
$limitDate = (Get-Date).AddDays(-1)
Get-ChildItem -Path "C:\Logs" -File | Where-Object { $_.LastWriteTime -gt $limitDate }
サイズの大きいファイルを特定してリストアップする
ディスク容量を圧迫している原因を特定する際に便利です。
# 100MBを超えるファイルを探して、サイズが大きい順に表示
Get-ChildItem -Path "C:\" -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $_.Length -gt 100MB } |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="Size(MB)";Expression={[Math]::Round($_.Length / 1MB, 2)}}
注意:-ErrorAction SilentlyContinue を指定することで、アクセス権限のないフォルダによるエラーを無視して続行します。
取得したファイル一覧をCSV形式で保存する
管理資料や調査報告のために、結果をCSVへ出力することが多々あります。
# ファイル一覧をCSVに出力 (BOM付きUTF8)
Get-ChildItem -Path "D:\Work" -Recurse |
Select-Object FullName, Length, LastWriteTime |
Export-Csv -Path ".\FileList.csv" -Encoding utf8 -NoTypeInformation
パフォーマンスを意識したGet-ChildItemの運用
Get-ChildItemは非常に便利ですが、ネットワークドライブや巨大なストレージに対して-Recurseを実行すると、処理に時間がかかったり、メモリを大量に消費したりすることがあります。
- -Filterの活用: 前述の通り、可能な限り
-Filterを使い、PowerShell側ではなくファイルシステム側で絞り込みを行います。 - -LiteralPathの検討: パス名に
[](角括弧) などの特殊文字が含まれている場合、-Pathでは正しく解釈されないことがあります。その場合は-LiteralPathを使用することで、入力をそのままの文字列として扱えます。 - .NETメソッドの併用: 数十万個単位のファイルを極めて高速に処理する必要がある場合は、PowerShellのオブジェクト生成オーバーヘッドを避けるために、
[System.IO.Directory]::EnumerateFiles()などの.NET静的メソッドの利用を検討してください。
まとめ
PowerShellのGet-ChildItemは、ファイル管理の自動化における出発点となる非常に重要なコマンドレットです。
単にファイル名を取得するだけでなく、-File や -Directory といったスイッチによるフィルタリング、さらにはパイプラインを用いたオブジェクト操作を組み合わせることで、複雑な条件でのファイル抽出が可能になります。
今回のポイントを整理します。
Get-ChildItemはエイリアスlsやdirでも実行可能。- 高速な検索には
-Filterパラメータを優先的に使用する。 - 隠しファイルが必要な場合は
-Forceを忘れずに。 - 取得結果はオブジェクトなので、
Sort-ObjectやSelect-Objectとの相性が抜群。
これらのテクニックをマスターすることで、日々の運用保守作業や、大規模なデータ整理の効率を劇的に向上させることができるでしょう。
まずは身近なディレクトリの操作から、ぜひ試してみてください。
