グルーピングを行う Group-Object(PowerShell入門)

この記事は以前 http://blog.hiros-dot.net/ に書いたものです。

 

Group-Objectコマンドレットを使用すると、同じプロパティの値を持つオブジェクトでグルーピングを行うことができます。

たとえば私のPCの C:\Work には下記のようなファイルがあるのですが

PS C:\Work> dir
ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Work
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2008/03/07     18:39         28 1stList.csv
-a---        2008/04/01     22:53      17226 CommandList.txt
-a---        2008/04/06     22:15      23848 PSCmd.txt
-a---        2008/03/20     22:50        880 replace.ps1
-a---        2008/03/08      0:10         89 Select.csv

これを拡張子別にグルーピングしてみたいと思います。

PS C:\Work> Get-ChildItem *.* | Group-Object Extension
Count Name                      Group
----- ----                      -----
2 .csv                      {1stList.csv, Select.csv}
2 .txt                      {CommandList.txt, PSCmd.txt}
1 .ps1                      {replace.ps1}

きちんと拡張子別にグルーピングがされ、どの拡張子でグルーピングをしたのか、また要素数(Count)がいくつかなどの情報を得ることができます。

今回、Group-ObjectでExtensionを指定したのですが、ほかのメンバーを指定することも可能です。

指定可能なメンバーはパイプに渡されるオブジェクトのメンバーです。この場合はGet-ChildItemから得られるオブジェクトになります。

指定可能なメンバーの情報を取得するには

PS C:\Work> Get-ChildItem | Get-Member -MemberType property
TypeName: System.IO.FileInfo
Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   System.DateTime CreationTime {get;set;}
CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
Directory         Property   System.IO.DirectoryInfo Directory {get;}
DirectoryName     Property   System.String DirectoryName {get;}
Exists            Property   System.Boolean Exists {get;}
Extension         Property   System.String Extension {get;}
FullName          Property   System.String FullName {get;}
IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
Length            Property   System.Int64 Length {get;}
Name              Property   System.String Name {get;}

のように Get-Memberコマンドレットで調べることが可能です

コメント

タイトルとURLをコピーしました