Filtrar y aislar objetos de PowerShell
En Windows PowerShell, la mayoría de sus resultados cuando se realizan solicitudes de obtención se crean y muestran comúnmente en formato de objeto de PowerShell (PSObject). PSObjects es una de las funciones críticas de PowerShell que lo distingue del resto de lenguajes de scripting.
Sin embargo, no pudimos buscar rápidamente un PSObject debido a sus atributos y, por lo tanto, necesitamos aislar los atributos antes de establecer un índice de búsqueda. En este artículo, hablaremos sobre los objetos de Windows PowerShell, cómo analizar el resultado del objeto PS para que se puedan buscar los resultados y realizar un filtrado adecuado con PowerShell.
Descripción general de los objetos de PowerShell
Como se mencionó, los objetos de PowerShell son uno de los aspectos más destacados del lenguaje de secuencias de comandos. Cada objeto de PowerShell tiene atributos que definen el objeto como un todo.
Tomemos como ejemplo Get-Service
.
Código de ejemplo:
Get-Service
Producción :
Status Name DisplayName
------ ---- -----------
Running AarSvc_147d22 Agent Activation Runtime_147d22
Running AdobeARMservice Adobe Acrobat Update Service
Running AESMService Intel® SGX AESM
Dentro de los objetos de PowerShell Get-Service
, tenemos Status
, Name
y DisplayName
como sus atributos. Para filtrar objetos, debemos aislar el objeto entre sus atributos usando el comando Where-Object
.
Por ejemplo, solo podemos obtener el tipo Status
o el tipo Name
, pero no podemos simplemente buscar una palabra clave específica sin llamar primero al atributo.
Código de ejemplo:
Get-Service | Where-Object {$_.Status -match "Stopped" }
Producción :
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
En la siguiente sección del artículo, analizaremos cómo podemos mostrar estos resultados como una cadena en lugar de un formato de objeto PS y filtrar con diferentes consultas de búsqueda.
Filtrado de resultados mediante PowerShell
Para filtrar la salida rápidamente, necesitamos mostrar la salida en formato de cadena. Debemos canalizar el comando al comando Out-String
.
Para el siguiente ejemplo, lo asignaremos a una variable para que sea más fácil en nuestro próximo fragmento de código.
Código de ejemplo:
$serviceOutput = (Get-Service | Out-String) -split "`r`n"
El código anterior no arrojará ningún resultado debido a que el valor se almacena en la variable. Además, hemos realizado una pequeña operación de cadena para dividir los resultados línea por línea.
Si filtramos, más adelante, el script lo mostrará línea por línea en lugar de solo una cadena completa.
El valor almacenado en la variable $serviceOutput
está en formato de cadena. Para buscar la palabra clave, debemos canalizar el comando Select-String
junto con la palabra clave que deseamos buscar.
Código de ejemplo:
$serviceOutput | Select-String Intel
Producción :
Running AESMService Intel® SGX AESM
Stopped Intel(R) Capabi... Intel(R) Capability Licensing Servi...
Stopped Intel(R) TPM Pr... Intel(R) TPM Provisioning Service
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn