Windows Server 2025 / PowerShell: objetos, canalizaciones y consultas

PowerShell procesa objetos: datos con propiedades, no solo texto mostrado en pantalla. Combine comandos de consulta con Where-Object, Select-Object y Sort-Object para filtrar, ordenar y seleccionar información del servidor con condiciones explícitas.

Identifique la consola y consulte la ayuda

Abra Windows PowerShell en el servidor que desea consultar. Estos ejemplos de solo lectura se dirigen a Windows PowerShell 5.1 en Windows Server 2025; en la primera salida, compruebe PSVersion y PSEdition para identificar la sesión. PowerShell 7, instalado por separado, puede tener otra compatibilidad de módulos. Los comandos consultan el equipo de la sesión actual: si los ejecuta en un PC, obtendrá sus datos. Una cuenta restringida también puede ver menos información sin que el comando sea una operación de cambio.

$PSVersionTable
Get-Command Get-Service
Get-Help Get-Service -Examples

Get-Command comprueba si Get-Service está disponible; Get-Help explica uso y parámetros y -Examples solicita ejemplos. Si la ayuda local está incompleta, revise la referencia oficial de la misma versión en lugar de ejecutar un script auxiliar descargado. Los nombres verbo-sustantivo orientan sobre la intención: Get suele consultar y Set configurar, pero conviene comprobar siempre la ayuda del comando concreto.

Inspeccione las propiedades antes de procesar la salida

Un objeto de servicio contiene propiedades como Name (nombre), DisplayName (nombre visible) y Status (estado). Trabaje con esos campos en lugar de recortar el texto por la posición de las columnas. La primera línea muestra hasta cinco servicios; la segunda inspecciona los miembros del tipo de objeto; la tercera elige las tres propiedades de WinRM. Consulte los objetos y sus propiedades en PowerShell.

Get-Service | Select-Object -First 5
Get-Service | Get-Member
Get-Service -Name WinRM | Select-Object Name,DisplayName,Status

En Get-Member, MemberType permite distinguir propiedades de métodos: las primeras describen datos y los segundos pueden realizar acciones. No invoque un método solo porque su nombre parezca útil. En esta lección se consultan y filtran servicios, sin iniciarlos ni detenerlos; compruebe que la última salida contenga Name, DisplayName y Status de WinRM.

Conecte los comandos mediante una canalización

La barra vertical | conecta comandos en una canalización de PowerShell, pasando objetos al siguiente paso. Where-Object conserva los servicios con Status igual a Running, Sort-Object los ordena por Name y Select-Object elige las propiedades de salida. $_ representa el objeto que se está procesando en ese momento:

Get-Service |
    Where-Object { $_.Status -eq 'Running' } |
    Sort-Object Name |
    Select-Object Name,DisplayName,Status

Para comparar, cambie únicamente Running por Stopped, ejecute de nuevo, observe los servicios devueltos y restaure Running en el filtro. Cambiar esa condición no inicia ni detiene servicios. -eq compara igualdad, -ne desigualdad, -gt si un valor es mayor y -like patrones con comodines. Al comparar números, compruebe los tipos de datos; el orden de un texto no equivale necesariamente al orden numérico.

Use variables y unidades explícitas

Esta consulta guarda objetos de unidades lógicas locales y calcula capacidad y espacio libre en gibibytes (GiB). Según la documentación de Win32_LogicalDisk, DriveType=3 selecciona discos locales y Size y FreeSpace se expresan en bytes. En PowerShell, la constante 1GB equivale a 1.073.741.824 bytes, es decir, un GiB. Los nombres de las columnas reflejan esa unidad binaria:

$labDisks = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3'
$labDisks | Select-Object DeviceID,
    @{Name='SizeGiB';Expression={[math]::Round($_.Size / 1GB,1)}},
    @{Name='FreeGiB';Expression={[math]::Round($_.FreeSpace / 1GB,1)}}

La salida debe incluir DeviceID, SizeGiB y FreeGiB. DeviceID identifica la unidad; las otras columnas calculan capacidad total y espacio libre, redondeados a una cifra decimal. Los valores y el número de filas dependen de las unidades reales. $labDisks conserva objetos de disco y puede volver a filtrarse. Reserve Format-Table para la presentación final: genera objetos de formato y, si se coloca antes de exportar a valores separados por comas (CSV), se exporta esa estructura de formato en lugar de las columnas deseadas. Para exportar datos, conserve los objetos y seleccione sus propiedades antes de Export-Csv.

Separe las consultas de los cambios

  1. Use Get-Command y Get-Help para identificar el comando y sus parámetros.
  2. Registre los valores actuales con los comandos de consulta.
  3. Si un comando de cambio admite -WhatIf, revise la acción propuesta antes de ejecutarlo.
  4. Evalúe los efectos operativos y la recuperación por separado de la vista previa.
  5. Mantenga un archivo .ps1 legible y anote en qué equipo y contexto debe ejecutarse.

Un comando no encontrado puede deberse a un nombre mal escrito, un módulo ausente o una versión diferente de PowerShell; no equivale a acceso denegado. Puede practicar estas consultas introduciéndolas en la consola. Guardarlas en un archivo .ps1 no autoriza por sí solo su ejecución: respete la política de ejecución y los requisitos de firma de su organización, sin desactivar conjuntamente las protecciones para hacer funcionar un script.