PowerShell canalización y filtrado

Una de las características más potentes de PowerShell es el mecanismo de "canalización".

La canalización te permite combinar múltiples comandos como si fueran bloques de construcción; cada paso procesa y pasa objetos. Esto no solo hace que los scripts sean más concisos, sino que también mejora enormemente la flexibilidad y eficiencia del procesamiento de datos.

Esta sección presentará la canalización|sus principios básicos, dos formas de filtrado, extracción de propiedades de objetos y técnicas comunes de combinación, para ayudarte a escribir operaciones de línea de comandos más potentes e inteligentes.


1. ¿Qué es una canalización?

En PowerShell,el símbolo de canalización|(la barra vertical) indica que la salida del comando anterior se "pasa" al siguiente comando como entrada.

A diferencia del flujo de texto en las líneas de comandos tradicionales, en la canalización de PowerShell se transmitenobjetos, lo que hace que las operaciones sean más precisas y potentes.

Ejemplo: listar los servicios en ejecución y ordenarlos

Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName

Explicación:

  1. Get-ServiceObtener todos los objetos de servicio;
  2. Where-ObjectFiltrar los servicios cuyo estado sea Running;
  3. Sort-ObjectOrdenar según el nombre del servicio.

2. Filtrado de objetos: Where-Object

Sintaxis básica

Where-Object { 条件表达式 }

En{}Internamente, se usa$_para representar cada objeto en la canalización actual.

Ejemplo 1: Filtrar procesos que ocupen más de 500MB de memoria

Get-Process | Where-Object { $_.WorkingSet -gt 500MB }

Ejemplo 2: Filtrar servicios cuyo nombre comience con "Win"

Get-Service | Where-Object { $_.Name -like "Win*" }

3. Extracción de propiedades: Select-Object

Select-ObjectSe usa para extraer los campos que te interesan de los objetos; suele emplearse para simplificar la salida, redirigir a archivos o generar informes.

Ejemplo: Listar el nombre y estado de todos los servicios

Get-Service | Select-Object Name, Status

También se pueden renombrar los campos:

Get-Service | Select-Object @{Name="服务名"; Expression={$_.DisplayName}}, Status

4. Ordenar datos: Sort-Object

Sort-ObjectSe usa para ordenar objetos según una propiedad.

Ejemplo 1: Ordenar procesos en orden descendente por uso de memoria

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

5. Salida y formato: Format-Table, Out-File, etc.

Ejemplo: Mostrar información de servicios en formato de tabla

Get-Service | Format-Table -Property Name, Status, DisplayName

Salida a un archivo:

Get-Service | Where-Object {$_.Status -eq "Running"} | 
    Select-Object Name, DisplayName |
    Out-File -FilePath "C:\RunningServices.txt"

6. Combinaciones de uso común (práctica)

1. Ver todos los procesos que ocupan CPU (ordenados por uso de CPU)

Get-Process | Where-Object { $_.CPU -gt 0 } | Sort-Object CPU -Descending

2. Buscar todos los servicios cuyos nombres contengan "Time"

Get-Service | Where-Object { $_.DisplayName -like "*Time*" }

3. Exportar información del disco

Get-CimInstance Win32_LogicalDisk |
    Select-Object DeviceID, VolumeName, Size, FreeSpace |
    Export-Csv -Path "C:\diskinfo.csv" -NoTypeInformation

7. Forma abreviada de Where-Object (PowerShell 3.0+)

PowerShell 3.0 y versiones posteriores admiten la sintaxis abreviada:

Where-Object Name -like "*Win*"

Equivale a:

Where-Object { $_.Name -like "*Win*" }

Se recomienda que los principiantes se familiaricen primero con la sintaxis estándar y luego usen la forma abreviada para mejorar la eficiencia.


8. Resumen de comandos comunes de canalización

Comando Descripción de función
Where-Object Filtra objetos según condiciones
Select-Object Extrae propiedades específicas
Sort-Object Ordena por propiedades
Format-Table Formatea la salida como tabla
Out-File Escribe la salida en un archivo de texto
Export-Csv Exporta datos a un archivo CSV

9. Resumen

  • La canalización de PowerShell se basa enla transferencia de objetos, es más potente que la canalización de texto tradicional
  • Where-ObjectEs la herramienta central para el filtrado de datos
  • Select-ObjectySort-ObjectPermite extraer, ordenar y organizar datos de forma flexible
  • La combinación de múltiples comandos puede completar tareas complejas de procesamiento de datos; es la base de la automatización de sistemas.

10. Tareas de práctica

Tarea 1:Filtrar todos los servicios que empiecen con "W" y ordenarlos por nombre

Get-Service | Where-Object { $_.Name -like "W*" } | Sort-Object Name

Tarea 2:Listar los 10 procesos con mayor uso de memoria

Get-Process | Sort-Object WorkingSet -Descending | Select-Object Name, WorkingSet -First 10

Tarea 3:Exportar todas las direcciones IPv4 de este equipo a un archivo

Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress | Out-File -FilePath "C:\ip_list.txt"
Otras extensiones