PowerShellでフォルダとファイルの一覧を再帰的に取得する方法のメモ

PowerShellでフォルダとファイルの一覧を再帰的に取得する方法のメモ。

Get-ChildItemを利用する方法

以下のPowerShellコマンドはGet-ChildItemでCドライブ配下のフォルダとファイルの一覧をCSVとして抽出し、カレントディレクトリに保存する。

Get-ChildItem -Path C:\* -Recurse | Export-csv -Path .\FL-C-Get-ChildItem.csv

PowerShellコンソールを管理者権限で起動し、上記のコマンドを実行したが、以下のように複数のディレクトリでAccess to the path ... is deniedというエラーが出てしまった。(Windows 10 およびWindows 11で検証。)

2024-07-30 追記

-ErrorAction SilentlyContinueを追加すればエラーを抑制できる。

Get-ChildItem -Path C:\* -Recurse -ErrorAction SilentlyContinue| Export-csv -Path .\FL-C-Get-ChildItem.csv

追記終わり

> Get-ChildItem -Path C:\* -Recurse | Export-csv -Path .\FL-C-Get-ChildItem.csv
Get-ChildItem : Access to the path 'C:\Windows\System32\LogFiles\WMI\RtBackup' is denied.
At line:1 char:1
+ Get-ChildItem -Path C:\* -Recurse | Export-csv -Path .\FL-C-Get-Child ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Windows\Syst...es\WMI\RtBackup:String) [Get-ChildItem], UnauthorizedAccessExcep
   tion
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem : Access to the path 'C:\Windows\System32\WebThreatDefSvc' is denied.
At line:1 char:1
+ Get-ChildItem -Path C:\* -Recurse | Export-csv -Path .\FL-C-Get-Child ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Windows\System32\WebThreatDefSvc:String) [Get-ChildItem], UnauthorizedAccessExc
   eption
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

以下は作成されたCSVのスクリーンショットである。一応、エラーが出たディレクトリ以外の一覧は取得できていると思われる。

ファイルのタイムスタンプはシステムのローカルタイムとUTCの両方が記録されていた。

Get-WmiObjectでCIM_DataFileクラスを利用する方法

以下のPowerShellコマンドはGet-WmiObjectCIM_DataFileクラスを呼び出して、フォルダとファイルの一覧をCSVとして抽出し、カレントディレクトリに保存する。

Get-WmiObject -Class CIM_DataFile | Select-Object CreationDate, LastAccessed, LastModified, InstallDate, Name, FileName, Extension, FileSize, Hidden | Export-csv -Path .\FL-C-Get-WmiObject.csv

PowerShellコンソールを管理者権限で起動し、上記のコマンドを実行したが、しばらくした後にCall cancelledというメッセージが表示されてコマンドが終了してしまった。(Windows 10 およびWindows 11で検証。)

> Get-WmiObject -Class CIM_DataFile | Select-Object CreationDate, LastAccessed, LastModified, InstallDate, Name, FileName, Extension, FileSize, Hidden | Export-csv -Path .\FL-C-Get-WmiObject.csv
Get-WmiObject : Call cancelled
At line:1 char:1
+ Get-WmiObject -Class CIM_DataFile | Select-Object CreationDate, LastA ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

以下は作成されたCSVのスクリーンショットである。一応データは取れているものの、コマンドが途中で終了しているっぽいので、どこまで取れているかは不明。

ファイルのタイムスタンプはシステムのローカルタイムでの表示となっていた。

Microsoftのドキュメントではパフォーマンスの観点からCIM_DataFileクラスの全てのインスタンスを列挙することは推奨されていない。

Avoid enumerating or querying for all instances of CIM_DataFile on a computer because the volume of data is likely to either affect performance or cause the computer to stop responding.

Leave a Reply

Your email address will not be published. Required fields are marked *