La línea de comandos orientada a objetos de PowerShell

La mayor diferencia entre PowerShell y las líneas de comandos tradicionales (como CMD o Bash) es que la salida de los comandos de PowerShell son objetos, no texto plano.

PowerShell es más flexible y potente que las líneas de comandos tradicionales, y también hace que la escritura de scripts y la administración del sistema sean más eficientes.

¿Qué es una "línea de comandos orientada a objetos"?

En las líneas de comandos tradicionales, lo que se transmite entre comandos a través de la canalización|son cadenas de texto; para procesar estos textos más a fondo, normalmente se necesitan herramientas como grep, awk, sed, etc.

En cambio, en PowerShell, lo que se transmite entre comandos a través de la canalización son objetos. Se puede acceder directamente a las propiedades y métodos de los objetos sin necesidad de analizar el texto, lo que mejora enormemente la precisión y la eficiencia del desarrollo.

La salida de los comandos son objetos

conGet-ProcessTomando el comando como ejemplo:

Get-Process

Este comando se utiliza para obtener la lista de procesos que se están ejecutando en el sistema actual.

El comando Get-Process no devuelve una tabla de texto plano, sino un conjunto de objetos .NET; cada proceso es un objeto de tipo System.Diagnostics.Process.

Podemos acceder a sus propiedades de la misma manera que se accede a los objetos en los lenguajes de programación, por ejemplo:

(Get-Process)[0].Name

El comando anterior obtiene el nombre del primer proceso. Ejemplo de salida:

explorer

Ver la estructura de un objeto: Get-Member

Para comprender los objetos a fondo, la clave está en conocer qué propiedades y métodos tienen. PowerShell proporcionaGet-Memberun comando para ayudarnos a explorar la estructura de los objetos:

Get-Process | Get-Member

Parte de la salida de ejemplo:

Name        MemberType   Definition
----        ----------   ----------
Id          Property     int Id {get;}
Name        Property     string Name {get;}
Kill        Method       void Kill()
Start       Method       void Start()

Explicación:

  • Propertyindica las propiedades del objeto, comoId、Name
  • Methodindica los métodos del objeto, comoKill()、Start()

Puedes usar estos miembros enobjeto.atributooobjeto.método()la forma [objeto].[miembro].


Transmisión de objetos por canalización

Lo que se transmite por la canalización son objetos

En PowerShell, cuando varios comandos se conectan mediante|la canalización, lo que se transmite sonobjetosy no texto.
Esto significa que en los comandos posteriores puedes acceder directamente a las propiedades de los objetos transmitidos por el comando anterior.

Ejemplo: filtrar todos los serviciosRunningcuyo estado sea:

Get-Service | Where-Object { $_.Status -eq 'Running' }

Interpretación:

  • $_representa el objeto actual en la canalización
  • Statuses una propiedad del objeto de servicio

Diagrama de flujo de la operación de canalización (Mermaid)


Comandos comunes para el procesamiento de objetos

PowerShell proporciona una serie de comandos integrados para operar con objetos, utilizados comúnmente en escenarios como filtrado, ordenación, agrupación, exportación, etc.:

Comando Descripción de la función
Where-Object Filtrar objetos por condiciones
Select-Object Seleccionar o renombrar propiedades de objetos
Sort-Object Ordenar objetos según una propiedad
Group-Object Agrupar y contar objetos por propiedad
Measure-Object Calcular cantidad, suma, promedio, etc., de objetos
Export-Csv Exportar objetos a un archivo CSV
ConvertTo-Json Convertir objetos a una cadena en formato JSON

Filtrado de propiedades de objetos y columnas calculadas

Seleccionar propiedades específicas

Get-Process | Select-Object Name, Id, CPU

Este comando extrae el nombre, el ID y el uso de CPU de cada proceso.

Agregar columnas calculadas (propiedades personalizadas)

Puedes agregar propiedades personalizadas mediante bloques de script:

Get-Process | Select-Object Name, @{Name="MemoryMB";Expression={$_.WorkingSet / 1MB -as [int]}}

Explicación:

  • @{}Crear una tabla hash para definir la nueva propiedad
  • NameEspecificar el nombre de la nueva columna
  • ExpressionProporcionar la lógica de cálculo

Operaciones de ordenación y agrupación

Ordenar los procesos por uso de CPU

Get-Process | Sort-Object CPU -Descending

Agrupar por estado del servicio

Get-Service | Group-Object Status

Ejemplo de salida:

Count Name                      Group
----- ----                      -----
   75 Running                   {WinDefend, WSearch, ...}
   35 Stopped                   {Fax, Spooler, ...}

Exportación y datos estructurados

Exportar a un archivo CSV

Get-Service | Select-Object Name, Status | Export-Csv -Path services.csv -NoTypeInformation

Convertir a formato JSON

Get-Service | ConvertTo-Json

Estos formatos facilitan la integración con otros sistemas o API y son una parte importante de los flujos de trabajo automatizados.


Casos prácticos típicos

Caso 1: Encontrar los 5 procesos que más consumen CPU

Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU

Caso 2: Contar la cantidad según el estado del servicio

Get-Service | Group-Object Status | Select-Object Name, Count

Resumen y sugerencias

La característica orientada a objetos de PowerShell hace que las operaciones de línea de comandos se ajusten más al pensamiento de programación. A través de las propiedades y métodos de los objetos, los usuarios pueden operar los recursos del sistema con mayor precisión y construir scripts de automatización más potentes y fiables.

Se recomienda a los principiantes consolidar conocimientos desde los siguientes aspectos:

  1. Usar con frecuenciaGet-Memberpara explorar la estructura de los objetos
  2. DominarWhere-ObjectySelect-Objectel uso de:
  3. Intentar usarGroup-Object、Sort-Objectpara procesar datos
  4. Intentar exportar los resultados de los comandos a archivos CSV o JSON
Otras extensiones