Share via


about_Type_Operators

Descripción breve

Describe los operadores que funcionan con tipos de Microsoft .NET.

Descripción larga

Los operadores de tipo booleano (-is y -isnot) indican si un objeto es una instancia de un tipo .NET especificado. El -is operador devuelve un valor true si el tipo coincide y un valor de FALSE en caso contrario. El -isnot operador devuelve un valor false si el tipo coincide y un valor de TRUE de lo contrario.

El -as operador intenta convertir el objeto de entrada al tipo de .NET especificado. Si se ejecuta correctamente, devuelve el objeto convertido. Si se produce un error, devuelve $null. No devuelve un error.

PowerShell tiene los siguientes operadores de tipo:

  • -is |Devuelve TRUE cuando la entrada es una instancia del tipo .NET especificado.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Devuelve TRUE cuando la entrada no es una instancia del tipo specified.NET.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Convierte la entrada en el tipo de .NET especificado.

    "5/7/07" -as [DateTime]       # Result is Monday, May 7, 2007 12:00:00 AM
    

La sintaxis de los operadores de tipo es la siguiente:

<input> <operator> [.NET type]

También puede usar la sintaxis siguiente:

<input> <operator> ".NET type"

El tipo de .NET se puede escribir como un nombre de tipo entre corchetes o una cadena, como [DateTime] o "DateTime" para System.DateTime. Si el tipo no está en la raíz del espacio de nombres del sistema, especifique el nombre completo del tipo de objeto. Puede omitir "System.". Por ejemplo, para especificar System.Diagnostics.Process, escriba [System.Diagnostics.Process], [Diagnostics.Process]o "Diagnostics.Process".

Los operadores de tipo siempre funcionan en el objeto de entrada como un todo. Es decir, si el objeto de entrada es una colección, es el tipo de colección que se prueba, no los tipos de los elementos de la colección.

Operadores -is/isnot

Los operadores de tipo booleano (-is y -isnot) siempre devuelven un valor booleano , incluso si la entrada es una colección de objetos .

Si <input> es un tipo que es el mismo que o se deriva del tipo de .NET, el -is operador devuelve $True.

Por ejemplo, el tipo DirectoryInfo se deriva del tipo FileSystemInfo . Por lo tanto, ambos ejemplos devuelven True.

PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True

El -is operador también puede coincidir con interfaces si <input> implementa la interfaz en la comparación. En este ejemplo, la entrada es una matriz. Las matrices implementan la interfaz System.Collections.IList .

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

Operador -as

El -as operador intenta convertir el objeto de entrada al tipo de .NET especificado. Si se ejecuta correctamente, devuelve el objeto convertido. Si se produce un error, devuelve $null. No devuelve un error.

<input> Si es un tipo derivadodel tipo -asde .NET que pasa a través devuelve un objeto de entrada sin cambios. Por ejemplo, el tipo DirectoryInfo se deriva del tipo FileSystemInfo . Por lo tanto, el tipo de objeto no se modifica en el ejemplo siguiente:

PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo

La conversión del tipo DateTime distingue referencias culturales

A diferencia de la conversión de tipos, la conversión al [DateTime] tipo mediante el -as operador solo funciona con cadenas con formato según las reglas de la referencia cultural actual.

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 buscar el tipo de .NET de un objeto, use el Get-Member cmdlet . O bien, use el método GetType de todos los objetos junto con la propiedad FullName de este método. Por ejemplo, la siguiente instrucción obtiene el tipo del valor devuelto de un Get-Culture comando:

PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo

Ejemplos

En los ejemplos siguientes se muestran algunos usos de los 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

En el ejemplo siguiente se muestra que cuando la entrada es una colección de objetos, el tipo coincidente es el tipo .NET de la colección, no el tipo de los objetos individuales de la colección.

En este ejemplo, aunque los Get-Culture cmdlets y Get-UICulture devuelven objetos System.Globalization.CultureInfo , una colección de estos objetos es una 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

En los ejemplos siguientes se muestra cómo usar el -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)

En el ejemplo siguiente se muestra que cuando el -as operador no puede convertir el objeto de entrada en el tipo .NET, devuelve $null.

PS> 1031 -as [System.Diagnostics.Process]
PS>

Consulte también