Share via


about_Type_Operators

Breve descrição

Descreve os operadores que trabalham com tipos Microsoft .NET.

Descrição longa

Os operadores de tipo booleano (-is e -isnot) informam se um objeto é uma instância de um tipo .NET especificado. O -is operador retorna um valor de TRUE se o tipo corresponder e um valor de FALSE caso contrário. O -isnot operador retorna 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 para o tipo .NET especificado. Se for bem-sucedido, retornará o objeto convertido. Se falhar, ele retorna $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 "System.". Por exemplo, para especificar System.Diagnostics.Process, digite [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, é o tipo de coleção que é testado, não os tipos de elementos da coleção.

Operadores -is/isnot

Os operadores de tipo booleano (-is e -isnot) sempre retornam um valor booleano , mesmo que a entrada seja uma coleção de objetos.

Se <input> for um tipo igual ou derivado do .NET Type, 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 o <input> implementa a interface na comparação. Neste exemplo, a entrada é uma matriz. Arrays implementam a interface System.Collections.IList .

PS> 1, 2 -is [System.Collections.IList]
True

-as Operador

O -as operador tenta converter o objeto de entrada para o tipo .NET especificado. Se for bem-sucedido, retornará o objeto convertido. Se falhar, ele retorna $null. Ele não retorna um erro.

Se o <input> é um tipo que é derivado do .NET Type -aspassa por retorna objeto de entrada inalterado. Por exemplo, o tipo DirectoryInfo é derivado do tipo FileSystemInfo . Portanto, o tipo de objeto não é alterado 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 é sensível à 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 que são 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 GetType método de todos os objetos juntamente com a propriedade FullName desse método. Por exemplo, a instrução a seguir obtém o tipo do valor de retorno 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 cmdlets e Get-UICulture retornem objetos Get-Culture 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>

Consulte também