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 -as
durchlä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>