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