about_Type_Operators
Descrição breve
Descreve os operadores que trabalham com tipos do Microsoft .NET.
Descrição longa
Os operadores de tipo booliano (-is
e -isnot
) informam se um objeto é uma instância de um tipo .NET especificado. O -is
operador retornará um valor de TRUE se o tipo corresponder e um valor de FALSE caso contrário. O -isnot
operador retornará um valor de FALSE se o tipo corresponder e um valor de TRUE caso contrário.
O -as
operador tenta converter o objeto de entrada no tipo .NET especificado. Se for bem-sucedido, ele retornará o objeto convertido. Se falhar, retornará $null
. Ele não retorna um erro.
O PowerShell tem os seguintes operadores de tipo:
-is
|Retorna TRUE quando a entrada é uma instância do tipo .NET especificado.(get-date) -is [DateTime] # Result is True
-isnot
|Retorna TRUE quando a entrada não é uma instância do tipo specified.NET.(get-date) -isnot [DateTime] # Result is False
-as
|Converte a entrada para o tipo .NET especificado."5/7/07" -as [DateTime] # Result is Monday, May 7, 2007 12:00:00 AM
A sintaxe dos operadores de tipo é a seguinte:
<input> <operator> [.NET type]
Você também pode usar a seguinte sintaxe:
<input> <operator> ".NET type"
O tipo .NET pode ser escrito como um nome de tipo entre colchetes ou uma cadeia de caracteres, como [DateTime]
ou "DateTime"
para System.DateTime. Se o tipo não estiver na raiz do namespace do sistema, especifique o nome completo do tipo de objeto. Você pode omitir "Sistema". Por exemplo, para especificar System.Diagnostics.Process, insira [System.Diagnostics.Process]
, [Diagnostics.Process]
ou "Diagnostics.Process"
.
Os operadores de tipo sempre operam no objeto de entrada como um todo. Ou seja, se o objeto de entrada for uma coleção, será o tipo de coleção que será testado, não os tipos dos elementos da coleção.
-is/isnot operadores
Os operadores de tipo booleano (-is
e -isnot
) sempre retornam um valor booliano , mesmo que a entrada seja uma coleção de objetos.
Se <input>
for um tipo igual ou derivado do tipo .NET, o -is
operador retornará $True
.
Por exemplo, o tipo DirectoryInfo é derivado do tipo FileSystemInfo . Portanto, ambos os exemplos retornam True.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
O -is
operador também pode corresponder interfaces se implementar <input>
a interface na comparação. Neste exemplo, a entrada é uma matriz. As matrizes implementam a interface System.Collections.IList .
PS> 1, 2 -is [System.Collections.IList]
True
Operador -as
O -as
operador tenta converter o objeto de entrada no tipo .NET especificado. Se for bem-sucedido, ele retornará o objeto convertido. Se falhar, ele retorna $null
. Ele não retorna um erro.
Se o <input>
for um tipo derivado do .NET, o tipo -as
passa retornará o objeto de entrada inalterado. Por exemplo, o tipo DirectoryInfo é derivado do tipo FileSystemInfo . Portanto, o tipo de objeto permanece inalterado no exemplo a seguir:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
A conversão do tipo DateTime diferencia a cultura
Ao contrário da conversão de tipo, a conversão para [DateTime]
tipo usando o -as
operador só funciona com cadeias de caracteres formatadas de acordo com as regras da cultura atual.
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."
Para localizar o tipo .NET de um objeto, use o Get-Member
cmdlet. Ou use o método GetType de todos os objetos junto com a propriedade FullName desse método. Por exemplo, a instrução a seguir obtém o tipo do valor retornado de um Get-Culture
comando:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
Exemplos
Os exemplos a seguir mostram alguns usos dos operadores Type:
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
O exemplo a seguir mostra que, quando a entrada é uma coleção de objetos, o tipo correspondente é o tipo .NET da coleção, não o tipo dos objetos individuais na coleção.
Neste exemplo, embora os Get-Culture
cmdlets e Get-UICulture
retornem objetos System.Globalization.CultureInfo , uma coleção desses objetos é uma matriz 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
Os exemplos a seguir mostram como usar o -as
operador.
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)
O exemplo a seguir mostra que, quando o -as
operador não pode converter o objeto de entrada para o tipo .NET, ele retorna $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de