Comandi PowerShell: una panoramica dei 40 cmdlet più importanti
Grazie a un uso mirato dei comandi PowerShell puoi sfruttare al meglio i vari moduli. I vari cmdlet seguono una struttura logica e possono essere personalizzati con parametri opzionali. In questo articolo, ti presentiamo 40 comandi PowerShell essenziali per ottimizzare il lavoro all’interno del tuo sistema o della tua rete.
Cosa sono i comandi PowerShell?
PowerShell, che dalla versione di Windows 7 si trova già preinstallata sul sistema, è una shell per inserire i relativi comandi PowerShell su Windows. Oltre ai comandi cmd, esistono numerosi cmdlet che solo la PowerShell è in grado di interpretare. Questi sono composti da un verbo e da un sostantivo separati da un trattino. Inoltre, esistono parametri opzionali per specificare ulteriormente i comandi PowerShell. Tali parametri sono separati da uno spazio. Mentre in passato la PowerShell era impiegata soprattutto dagli amministratori di sistema, oggi questo strumento si rivela particolarmente utile anche nell’ambito dello sviluppo software. I comandi preinstallati sono centinaia. Di seguito ti presentiamo i più importanti.
I principali comandi PowerShell
I comandi PowerShell consentono di gestire con facilità complesse operazioni di amministrazione. Tra i cmdlet di base che potrebbero servirti più spesso troviamo comandi che forniscono una visione d’insieme della struttura di rete, che elencano altri comandi PowerShell, aiutano a impostare le configurazioni di sicurezza necessarie o generano analisi. In particolare, i principali comandi PowerShell sono:
1. Get-Module -All
Se vuoi ottenere una panoramica iniziale di tutti i moduli PowerShell importati puoi utilizzare il comando Get-Module -All.
Get-Module -All
shell2. Get-Command
Esistono centinaia di comandi PowerShell predefiniti. Se hai bisogno di avere una panoramica dei comandi PowerShell a tua disposizione puoi utilizzare Get-Command. Il comando ti fornirà un elenco chiaro di tutte le azioni possibili e ti spiegherà brevemente a cosa serve ciascun cmdlet. Questo vale anche se hai installato moduli aggiuntivi.
Get-Command
shell3. Get-Help
L’elenco generato da Get-Command ti fornisce una panoramica iniziale dei comandi a tua disposizione. Tuttavia, se hai bisogno di informazioni più dettagliate relative a un comando e alle possibilità che offre, puoi utilizzare il cmdlet Get-Help. Questo comando accede alle risorse del tuo PC e ti fornisce tutte le informazioni disponibili. Per attivare questa guida, combina Get-Help con il comando di cui desideri visualizzare la sintassi.
Get-Help [[-Name] <String>] [-Path <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Role <String[]>] [-Examples] [<CommonParameters>]
shell4. Get-Process
In molti casi può essere utile ottenere rapidamente una visione d’insieme di tutte le applicazioni, programmi e processi attivi sul sistema. Con il comando Get-Process è possibile generare facilmente tale panoramica. Se vicino a questo comando si specifica un’applicazione si riceveranno informazioni dettagliate su di essa.
Get-Process
shell5. Get-Service
Il comando Get-Service opera in modo analogo al cmdlet Get-Process, ma a differenza di questo, Get-Service fornisce dettagli su tutti i servizi attualmente attivi. Se desideri ottenere informazioni solamente su un particolare servizio o su uno specifico tipo di servizi ti basterà specificare la richiesta.
Get-Service
shell6. Stop-Process
In aggiunta puoi usare anche diversi comandi PowerShell per terminare i processi direttamente dalla shell. Ad esempio, con il comando Stop-Process, che ti consente di specificare il processo da terminare utilizzando il nome, l’ID o altri attributi. Il comando si scrive così:
Stop-Process -Name "nome del processo"
shellStop-Process -Id 3582 -Confirm -PassThru
shell-Confirm richiede una conferma del comando. -PassThru, invece, richiede la conferma del processo interrotto, poiché questa non avviene automaticamente.
7. ConvertTo-HTML
Un layout chiaro può fare molto per aiutare a individuare rapidamente problemi o possibili complicazioni. Utilizzando il comando ConvertTo-HTML, puoi convertire l’output dei comandi PowerShell in un file HTML, rendendo tutte le informazioni facilmente leggibili in un formato a colonne. Il comando si scrive in questo modo:
Get-Command | ConvertTo-Html > c:\temp\AllCommands.html
shell8. ConvertTo-Xml
Puoi seguire un approccio simile se hai bisogno di una rappresentazione XML di un oggetto specifico. In questo caso, puoi utilizzare il comando ConvertTo-Xml. Nel seguente esempio la data corrente viene convertita in formato XML:
Get-Date | ConvertTo-Xml
shell9. Where-Object
Per filtrare i risultati di un cmdlet puoi usare il comando Where-Object. Quando esegui un comando, spesso l’output contiene numerosi oggetti di cui hai solo parzialmente bisogno. Where-Object si serve di una pipe per deviare l’output e visualizzare soltanto le informazioni desiderate. Per esempio, se desideri visualizzare solo i servizi creati o aggiornati durante l’anno corrente, puoi procedere nel modo seguente:
Get-Service | Where-Object { $_.LastWriteTime -gt "01.01.2023" }
shell10. Get-History
Se vuoi ottenere un elenco di tutti i comandi PowerShell usati durante una sessione, puoi usare il cmdlet Get-History. Per elencare tutti i comandi di PowerShell digita:
Get-History
shellAggiungendo questa specificazione richiami solo gli ultimi dieci comandi PowerShell:
Get-History -Count 10
shell11. Clear-History
Naturalmente puoi cancellare anche l’elenco dei comandi PowerShell utilizzati. Per rimuovere tutte le voci, puoi utilizzare il cmdlet Clear-History:
Clear-History
shellSe desideri eliminare solo alcuni comandi PowerShell, puoi farlo aggiungendo i parametri appropriati. Ad esempio, la seguente istruzione rimuove tutti i comandi PowerShell che contengono la parola “Help” o terminano con “Syntax”:
Clear-History -Command *Help*, *Syntax
shell12. Add-History
È anche possibile aggiungere comandi PowerShell a una sessione per poterli poi richiamare direttamente nella sessione successiva. Il cmdlet da usare in questo caso è Add-History.
Add-History
shell13. Out-File
Se desideri salvare l’output dei comandi PowerShell sul tuo computer, puoi utilizzare il cmdlet Out-File. Questo comando salva i risultati dei comandi PowerShell in un documento di testo standard al percorso indicato.
Get-Process | Out-File -FilePath .\Process.txt
shell14. Copy-Item
In PowerShell puoi copiare elementi e salvarli in un luogo diverso utilizzando il comando Copy-Item. A tal proposito devi specificare anche la directory in cui desideri salvare la copia. Il comando funziona così:
Copy-Item "C:\Cartella1\file.txt" -Destination "C:\Cartella2"
shell15. Get-ChildItem
Puoi utilizzare il comando Get-ChildItem per recuperare determinati elementi da una o più posizioni. Se ci sono elementi subordinati questi verranno inclusi nell’elenco. Normalmente questo comando fornisce informazioni sugli attributi, l’ora dell’ultima modifica, la dimensione del file e il nome dell’elemento. Se invece la posizione risulta vuota, non ci sarà alcun output.
Get-ChildItem -Path C:\Esempio
shellGli attributi sono elencati alla voce “Mode”. Alcune proprietà comuni sono:
- a (archivio)
- d (directory)
- h (nascosto)
- l (link)
- r (solo lettura)
- s (sistema)
16. Set-AuthenticodeSignature
Per proteggere i file puoi dotarli di una firma Authenticode servendoti del comando Set-AuthenticodeSignature. Ma attenzione: questo processo funziona solo con i file che supportano il Subject Interface Package (SIP).
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
shell17. Invoke-Item
Se desideri eseguire un’azione predefinita per un file specifico, puoi farlo con il comando Invoke-Item. Questo comando garantisce, ad esempio, che un file eseguibile venga avviato o che un documento di testo venga aperto con il programma configurato. Qui di seguito il file viene aperto con Microsoft Word per impostazione predefinita:
Invoke-Item "C:\Test\Esempio.doc"
shell18. Start-Job
Con il comando Start-Job puoi eseguire un’attività in background sul tuo PC locale. In questo modo puoi eseguire un comando specifico senza che questo interferisca direttamente con la sessione corrente.
Start-Job -ScriptBlock { Get-Process -Name pwsh }
shell- Hardware dedicato al 100%
- Fatturazione al minuto
- Potenziato dai processori Intel® Xeon® e AMD
Comandi PowerShell per eseguire azioni specifiche
I comandi PowerShell menzionati qui sopra servono principalmente a ottenere una visione d’insieme di processi o oggetti. Allo stesso tempo, però, esistono cmdlet che consentono una vasta gamma di azioni per utilizzare il sistema in modo più produttivo. Di seguito ti elenchiamo vari comandi PowerShell che potrebbero semplificarti il lavoro.
19. Clear-Content
Se vuoi eliminare il contenuto di un elemento, ma allo stesso tempo mantenere l’elemento in sé, puoi farlo usando il comando Clear-Content. Con questo cmdlet puoi rimuovere, ad esempio, il testo da un documento, senza però cancellare il file. Il comando si presenta così:
Clear-Content C:\Temp\Esempio.txt
shell20. ForEach-Object
Il comando ForEach-Object consente di eseguire un’operazione su ciascun elemento in un insieme di oggetti specificati nell’input. In questo esempio dividiamo per 10 tre numeri interi presenti in un array:
10000, 1000, 100 | ForEach-Object -Process {$_/10}
1000
100
10
shell21. Compare-Object
Il cmdlet Compare-Object è utile quando non si vogliono confrontare manualmente differenti insiemi di oggetti. Questo comando genera un rapporto che mostra le differenze tra i record. Il primo record è utilizzato come componente di riferimento, mentre il secondo funge da componente di confronto. È possibile specificare gli attributi da confrontare, ma se questa informazione viene omessa verranno comparati solo i risultati delle stringhe. L’output è diviso in proprietà che compaiono solo nel componente di riferimento (<==) e proprietà che appaiono solo nel componente di confronto (==>). In questo esempio, il file “Documento1.txt” contiene i valori Berlino, Londra e Parigi, mentre “Documento2.txt” contiene Berlino, Vienna e Amsterdam.
Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Documento1.txt) -DifferenceObject (Get-Content -Path C:\Test\Documento2.txt)
InputObject SideIndicator
--------------- -----------------
Vienna ==>
Amsterdam ==>
Londra <==
Parigi <==
shellI contenuti che compaiono in entrambi i documenti (in questo caso “Berlino”) non vengono mostrati.
22. New-Object
Uno dei comandi PowerShell più utili è New-Object. Puoi utilizzare questo cmdlet per creare l’istanza di un oggetto in un framework .NET o di un Component Object Model (COM). Ad esempio, se desideri creare un oggetto System.Version con la stringa 1.2.3.4 come costruttore, il comando apparirà nel seguente modo:
New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
shell23. Select-Object
Puoi utilizzare il comando Select-Object per selezionare un oggetto o un gruppo di oggetti con proprietà precedentemente specificate. A tal proposito puoi stabilire i seguenti parametri:
- First
- Last
- Unique
- Skip
- Index
Nell’esempio qui sotto utilizziamo i comandi PowerShell Get-Process e Sort-Object per visualizzare i tre processi con il maggiore consumo di memoria al momento dell’input.
Get-Process | Sort-Object -Property WS | Select-Object -Last 3
shell24. Set-Alias
Le scorciatoie da tastiera di Windows sono adatte a eseguire determinate operazioni con maggiore rapidità. Anche PowerShell offre questa opzione. Nel sistema puoi utilizzare il cmdlet Set-Alias per definire abbreviazioni dei vari comandi PowerShell. Nell’esempio seguente creiamo l’alias “ci” per il comando Get-ChildItem:
PS> Set-Alias -Name ci -Value Get-ChildItem
PS> Get-Alias -Name ci
shell25. Set-Location
Se desideri modificare la posizione in cui salvare il tuo lavoro, puoi utilizzare il comando Set-Location. Puoi specificare nuove posizioni quali directory, sottodirectory, posizioni del registro o percorsi di provider. Di seguito impostiamo l’unità C: come posizione di lavoro corrente:
PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>
shell26. Set-Service
Puoi utilizzare il cmdlet Set-Service per interagire con un servizio, ovvero avviarlo, terminarlo, metterlo in pausa o modificarne le proprietà. Nell’esempio qui sotto modifichiamo il nome di un servizio da “New Workstation” a “Old Workstation”:
Set-Service -Name New Workstation -DisplayName "Old Workstation"
shell27. Set-TimeZone
Se desideri modificare il fuso orario del tuo sistema, puoi farlo usando il comando Set-TimeZone. Se come nuovo fuso orario desideri impostare il Coordinated Universal Time (UTC), dovrai digitare quanto segue:
Set-TimeZone -Id "UTC"
shell28. Restart-Computer
Se desideri riavviare il sistema operativo su un PC locale o un PC remoto, puoi usare il relativo comando PowerShell Restart-Computer.
Il comando per il computer locale è:
Restart-Computer
shellInvece, per altri computer nella rete devi scrivere:
Restart-Computer -ComputerName Server01, Server03
shell29. Restart-Service
Il cmdlet più indicato per arrestare e riavviare un servizio usando i comandi PowerShell è Restart-Service. Ad esempio, puoi riavviare tutti i servizi il cui nome inizia con “Net” utilizzando il seguente comando PowerShell:
PS C:\> Restart-Service -DisplayName "net*"
shell30. Clear-RecycleBin
È importante svuotare il cestino regolarmente per liberare spazio sul disco. Puoi farlo anche tramite la PowerShell, utilizzando il comando Clear-RecycleBin.
Clear-RecycleBin
shell31. Get-ComputerInfo
Il comando Get-ComputerInfo serve a ottenere informazioni sul sistema operativo e sulle sue proprietà.
Get-ComputerInfo
shell32. Move-Item
Esistono diversi comandi PowerShell per spostare elementi da una posizione all’altra, ma l’opzione più comune è Move-Item. Nell’esempio di seguito spostiamo il file vecchio.txt dall’unità C: alla directory D:\Temp e lo rinominiamo nuovo.txt.
Move-Item -Path C:\vecchio.txt -Destination D:\Temp\nuovo.txt
shellMonitoraggio e debug con i comandi PowerShell
Anche i comandi PowerShell che consentono di monitorare e controllare il sistema sono particolarmente utili, specialmente se desideri testare una nuova rete e valutarne le prestazioni in condizioni reali. Di seguito trovi una lista di comandi PowerShell che potrebbero servirti in questa situazione.
33. Debug-Process
Il debugging è un passaggio fondamentale per assicurarsi che tutte le impostazioni e i processi funzionino senza errori. Prima di procedere però, è necessario scaricare e configurare i debugger appropriati. Una volta completata questa operazione, è possibile utilizzare il comando Debug-Process. In questo esempio utilizziamo un debugger per Explorer:
PS C:\> Debug-Process -Name "Explorer"
shellPer eseguire il debug di più processi contemporaneamente, puoi semplicemente elencarli di seguito, separandoli con una virgola.
34. Enable-PSBreakpoint
Per attivare specifici breakpoint, puoi utilizzare il comando Enable-PSBreakpoint. In questo modo, da un punto di vista tecnico il valore del cmdlet verrà impostato su “true”. Di seguito ti mostriamo come puoi usare questi comandi PowerShell per attivare tutti i breakpoint nella sessione corrente:
Get-PSBreakpoint | Enable-PSBreakpoint
shellQuesto comando serve ad attivare tutti i breakpoint tramite il loro ID:
Enable-PSBreakpoint -ID 0, 3, 4
shell35. Disable-PSBreakpoint
Se desideri disattivare nuovamente i breakpoint di PowerShell, puoi farlo utilizzando il cmdlet Disable-PSBreakpoint. Tecnicamente parlando, imposterai il valore del comando Enable-PSBreakpoint su “false”. Per disattivare un breakpoint con l’ID 0, puoi digitare quanto segue:
Disable-PSBreakpoint -Id 0
shell36. Get-Counter
Se il tuo dispositivo usa Windows, con il comando Get-Counter di PowerShell puoi ricavare dati relativi alle prestazioni del sistema operativo. Questo comando può essere utilizzato sia per il computer locale che per i computer remoti. In questo esempio si visualizzano dati dal computer locale:
Get-Counter -ListSet *
shell37. Start-Sleep
La possibilità di mettere in pausa uno script o una sessione può essere estremamente importante, specialmente in caso di sovraccarico del sistema. A tal proposito esiste il comando PowerShell Start-Sleep che ti permette di specificare il periodo di tempo in cui bloccare le attività. Nel seguente esempio, l’attività viene bloccata per due secondi.
Start-Sleep -Seconds 2
shell38. Test-Path
Puoi utilizzare il comando Test-Path per verificare se tutti gli elementi di un percorso specifico sono presenti. I risultati possibili sono “true”, se il percorso è valido e tutti gli elementi sono presenti, oppure “false” se il percorso non è valido o mancano alcuni elementi.
Test-Path -Path "C:\Documents and Settings\Utente"
False
shell39. Test-Connection
Con PowerShell puoi anche testare le connessioni all’interno della rete. Mediante il comando Test-Connection, PowerShell invia un pacchetto di richiesta di eco ICMP (Internet Control Message Protocol) ai destinatari specificati e richiede una risposta. Nell’esempio seguente inviamo una richiesta al server02 mediante il protocollo IPv6.
Test-Connection -TargetName Server02 -IPv6
shell40. Get-WinEvent
Se hai bisogno di visualizzare uno o più registri eventi, puoi usare diversi comandi PowerShell. Il cmdlet più pratico è Get-WinEvent. Per ottenere tutti i registri eventi del computer locale, puoi immettere il seguente comando:
Get-WinEvent -ListLog *
shell