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>

Zobacz też