Freigeben über


Informationen zu Typoperatoren

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 übereinstimmt, und andernfalls den Wert FALSE . Der -isNot Operator gibt den Wert FALSE zurück, wenn der Typ übereinstimmt, und andernfalls den Wert TRUE .

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

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

Operator BESCHREIBUNG Beispiel
-is Gibt TRUE zurück, wenn die Eingabe (get-date) -is [DateTime]
ist eine instance des True
angegebenen .NET-Typ.
-isNot Gibt TRUE zurück, wenn die Eingabe (get-date) -isNot [DateTime]
keine instance der False
specified.NET Typ.
-as Konvertiert die Eingabe in die "5/7/07" -as [DateTime]
angegebenen .NET-Typ. 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 als Zeichenfolge geschrieben werden, z [DateTime] . B. 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. Um beispielsweise System.Diagnostics.Process anzugeben, geben Sie [System.Diagnostics.Process], [Diagnostics.Process]oder "Diagnostics.Process"ein.

Die Typoperatoren arbeiten immer mit dem Eingabeobjekt als Ganzes. Das heißt, wenn das Eingabeobjekt eine Auflistung ist, ist es der getestete Auflistungstyp , nicht 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> ein Typ ist, 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. Es wird kein Fehler zurückgegeben.

Wenn ein <input> Typ ist, der vom .NET-Typ -asdurchläuft, 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 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 ermitteln. 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

In den folgenden Beispielen werden einige Verwendungen der Typoperatoren veranschaulicht:

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, wenn die Eingabe eine Auflistung von Objekten ist, der übereinstimmende Typ der .NET-Typ der Auflistung und nicht der Typ der einzelnen Objekte in der Auflistung ist.

In diesem Beispiel geben zwar sowohl die Cmdlets 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

In den folgenden Beispielen wird gezeigt, 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, wenn der -as Operator das Eingabeobjekt nicht in den .NET-Typ konvertieren kann, er zurückgibt $null.

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

SIEHE AUCH

about_Operators