この記事は以前 http://blog.hiros-dot.net/ で書いたものです。
CMD.exeで dir と入力した場合と、PowerShellでdirと入力した結果は見た目はほぼ同じです。
以下はCMD.exeでのdirコマンド
c:\Work>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 14F3-DBDF です c:\Work のディレクトリ 2008/04/01 22:54 . 2008/04/01 22:54 .. 2008/03/07 18:39 28 1stList.csv 2008/04/01 22:53 17,226 CommandList.txt 2008/04/06 22:15 23,848 PSCmd.txt 2008/03/20 22:50 880 replace.ps1 2008/03/08 00:10 89 Select.csv 5 個のファイル 42,071 バイト 2 個のディレクトリ 67,029,467,136 バイトの空き領域
以下がPowerShellでのdir
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
PowerShellでの例を見ると、各項目の名称が一番上に表示されていたり、Modeが表示されていたりしていますが、単に結果を文字で返していると思っていませんか?
実はPowerShellでの結果は文字ではなく、すべてオブジェクトです。
そうはいっても表示されるのは文字なので、オブジェクトを返すことになんのメリットがあるかを実感できないのではないでしょうか?
では、Get-Memberコマンドレットを使用して dirコマンド(実際にはdirはGet-ChildItemのエイリアスです)のオブジェクトを見てみましょう。
PS C:\Work> dir | Get-Member TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- AppendText Method System.IO.StreamWriter AppendText() CopyTo Method System.IO.FileInfo CopyTo(String destFileName... Create Method System.IO.FileStream Create() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(T... CreateText Method System.IO.StreamWriter CreateText() Decrypt Method System.Void Decrypt() Delete Method System.Void Delete() Encrypt Method System.Void Encrypt() Equals Method System.Boolean Equals(Object obj) GetAccessControl Method System.Security.AccessControl.FileSecurity Ge... GetHashCode Method System.Int32 GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetObjectData Method System.Void GetObjectData(SerializationInfo i... GetType Method System.Type GetType() get_Attributes Method System.IO.FileAttributes get_Attributes() get_CreationTime Method System.DateTime get_CreationTime()
長いので途中省略しましたが、CMD.exeのdirとは違い、多くの情報を取得することがわかっていただけたでしょうか?
たとえば、dirコマンド(実際にはGet-ChildItem)はfullnameというプロパティがあるのですか、このプロパティを使用するとファイル名のフルパスを取得することができます。
以下がdirが返すオブジェクトであるfullnameプロパティを使用してフルパスを取得する例です(Select-Objectは後日説明したいと思います)
PS C:\Work> dir | Select-Object {$_.fullname} $_.fullname ----------- C:\Work\1stList.csv C:\Work\CommandList.txt C:\Work\PSCmd.txt C:\Work\replace.ps1 C:\Work\Select.csv
このようにPowerShellではオブジェクトを返すため、必要な情報だけを抜き出して表示したり、さらに多くの情報を表示させたり、取得した結果を用いて計算したりすることが可能です。
コメント