この記事は以前 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コマンドレットで調べることが可能です

コメント