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で検証。)

    > 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 *