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 -as
de .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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de