Freigeben über


Informationen zu Typoperatoren

KURZBESCHREIBUNG

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 operator -is gibt einen Wert von TRUE zurück, wenn der Typ übereinstimmt und ein Wert von FALSE andernfalls. Der operator -isNot gibt einen Wert von FALSE zurück, wenn der Typ übereinstimmt und ein Wert von TRUE andernfalls.

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 $nullzurückgegeben. Es wird kein Fehler zurückgegeben.

In der folgenden Tabelle sind die Typoperatoren in PowerShell aufgeführt.

Operator Beschreibung Beispiel
-is Gibt WAHR zurück, wenn die Eingabe (get-date) -is [DateTime]
ist eine Instanz der True
.NET-Typ angegeben.
-isNot Gibt WAHR zurück, wenn die Eingabe (get-date) -isNot [DateTime]
keine Instanz der False
specified.NET Typ.
-as Konvertiert die Eingabe in die "5/7/07" -as [DateTime]
.NET-Typ angegeben. 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. B. [DateTime] oder "DateTime" 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. Wenn Sie z. B. System.Diagnostics.Process-angeben möchten, geben Sie [System.Diagnostics.Process], [Diagnostics.Process]oder "Diagnostics.Process"ein.

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 die Auflistung getesteten Typs, 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 ein Typ ist, der dem von .NET Type abgeleiteten entspricht, gibt der -Operator zurück.

Beispielsweise wird der DirectoryInfo- Typ vom FileSystemInfo Typs abgeleitet. Daher geben beide Beispiele Truezurü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> die 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 es erfolgreich ist, wird das konvertierte Objekt zurückgegeben. Wenn ein Fehler auftritt, wird $nullzurückgegeben. Es wird kein Fehler zurückgegeben.

Wenn es sich bei dem <input> um einen Typ handelt, der abgeleiteten von .NET Type -asdurchläuft, wird eingabeobjekt unverändert zurückgegeben. Beispielsweise wird der DirectoryInfo- Typ vom FileSystemInfo Typs 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 in [DateTime] Typ mit dem operator -as 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."

Um den .NET-Typ eines Objekts zu finden, verwenden Sie das cmdlet Get-Member. Oder verwenden Sie die GetType Methode aller Objekte zusammen mit der FullName-Eigenschaft dieser Methode. Die folgende Anweisung ruft z. B. 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 sowohl die cmdlets Get-Culture als auch Get-UICultureSystem.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 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, dass, wenn der -as-Operator das Eingabeobjekt nicht in den .NET-Typ konvertieren kann, $nullzurückgegeben wird.

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

SIEHE AUCH

about_Operators