about_Type_Operators
簡単な説明
Microsoft .NET 型で動作する演算子について説明します。
長い説明
ブール型演算子 (-is
および -isNot
) は、オブジェクトが指定された .NET 型のインスタンスであるかどうかを示します。 演算子は、型が一致する場合は TRUE、それ以外の場合は -is
FALSE の値を返します。 演算子は、型が一致する場合は FALSE、それ以外の場合は -isNot
TRUE の値を返します。
演算子は -as
、入力オブジェクトを指定した .NET 型に変換しようとします。 成功した場合は、変換されたオブジェクトを返します。 失敗した場合は、$null
を返します。 エラーは返されません。
次の表に、PowerShell の型演算子を示します。
演算子 | 説明 | 例 |
---|---|---|
-is |
入力時に TRUE を返します | (get-date) -is [DateTime] |
は のインスタンスです。 | True |
|
指定した .NET 型。 | ||
-isNot |
入力時に TRUE を返します | (get-date) -isNot [DateTime] |
のインスタンスではありません。 | False |
|
specified.NET 型。 | ||
-as |
入力を に変換します。 | "5/7/07" -as [DateTime] |
指定した .NET 型。 | Monday, May 7, 2007 12:00:00 AM |
型演算子の構文は次のとおりです。
<input> <operator> [.NET type]
次の構文を使用することもできます。
<input> <operator> ".NET type"
.NET 型は、型名として角かっこまたは文字列 (または System.DateTime 用など[DateTime]
"DateTime"
) として書き込むことができます。 型がシステム名前空間のルートにない場合は、オブジェクト型の完全な名前を指定します。 "System." は省略できます。 たとえば、System.Diagnostics.Process を指定するには、、[Diagnostics.Process]
、または と入力[System.Diagnostics.Process]
します"Diagnostics.Process"
。
型演算子は、常に入力オブジェクト全体で動作します。 つまり、入力オブジェクトがコレクションの場合は、 コレクション の 要素の型ではなく、テストされるコレクション型です。
-is/isNot 演算子
ブール型演算子 (-is
と -isNot
) は、入力がオブジェクトのコレクションである場合でも、常にブール値を返します。
が .NET 型と同じ型または .NET 型から派生した型の場合<input>
、-is
演算子は を返します$True
。
たとえば、 DirectoryInfo 型は FileSystemInfo 型から派生します。 したがって、これらの例の両方が True を返します。
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
演算子は -is
、 が比較で インターフェイスを <input>
実装している場合にも、インターフェイスと一致させることができます。 この例では、入力は配列です。 配列は System.Collections.IList インターフェイスを 実装します。
PS> 1, 2 -is [System.Collections.IList]
True
-as 演算子
演算子は -as
、入力オブジェクトを指定した .NET 型に変換しようとします。 成功した場合は、変換されたオブジェクトを返します。 失敗した場合は、 を返します $null
。 エラーは返されません。
<input>
が .NET 型-as
から派生した型である場合、 を通過すると、入力オブジェクトは変更されずに返されます。 たとえば、 DirectoryInfo 型は FileSystemInfo 型から派生します。 したがって、次の例では、オブジェクトの種類は変更されません。
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
DateTime 型の変換はカルチャに依存します
型キャストとは異なり、 演算子を使用した-as
型への[DateTime]
変換は、現在のカルチャの規則に従って書式設定された文字列でのみ機能します。
PS> [cultureinfo]::CurrentCulture = 'fr-FR'
PS> '13/5/20' -as [datetime]
mercredi 13 mai 2020 00:00:00
PS> '05/13/20' -as [datetime]
PS> [datetime]'05/13/20'
mercredi 13 mai 2020 00:00:00
PS> [datetime]'13/05/20'
InvalidArgument: Cannot convert value "13/05/20" to type "System.DateTime".
Error: "String '13/05/20' was not recognized as a valid DateTime."
オブジェクトの .NET 型を検索するには、 コマンドレットを Get-Member
使用します。 または、すべてのオブジェクトの GetType メソッドを、このメソッドの FullName プロパティと共に使用します。 たとえば、次のステートメントは、コマンドの戻り値の型を Get-Culture
取得します。
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
例
次の例では、Type 演算子の使用方法をいくつか示します。
PS> 32 -is [Float]
False
PS> 32 -is "int"
True
PS> (get-date) -is [DateTime]
True
PS> "12/31/2007" -is [DateTime]
False
PS> "12/31/2007" -is [String]
True
PS> (get-process PowerShell)[0] -is [System.Diagnostics.Process]
True
PS> (get-command get-member) -is [System.Management.Automation.CmdletInfo]
True
次の例は、入力がオブジェクトのコレクションである場合、一致する型はコレクション内の個々のオブジェクトの型ではなく、コレクションの .NET 型であることを示しています。
この例では、 コマンドレットと Get-UICulture
コマンドレットのGet-Culture
両方が System.Globalization.CultureInfo オブジェクトを返しますが、これらのオブジェクトのコレクションは System.Object 配列です。
PS> (get-culture) -is [System.Globalization.CultureInfo]
True
PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True
PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False
PS> (get-culture), (get-uiculture) -is [Array]
True
PS> (get-culture), (get-uiculture) | foreach {
$_ -is [System.Globalization.CultureInfo])
}
True
True
PS> (get-culture), (get-uiculture) -is [Object]
True
次の例では、 演算子の使用方法 -as
を示します。
PS> "12/31/07" -is [DateTime]
False
PS> "12/31/07" -as [DateTime]
Monday, December 31, 2007 12:00:00 AM
PS> $date = "12/31/07" -as [DateTime]
C:\PS>$a -is [DateTime]
True
PS> 1031 -as [System.Globalization.CultureInfo]
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
次の例は、演算子が入力オブジェクトを -as
.NET 型に変換できない場合に を返す方法を示しています $null
。
PS> 1031 -as [System.Diagnostics.Process]
PS>