Powershellの標準コマンドレットの結果は、パイプ(|)で次のコマンドレットへ渡すことで効率よく処理を繋げ自動化ができますが、結果を次のコマンドレットに渡すためには、処理結果がオブジェクト(もしくはオブジェクトの配列)になっている必要があります。 そこで、自分自身で作成したコマンドの処理結果を文字列ではなくオブジェクトにする方法を紹介したいと思います。
オブジェクトの作成
サンプルとして、室内温度、室外温度のデータを示すオブジェクトを作成します
# サンプル値 $Time = `2015/04/01 12:00` $OutsideTemp = [float]-3.2 $InsideTemp = [float]18.7 # オブジェクトの作成 $Object = New-Object PSObject -Property @{ Name = `temperature` Time = $Time OutsideTemp = $OutsideTemp InsideTemp = $InsideTemp }
Format-Listや、Format-Tableコマンドレットに、パイプしてみます
C:\> $Object | Format-List Name : temperature Time : 2015/04/01 12:00 InsideTemp : 18.7 OutsideTemp : -3.2 C:\> $Object | Format-Table -AutoSize Time OutsideTemp Name InsideTemp ---- ----------- ---- ---------- 2015/04/01 12:00 -3.2 temperature 18.7
プロパティにアクセスしてみます。
C:\> Write-Output $Object.InsideTemp 18.7
こんな感じで、どんどんオブジェクトを返すFunctionを作って、便利に自動化しちゃえるといいですね。
2015/10/17追記
作成後のオブジェクトへ、プロパティを追加することも簡単です。
Add-Member -MemberType NoteProperty ` -Name `Location` -Value `Tokyo, Japan` -InputObject $Object
としてあげると、こんな感じになります。
C:\> $Object | Format-List Name : temperature Time : 2015/04/01 12:00 InsideTemp : 18.7 OutsideTemp : -3.2 Location : Tokyo, Japan