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 $null
zurü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
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 $null
zurückgegeben. Es wird kein Fehler zurückgegeben.
Wenn es sich bei dem <input>
um einen Typ handelt, der abgeleiteten von .NET Type -as
durchlä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-UICulture
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 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, $null
zurückgegeben wird.
PS> 1031 -as [System.Diagnostics.Process]
PS>