Windows Server 2025 / PowerShell: oggetti, pipeline e query

PowerShell elabora oggetti, cioè dati con proprietà, non soltanto il testo visibile sullo schermo. Combina i comandi di query con Where-Object, Select-Object e Sort-Object per filtrare, ordinare e selezionare informazioni del server mediante condizioni esplicite.

Identifica la console e consulta la guida

Apri Windows PowerShell sul server che vuoi interrogare. Questi esempi di sola lettura sono destinati a Windows PowerShell 5.1 su Windows Server 2025: controlla PSVersion e PSEdition nel primo risultato per identificare la sessione. PowerShell 7, installato separatamente, può avere compatibilità diversa con i moduli. I comandi interrogano il computer della sessione corrente: su un PC di gestione restituiscono i dati di quel PC. Un account limitato può vedere meno informazioni anche se la query non modifica la configurazione.

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

Get-Command verifica se Get-Service è disponibile; Get-Help illustra utilizzo e parametri e -Examples richiede esempi. Se la guida locale è incompleta, consulta il riferimento ufficiale della stessa versione senza eseguire uno script ausiliario scaricato. I nomi verbo-sostantivo suggeriscono l’intento: Get generalmente interroga, Set configura, ma occorre comunque leggere la guida del comando specifico.

Ispeziona le proprietà prima di elaborare l'output

Un oggetto servizio contiene proprietà come Name (nome), DisplayName (nome visualizzato) e Status (stato). Usa questi campi senza ritagliare il testo in base alla posizione delle colonne sullo schermo. La prima riga mostra al massimo cinque servizi, la seconda esamina i membri del tipo di oggetto e la terza seleziona le tre proprietà di WinRM. Consulta gli oggetti PowerShell e le loro proprietà.

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

In Get-Member, MemberType distingue proprietà e metodi: le proprietà contengono dati, mentre i metodi possono compiere azioni. Non invocare un metodo solo perché il nome sembra utile. Questa lezione legge e filtra servizi senza avviarli o arrestarli. Controlla che l’ultimo risultato contenga Name, DisplayName e Status di WinRM.

Collega i comandi con una pipeline

La barra verticale | collega comandi in una pipeline PowerShell e passa oggetti al passaggio successivo. Where-Object conserva i servizi con Status uguale a Running, Sort-Object ordina per Name e Select-Object sceglie le proprietà in uscita. $_ indica l’oggetto elaborato in quel momento:

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

Per confrontare i risultati, cambia soltanto Running in Stopped, ripeti la query, osserva i servizi restituiti e rimetti Running nel filtro. La modifica della condizione non avvia e non arresta servizi. -eq confronta l’uguaglianza, -ne la disuguaglianza, -gt se un valore è maggiore e -like i pattern con caratteri jolly. Controlla i tipi di dati quando confronti numeri: l’ordine del testo non coincide necessariamente con quello numerico.

Usa variabili e unità esplicite

La query seguente salva oggetti di unità logiche locali e calcola capacità e spazio libero in gibibyte (GiB). Secondo la documentazione di Win32_LogicalDisk, DriveType=3 seleziona unità locali, mentre Size e FreeSpace sono espressi in byte. La costante PowerShell 1GB vale 1.073.741.824 byte, cioè un GiB. I nomi delle colonne indicano questa unità 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)}}

Il risultato contiene DeviceID, SizeGiB e FreeGiB. DeviceID identifica l’unità; le altre colonne calcolano capacità totale e spazio libero, arrotondati a una cifra decimale. Valori e numero di righe dipendono dalle unità effettive. $labDisks conserva gli oggetti delle unità e può essere filtrato di nuovo. Riserva Format-Table alla visualizzazione finale, perché produce oggetti di formattazione. Prima dell’esportazione in valori separati da virgole (CSV), farebbe esportare quella struttura anziché le colonne desiderate. Per esportare dati, conserva gli oggetti e selezionane le proprietà prima di Export-Csv.

Tieni separate le query dalle modifiche

  1. Usa Get-Command e Get-Help per identificare il comando e i parametri.
  2. Registra i valori attuali con comandi di query.
  3. Se un comando di modifica supporta -WhatIf, esamina prima l’azione proposta.
  4. Valuta effetti operativi e ripristino separatamente dall’anteprima.
  5. Conserva un file .ps1 leggibile e annota computer e contesto in cui deve essere eseguito.

Un comando non trovato può dipendere da un nome errato, un modulo mancante o una versione PowerShell diversa; non equivale ad accesso negato. Puoi provare queste query direttamente nella console. Salvarle in un file .ps1 non autorizza automaticamente l’esecuzione del file. Rispetta i criteri di esecuzione e i requisiti di firma dell’organizzazione senza disabilitare insieme le protezioni per far funzionare uno script.