Buscar y Filtrar Contenido - PowerShell
Ser capaz de buscar, filtrar y encontrar información es esencial en cualquier CLI, especialmente en PowerShell.
🧱 Salida en PowerShell: Todo son Objetos
A diferencia de Bash o CMD, en PowerShell todo es un objeto.
Conceptos clave:
-
Objeto: Instancia individual de una clase.
Ej:Usuario,Proceso,Archivo. -
Clase: El "blueprint" o esquema que define qué propiedades y métodos tendrá el objeto.
-
Propiedades: Datos asociados al objeto. Ej:
Name,PasswordLastSet. -
Métodos: Funciones que el objeto puede ejecutar. Ej:
Clone(),ToString().
👤 Filtrando Usuarios (Ejemplo)
# Ver propiedades y métodos de un usuario
Get-LocalUser administrator | Get-Member
# Mostrar todas las propiedades
Get-LocalUser administrator | Select-Object -Property *
# Filtrar solo algunas propiedades
Get-LocalUser * | Select-Object Name, PasswordLastSet
# Ordenar y agrupar por estado habilitado
Get-LocalUser * | Sort-Object Name | Group-Object Enabled
⚡ Filtrando Servicios
# Buscar servicios relacionados con "Defender"
Get-Service | Where-Object DisplayName -like '*Defender*'
# Mostrar todas las propiedades de los servicios filtrados
Get-Service | Where-Object DisplayName -like '*Defender*' | Select-Object -Property *
🔹 Operadores de Comparación útiles
| Operador | Descripción |
|---|---|
-like |
Coincidencia con comodines (*Defender*) |
-contains |
Coincidencia exacta en propiedad |
-eq |
Igual a (case-sensitive) |
-match |
Expresión regular |
-not |
Negación o valores falsos |
🔗 Pipeline (|)
Permite encadenar comandos, pasando objetos de un cmdlet a otro:
# Ejemplo básico
Get-Process | Sort-Object | Measure-Object
# Buscar logs y filtrar con múltiples cmdlets
Get-Service | Where-Object Status -eq "Running" | Select-Object Name, DisplayName
🚦 Operadores de cadena (&& y ||)
-
&&→ Ejecuta siguiente comando si el primero tuvo éxito. -
||→ Ejecuta siguiente comando si el primero falló.
# Ejecuta ping solo si Get-Content falla
Get-Content '.\archivo.txt' || ping 8.8.8.8
🔑 Buscar dentro de archivos
- Cmdlet:
Select-String(alias:sls) → parecido agrep.
# Buscar palabras clave en archivos .txt
Get-ChildItem -Path C:\Users\MTanaka\ -Filter "*.txt" -Recurse -File | Select-String "Password","credential","key"
# Combinar búsqueda de tipos de archivo y palabras clave
Get-ChildItem -Path C:\Users\MTanaka\ -File -Recurse -ErrorAction SilentlyContinue |
Where-Object {($_.Name -like "*.txt" -or $_.Name -like "*.md" -or $_.Name -like "*.py")} |
Select-String "Password","UserName","key"

🔹 Directorios interesantes para buscar:
-
C:\Users\<Usuario>\AppData→ Configuraciones y temporales -
C:\Users\<Usuario>\Documents→ Archivos comunes -
Consola PowerShell:
ConsoleHost_history.txt→ Historial de comandos -
Portapapeles:
Get-Clipboard -
Tareas programadas → Información de ejecución