about_Type_Operators
Krótki opis
Opisuje operatory, które współpracują z typami microsoft .NET.
Długi opis
Operatory typu logicznego (-is
i -isNot
) informują, czy obiekt jest wystąpieniem określonego typu .NET. Operator -is
zwraca wartość TRUE , jeśli typ jest zgodny i wartość FALSE w przeciwnym razie. Operator -isNot
zwraca wartość FALSE , jeśli typ jest zgodny i wartość TRUE w przeciwnym razie.
Operator -as
próbuje przekonwertować obiekt wejściowy na określony typ platformy .NET. Jeśli to się powiedzie, zwraca przekonwertowany obiekt. Jeśli zakończy się to niepowodzeniem, zwraca wartość $null
. Nie zwraca błędu.
W poniższej tabeli wymieniono operatory typów w programie PowerShell.
Operator | Opis | Przykład |
---|---|---|
-is |
Zwraca wartość TRUE, gdy dane wejściowe | (get-date) -is [DateTime] |
jest wystąpieniem obiektu | True |
|
określony typ platformy .NET. | ||
-isNot |
Zwraca wartość TRUE, gdy dane wejściowe | (get-date) -isNot [DateTime] |
a nie wystąpienie obiektu | False |
|
specified.NET typ. | ||
-as |
Konwertuje dane wejściowe na | "5/7/07" -as [DateTime] |
określony typ platformy .NET. | Monday, May 7, 2007 12:00:00 AM |
Składnia operatorów typów jest następująca:
<input> <operator> [.NET type]
Można również użyć następującej składni:
<input> <operator> ".NET type"
Typ platformy .NET można zapisać jako nazwę typu w nawiasach kwadratowych lub ciągach, takich jak [DateTime]
lub "DateTime"
System.DateTime. Jeśli typ nie znajduje się w katalogu głównym przestrzeni nazw systemu, określ pełną nazwę typu obiektu. Można pominąć "System.". Aby na przykład określić parametr System.Diagnostics.Process, wprowadź [System.Diagnostics.Process]
, [Diagnostics.Process]
lub "Diagnostics.Process"
.
Operatory typów zawsze działają na obiekcie wejściowym jako całości. Oznacza to, że jeśli obiekt wejściowy jest kolekcją, jest to typ kolekcji , który jest testowany, a nie typy elementów kolekcji.
-is/isNot, operatory
Operatory typu logicznego (-is
i -isNot
) zawsze zwracają wartość logiczną , nawet jeśli dane wejściowe są kolekcją obiektów.
Jeśli <input>
jest typem, który jest taki sam jak lub pochodzi z typu .NET, -is
operator zwraca wartość $True
.
Na przykład typ DirectoryInfo pochodzi z typu FileSystemInfo . W związku z tym oba te przykłady zwracają wartość True.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
Operator -is
może również dopasować interfejsy, jeśli <input>
implementuje interfejs w porównaniu. W tym przykładzie dane wejściowe są tablicą. Tablice implementują interfejs System.Collections.IList .
PS> 1, 2 -is [System.Collections.IList]
True
-as, operator
Operator -as
próbuje przekonwertować obiekt wejściowy na określony typ platformy .NET. Jeśli to się powiedzie, zwraca przekonwertowany obiekt. Jeśli nie powiedzie się, zwraca wartość $null
. Nie zwraca błędu.
<input>
Jeśli typ jest typem pochodzącym z typu -as
platformy .NET, zwraca obiekt wejściowy bez zmian. Na przykład typ DirectoryInfo pochodzi z typu FileSystemInfo . W związku z tym typ obiektu jest niezmieniony w poniższym przykładzie:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
Konwertowanie typu DateTime jest wrażliwe na kulturę
W przeciwieństwie do rzutowania typów, konwertowanie na [DateTime]
typ przy użyciu -as
operatora działa tylko z ciągami sformatowanymi zgodnie z regułami bieżącej kultury.
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."
Aby znaleźć typ .NET obiektu, użyj Get-Member
polecenia cmdlet . Możesz też użyć metody GetType wszystkich obiektów wraz z właściwością FullName tej metody. Na przykład następująca instrukcja pobiera typ zwracanej wartości Get-Culture
polecenia:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
Przykłady
W poniższych przykładach przedstawiono niektóre zastosowania operatorów typu:
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
W poniższym przykładzie pokazano, że gdy dane wejściowe są kolekcją obiektów, pasujący typ jest typem kolekcji .NET, a nie typem poszczególnych obiektów w kolekcji.
W tym przykładzie polecenia Get-Culture
cmdlet i Get-UICulture
zwracają obiekty System.Globalization.CultureInfo , ale kolekcja tych obiektów jest tablicą System.Object.
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
W poniższych przykładach pokazano, jak używać -as
operatora.
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)
Poniższy przykład pokazuje, że gdy -as
operator nie może przekonwertować obiektu wejściowego na typ platformy .NET, zwraca wartość $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>