型演算子(-is / -isnot / -as )
PowerShellが提供している型演算子は以下の3種類です。
- -is
- -isnot
- -as
型の比較を行う(1) ( -is )
まずは「-is」から見ていきましょう。
PS C:\> $a = 10 PS C:\> $a.getType().FullName System.Int32
$aに10を代入します。この時点では$aの型は「System.Int32」です。
PS C:\> $a -is [System.Int32] True
「-is」で「$aの型」を[System.Int32]と比較してみました。
$aの型は[System.Int32]であることが分かります。
PS C:\> $a -is [Int32] True
「System.」は省略可能なので「Int32」でも比較できます。
PS C:\> $a -is [String] False
当然ですが、String型と比較するとFalseを返します。
型の比較を行う(2) ( -isnot )
「-isnot」は「-is」の逆の挙動を示します。
PS C:\> $a = 10 PS C:\> $a.getType().FullName System.Int32
ここまでは先ほどと同じです。
PS C:\> $a -isnot [System.Int32] False
「$aの型」と[System.Int32]を比較し、型が一致するのでFalseを返しています。
型のキャストを行う( -as )
「-as」は型のキャストを行う演算子です。
「-as」の戻り値
- キャストに成功した場合
- キャストした結果のオブジェクトを返します
- キャストに失敗した場合
- $nullを返します
「-as」のサンプル(1)
PS C:\> $a = 10 PS C:\> $a.getType().FullName System.Int32
これも先ほどと同じです。
PS C:\> $a -as [Int32] 10 PS C:\> $a -as [String] 10
「Int32」型の「10」は「Int32」だけでなく、「String」の"10"にもキャストが可能ということです。
「Int32」にキャストしても、「String」にキャストしても、コンソール上は同じ「10」となっていますが、
- 1つ目の「10」は「Int32」型の10
- 2つ目の「10」は「String」型の"10"
を意味します。
念のため、確認しておきましょう。
PS C:\> $b = $a -as [System.Int32] PS C:\> $b.getType().FullName System.Int32
PS C:\> $c = $a -as [String] PS C:\> $c.getType().FullName System.String
「-as」のサンプル(2)
PS C:\> $a = "2006/08/11" -as [DateTime] PS C:\> $a -eq $null False PS C:\> $a.getType().FullName System.DateTime
「DateTime」へのキャストに成功したので、戻り値の型は「DateTime」ですが、
PS C:\> $b = "2006" -as [DateTime] PS C:\> $b -eq $null True
キャストに失敗した場合は$nullを返します。