型演算子(-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を返します。