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 eine Instanz eines angegebenen .NET-Typs ist. Der -is Operator gibt einen Wert von TRUE zurück, wenn der Typ übereinstimmt, und ein Wert von FALSE andernfalls. Der -isnot Operator gibt einen Wert von FALSE zurück, wenn der Typ übereinstimmt und ein Wert von TRUE andernfalls wahr ist.

Der -as Operator versucht, das Eingabeobjekt in den angegebenen .NET-Typ zu konvertieren. Wenn es erfolgreich ist, wird das konvertierte Objekt zurückgegeben. Wenn er fehlschlägt, wird es zurückgegeben $null. Es wird kein Fehler zurückgegeben.

PowerShell verfügt über die folgenden Typoperatoren:

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

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Gibt WAHR zurück, wenn die Eingabe keine Instanz 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 eckigen Klammern oder einer Zeichenfolge geschrieben werden, z "DateTime"[DateTime]. B. für System.DateTime. Wenn sich der Typ nicht im Stammverzeichnis des Systemnamespace befindet, geben Sie den vollständigen Namen des Objekttyps an. Sie können "System" weglassen. Um z. B. "System.Diagnostics.Process" anzugeben, geben Sie ein, [Diagnostics.Process]oder geben Sie [System.Diagnostics.Process]diese ein"Diagnostics.Process".

Die Typoperatoren arbeiten immer für das Eingabeobjekt als Ganzes. Wenn es sich bei dem Eingabeobjekt um eine Auflistung handelt, handelt es sich dabei um den getesteten Sammlungstyp, 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 dem .NET-Typ identisch ist oder vom .NET-Typ abgeleitet wird, 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 wird. 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 es erfolgreich ist, wird das konvertierte Objekt zurückgegeben. Wenn ein Fehler auftritt, wird er zurückgegeben $null. Es wird kein Fehler zurückgegeben.

Wenn es <input> sich um einen Vom .NET-Typ abgeleiteten Typ -ashandelt, wird das Eingabeobjekt unverändert zurückgegeben. Der DirectoryInfo-Typ wird beispielsweise vom FileSystemInfo-Typ abgeleitet. Daher ist 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 kultursensitiv.

Im Gegensatz zur Typumwandlung funktioniert das Konvertieren [DateTime] in Typ nur -as 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 Get-Member Cmdlet, um den .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 Get-Culture Befehls ab:

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

Beispiele

Die folgenden Beispiele zeigen einige Verwendungen der Typoperatoren:

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

Im folgenden Beispiel wird gezeigt, dass bei der Eingabe eine Auflistung von Objekten der übereinstimmende Typ der .NET-Auflistung und nicht der Typ der einzelnen Objekte in der Auflistung ist.

In diesem Beispiel geben zwar sowohl die als Get-UICulture auch die Get-Culture Cmdlets System.Globalization.CultureInfo-Objekte zurück, eine Auflistung dieser Objekte ist jedoch 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 der -as Operator verwendet wird.

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, dass das Eingabeobjekt, wenn der -as Operator nicht in den .NET-Typ konvertiert werden kann, zurückgegeben wird $null.

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

Weitere Informationen