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:
Get-ServiceObtener todos los objetos de servicio;Where-ObjectFiltrar los servicios cuyo estado sea Running;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 datosSelect-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