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-WmiObject
でCIM_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.