Buscar

Windows: Powershell propiedad calculada

La propiedad calculada es la solución a ciertos problemas de pipes en scripts de PowerShell.

Windows: Powershell propiedad calculada: Problema y solución

Veamos un ejemplo del problema:

Queremos realizar un test de conexión a un equipo de Active Directory:

Si ejecutamos:

Get-ADComputer C2  | Test-NetConnection

Aparece un error:

Windows: Powershell propiedad calculada

¿Por qué ocurre este problema?

Si ejecutamos Get-ADComputer junto con el nombre del equipo de Active Directory, no aparece el campo "ComputerName" que es el nombre del campo que espera: Test-NetConnection

Windows: Powershell propiedad calculada

¿Cómo solucionamos el problema?

Podemos utilizar una propiedad calculada:

$Computer = Get-ADComputer C2  |select-object *, @{name='Computername';expression={$_.'Name'}} -ErrorAction Stop
 
$Computer | Test-NetConnection

Lo que hacemos en este caso es pasar el "Name" generado por Get-ADComputer C2 a "Computername" que requiere el cmd-let: Test-NetConnection

Ejemplo:

Windows: Powershell propiedad calculada

A nivel conceptual, es esto lo que estaríamos haciendo: 

Crear una propiedad nueva con el nombre: "ComputerName", con el valor de la propiedad: "Name".

Windows: Powershell propiedad calculada

Windows: Powershell propiedad calculada: ¿Porque es tan interesante la funcionalidad de una propiedad calculada?

En el ejemplo anterior podíamos no utilizar la propiedad calculada.

Si solo queremos ejecutar Test-NetConnection sobre un equipo, bastaría con especificarlo como parámetro. 

Si en cambio queremos ejecutar Test-NetConnection sobre todos los equipos de Active Directory, no lo podremos hacer directamente.

Esta ejecución, no funcionará:

Get-ADComputer -Filter * | Test-NetConnection

No funcionará porque Test-NetConnection espera el parámetro "ComputerName" y Get-ADComputer ofrece el parámetro "Name".

En cambio si utilizamos una propiedad calculada, no tendremos este problema:

Ejemplo: De todos los equipos de Get-ADComputer, ejecutar: Test-NetConnection

$Computer = Get-ADComputer -Filter * |select-object *, @{name='Computername';expression={$_.'Name'}} -ErrorAction Stop

$Computer | Test-NetConnection

 
Windows: Powershell propiedad calculada

No hay comentarios:

Publicar un comentario