簡単な説明
Microsoft .NET 型で動作する演算子について説明します。
長い説明
ブール型演算子 (-is および -isnot) は、オブジェクトが指定された .NET 型のインスタンスであるかどうかを示します。
-is 演算子は、型が一致する場合 TRUE の値を返し、それ以外の場合は FALSE の値 返。
-isnot 演算子は、型が一致する場合 FALSE の値を返し、それ以外の場合は TRUE の値 返。
-as 演算子は、入力オブジェクトを指定した .NET 型に変換しようとします。 成功した場合は、変換されたオブジェクトを返します。 失敗した場合は、$nullを返します。 エラーは返されません。
PowerShell には、次の型演算子があります。
-is|入力が指定した .NET 型のインスタンスである場合は TRUE を返します。(Get-Date) -is [datetime] # Result is True-isnot|入力が specified.NET 型のインスタンスでない場合は TRUE を返します。(Get-Date) -isnot [datetime] # Result is False-as|入力を指定した .NET 型に変換します。"5/7/07" -as [datetime] # Result is Monday, May 7, 2007 12:00:00 AM
型演算子の構文は次のとおりです。
<input> <operator> [.NET type]
次の構文を使用することもできます。
<input> <operator> ".NET type"
.NET 型は、[datetime]の "DateTime" や など、角かっこで囲まれた型名または文字列として記述できます。 型がシステム名前空間のルートにない場合は、オブジェクト型の完全な名前を指定します。 "System" は省略できます。 たとえば、System.Diagnostics.Process 指定するには、「[System.Diagnostics.Process]、[Diagnostics.Process]、または "Diagnostics.Process"」と入力します。
型演算子は、常に入力オブジェクト全体で動作します。 つまり、入力オブジェクトがコレクションの場合は、コレクションの要素の型ではなく、テストされる コレクション 型です。
-is/isnot 演算子
Boolean 型演算子 (-is および -isnot) は、入力がオブジェクトのコレクションである場合でも、常に ブール 値を返します。
<input> が .NET 型と同じか、.NET 型から派生 型である場合、-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 Type から派生 型である場合、-asは入力オブジェクトを変更せずに返。 たとえば、DirectoryInfo 型は、FileSystemInfo 型から派生します。 そのため、オブジェクトの種類は次の例では変更されません。
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
DateTime 型の変換はカルチャに依存します
型キャストとは異なり、[datetime] 演算子を使用した -as 型への変換は、現在のカルチャの規則に従って書式設定された文字列でのみ機能します。
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-Culture と Get-UICulture の両方のコマンドレットが 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>
こちらも参照ください
PowerShell