Freigeben über


about_Type_Operators

Kurze Beschreibung

Beschreibt die Operatoren, die mit Microsoft .NET-Typen arbeiten.

Lange Beschreibung

Die Booleschen Typoperatoren (-is und -isnot) geben an, ob ein Objekt ein instance eines angegebenen .NET-Typs ist. Der -is Operator gibt den Wert TRUE zurück, wenn der Typ mit dem Wert FALSE übereinstimmt. Der -isnot Operator gibt den Wert FALSE zurück, wenn der Typ mit dem Wert TRUE übereinstimmt.

Der -as Operator versucht, das Eingabeobjekt in den angegebenen .NET-Typ zu konvertieren. Wenn dies erfolgreich ist, wird das konvertierte Objekt zurückgegeben. Wenn ein Fehler auftritt, wird zurückgegeben $null. Ein Fehler wird nicht zurückgegeben.

PowerShell verfügt über die folgenden Typoperatoren:

  • -is|Gibt TRUE zurück, wenn die Eingabe ein instance des angegebenen .NET-Typs ist.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Gibt TRUE zurück, wenn die Eingabe kein instance des specified.NET Typs ist.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Konvertiert die Eingabe in den angegebenen .NET-Typ.

    "5/7/07" -as [DateTime]       # Result is Monday, May 7, 2007 12:00:00 AM
    

Die Syntax der Typoperatoren lautet wie folgt:

<input> <operator> [.NET type]

Sie können auch die folgende Syntax verwenden:

<input> <operator> ".NET type"

Der .NET-Typ kann als Typname in Klammern oder einer Zeichenfolge geschrieben werden, z [DateTime] . B. oder "DateTime" für System.DateTime. Wenn sich der Typ nicht im Stammverzeichnis des Systemnamespaces befindet, geben Sie den vollständigen Namen des Objekttyps an. Sie können "System" weglassen. Um beispielsweise System.Diagnostics.Process anzugeben, geben Sie [System.Diagnostics.Process], [Diagnostics.Process]oder ein "Diagnostics.Process".

Die Typoperatoren arbeiten immer für das Eingabeobjekt als Ganzes. Das heißt, wenn es sich beim Eingabeobjekt um eine Auflistung handelt, handelt es sich um den getesteten Auflistungstyp , nicht um die Typen der Elemente der Auflistung.

-is/isnot-Operatoren

Die Booleschen Typoperatoren (-is und -isnot) geben immer einen booleschen Wert zurück, auch wenn die Eingabe eine Auflistung von -Objekten ist.

Wenn <input> es sich um einen Typ handelt, der mit oder vom .NET-Typ abgeleitet ist, gibt der -is Operator zurück $True.

Der DirectoryInfo-Typ wird beispielsweise vom FileSystemInfo-Typ abgeleitet. Daher geben beide Beispiele True zurück.

PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True

Der -is Operator kann auch Schnittstellen abgleichen, wenn die <input> -Schnittstelle im Vergleich implementiert. In diesem Beispiel ist die Eingabe ein Array. Arrays implementieren die System.Collections.IList-Schnittstelle .

PS> 1, 2 -is [System.Collections.IList]
True

-as-Operator

Der -as Operator versucht, das Eingabeobjekt in den angegebenen .NET-Typ zu konvertieren. Wenn dies erfolgreich ist, wird das konvertierte Objekt zurückgegeben. Wenn ein Fehler auftritt, wird zurückgegeben $null. Ein Fehler wird nicht zurückgegeben.

Wenn es <input> sich um einen Typ handelt, der vom . NET Type -asdurchläuft , gibt das Eingabeobjekt unverändert zurück. Der DirectoryInfo-Typ wird beispielsweise vom FileSystemInfo-Typ abgeleitet. Daher bleibt der Objekttyp im folgenden Beispiel unverändert:

PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo

Das Konvertieren des DateTime-Typs ist kulturabhängig.

Im Gegensatz zur Typumwandlung funktioniert die Konvertierung [DateTime] in einen Typ mit dem -as Operator nur mit Zeichenfolgen, die gemäß den Regeln der aktuellen Kultur formatiert sind.

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."

Verwenden Sie das Cmdlet, um den Get-Member .NET-Typ eines Objekts zu finden. Oder verwenden Sie die GetType-Methode aller Objekte zusammen mit der FullName-Eigenschaft dieser Methode. Die folgende Anweisung ruft beispielsweise den Typ des Rückgabewerts eines Befehls ab Get-Culture :

PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo

Beispiele

Die folgenden Beispiele zeigen einige Verwendungen der Type-Operatoren:

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

Das folgende Beispiel zeigt, dass der übereinstimmende Typ, wenn es sich bei der Eingabe um eine Auflistung von Objekten handelt, um den .NET-Typ der Auflistung, nicht um den Typ der einzelnen Objekte in der Auflistung.

In diesem Beispiel geben sowohl die Cmdlets als Get-UICulture auch das Get-CultureSystem.Globalization.CultureInfo-Objekt zurück, aber eine Auflistung dieser Objekte ist ein System.Object-Array.

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

Die folgenden Beispiele zeigen, wie sie den -as Operator verwenden.

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)

Das folgende Beispiel zeigt: Wenn der -as Operator das Eingabeobjekt nicht in den .NET-Typ konvertieren kann, gibt er zurück $null.

PS> 1031 -as [System.Diagnostics.Process]
PS>

Weitere Informationen