Powershell オブジェクトを作り、パイプ(|)で渡す

シェアする

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