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:
¿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
¿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:
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: ¿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
No hay comentarios:
Publicar un comentario