Get-ChildItemコマンドレットでシンプルなファイル一覧を作成する方法

前回の続きです。

単純にGet-ChildItemコマンドレットを使用しただけでは、返ってくる結果が扱いづらいので、ファイル一覧として扱いやすい形を取得する方法を解説します。

[目次]

シンプルなファイル一覧を取得する方法

以下のコマンドレットで対象フォルダ配下にあるシンプルなファイルのフルパス一覧を取得することができます。

PS C:\work\test> Get-ChildItem -Path C:\work\test\ -Recurse | Where-Object { $_.PSIsContainer -eq $False } | Select-Object FullName

FullName
--------
C:\work\test\memo_abc.txt
C:\work\test\memo_def.txt
C:\work\test\A\秘密のmemo_abc.txt
C:\work\test\A\秘密のmemo_def.txt

「-Path」でフォルダを指定し、「-Recure」オプションを付けることで、対象フォルダ配下のサブフォルダ全てを取得対象としています。

さらに、「Where-Object」でファイルだけに絞り込みをし、「Select-Object」でFullName属性のみを取得することで、このようにシンプルな一覧として取得しています。

Get-ChildItemのプロパティ(属性)一覧

「Select-Object」で取得したいプロパティをしているすると、その属性だけを取得することができますが、属性を指定する代わりに「*」を指定すると、全属性を取得することができます。

PS C:\work\test> Get-ChildItem -Path C:\work\test\memo_abc.txt -Recurse | Select-Object *


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\work\test\memo_abc.txt
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\work\test
PSChildName       : memo_abc.txt
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : False
Mode              : -a----
VersionInfo       : File:             C:\work\test\memo_abc.txt
                    InternalName:
                    OriginalFilename:
                    FileVersion:
                    FileDescription:
                    Product:
                    ProductVersion:
                    Debug:            False
                    Patched:          False
                    PreRelease:       False
                    PrivateBuild:     False
                    SpecialBuild:     False
                    Language:

BaseName          : memo_abc
Target            : {}
LinkType          :
Name              : memo_abc.txt
Length            : 0
DirectoryName     : C:\work\test
Directory         : C:\work\test
IsReadOnly        : False
Exists            : True
FullName          : C:\work\test\memo_abc.txt
Extension         : .txt
CreationTime      : 2020/03/03 21:52:59
CreationTimeUtc   : 2020/03/03 12:52:59
LastAccessTime    : 2020/03/04 6:01:45
LastAccessTimeUtc : 2020/03/03 21:01:45
LastWriteTime     : 2020/03/03 21:42:10
LastWriteTimeUtc  : 2020/03/03 12:42:10
Attributes        : Archive

それぞれの属性の意味は見てもらえれば何となくわかると思うので、ここでは省略しますが、例のコマンドレットの「Where-Object」で使用したPSIsContainer属性は、今回のファイルの例ではFalseに、フォルダのときはTrueになります。

また、VersionInfor属性のように複数の値を持つマルチプロパティも存在します。

単純にVersionInforをSelect-Objectで指定すると以下のように取得されます。

PS C:\work\test> Get-ChildItem -Path C:\work\test\memo_abc.txt -Recurse | Select-Object VersionInfo

VersionInfo
-----------
File:             C:\work\test\memo_abc.txt...

長すぎて見切れてしまっています。

このような場合は「Format-List」にパイプで繋いで渡してあげれば、一覧化して表示してくれます。

PS C:\work\test> Get-ChildItem -Path C:\work\test\memo_abc.txt -Recurse | Select-Object VersionInfo | Format-List


VersionInfo : File:             C:\work\test\memo_abc.txt
              InternalName:
              OriginalFilename:
              FileVersion:
              FileDescription:
              Product:
              ProductVersion:
              Debug:            False
              Patched:          False
              PreRelease:       False
              PrivateBuild:     False
              SpecialBuild:     False
              Language:

条件絞り込みの方法

Get系のコマンドレットをパイプ ( | )で繋いでWhere-Object句を使うことで、取得したいオブジェクトを絞ることができます。

Get-XXXXX | Where-Object { $_.(属性名) -eq (指定したい値) }

PowerShellでイコールは「-eq」と書きます。

ノットイコールは「-ne」

また、&は「-And」、ORは「-or」です。

他にも様々な比較演算子がありますので、それはまた別の機会に紹介したいと思います。