次の方法で共有


about_Type_Operators

簡単な説明

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 型は、System.DateTime[DateTime]"DateTime"など、角かっこで囲まれた型名または文字列として書き込むことができます。 型がシステム名前空間のルートにない場合は、オブジェクト型の完全な名前を指定します。 "System" は省略できます。 たとえば、 System.Diagnostics.Processを指定するには、「 [System.Diagnostics.Process][Diagnostics.Process]、または "Diagnostics.Process"」と入力します。

型演算子は、常に入力オブジェクト全体で動作します。 つまり、入力オブジェクトがコレクションの場合は、コレクションの要素の型ではなく、テストされるcollection型です。

-is/isnot 演算子

Boolean型演算子 (-isおよび-isnot) は、入力がオブジェクトのコレクションであっても常にBoolean値を返します。

<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>derived である場合は .NET Type -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-CultureGet-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>

関連項目