Grazie a un uso mirato dei comandi Po­wer­Shell puoi sfruttare al meglio i vari moduli. I vari cmdlet seguono una struttura logica e possono essere per­so­na­liz­za­ti con parametri opzionali. In questo articolo, ti pre­sen­tia­mo 40 comandi Po­wer­Shell es­sen­zia­li per ot­ti­miz­za­re il lavoro all’interno del tuo sistema o della tua rete.

Cosa sono i comandi Po­wer­Shell?

Po­wer­Shell, che dalla versione di Windows 7 si trova già pre­in­stal­la­ta sul sistema, è una shell per inserire i relativi comandi Po­wer­Shell su Windows. Oltre ai comandi cmd, esistono numerosi cmdlet che solo la Po­wer­Shell è in grado di in­ter­pre­ta­re. Questi sono composti da un verbo e da un so­stan­ti­vo separati da un trattino. Inoltre, esistono parametri opzionali per spe­ci­fi­ca­re ul­te­rior­men­te i comandi Po­wer­Shell. Tali parametri sono separati da uno spazio. Mentre in passato la Po­wer­Shell era impiegata so­prat­tut­to dagli am­mi­ni­stra­to­ri di sistema, oggi questo strumento si rivela par­ti­co­lar­men­te utile anche nell’ambito dello sviluppo software. I comandi pre­in­stal­la­ti sono centinaia. Di seguito ti pre­sen­tia­mo i più im­por­tan­ti.

I prin­ci­pa­li comandi Po­wer­Shell

I comandi Po­wer­Shell con­sen­to­no di gestire con facilità complesse ope­ra­zio­ni di am­mi­ni­stra­zio­ne. Tra i cmdlet di base che po­treb­be­ro servirti più spesso troviamo comandi che for­ni­sco­no una visione d’insieme della struttura di rete, che elencano altri comandi Po­wer­Shell, aiutano a impostare le con­fi­gu­ra­zio­ni di sicurezza ne­ces­sa­rie o generano analisi. In par­ti­co­la­re, i prin­ci­pa­li comandi Po­wer­Shell sono:

1. Get-Module -All

Se vuoi ottenere una pa­no­ra­mi­ca iniziale di tutti i moduli Po­wer­Shell importati puoi uti­liz­za­re il comando Get-Module -All.

Get-Module -All
shell

2. Get-Command

Esistono centinaia di comandi Po­wer­Shell pre­de­fi­ni­ti. Se hai bisogno di avere una pa­no­ra­mi­ca dei comandi Po­wer­Shell a tua di­spo­si­zio­ne puoi uti­liz­za­re Get-Command. Il comando ti fornirà un elenco chiaro di tutte le azioni possibili e ti spiegherà bre­ve­men­te a cosa serve ciascun cmdlet. Questo vale anche se hai in­stal­la­to moduli ag­giun­ti­vi.

Get-Command
shell

3. Get-Help

L’elenco generato da Get-Command ti fornisce una pa­no­ra­mi­ca iniziale dei comandi a tua di­spo­si­zio­ne. Tuttavia, se hai bisogno di in­for­ma­zio­ni più det­ta­glia­te relative a un comando e alle pos­si­bi­li­tà che offre, puoi uti­liz­za­re il cmdlet Get-Help. Questo comando accede alle risorse del tuo PC e ti fornisce tutte le in­for­ma­zio­ni di­spo­ni­bi­li. Per attivare questa guida, combina Get-Help con il comando di cui desideri vi­sua­liz­za­re la sintassi.

Get-Help [[-Name] <String>] [-Path <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Role <String[]>] [-Examples] [<CommonParameters>]
shell

4. Get-Process

In molti casi può essere utile ottenere ra­pi­da­men­te una visione d’insieme di tutte le ap­pli­ca­zio­ni, programmi e processi attivi sul sistema. Con il comando Get-Process è possibile generare fa­cil­men­te tale pa­no­ra­mi­ca. Se vicino a questo comando si specifica un’ap­pli­ca­zio­ne si ri­ce­ve­ran­no in­for­ma­zio­ni det­ta­glia­te su di essa.

Get-Process
shell

5. Get-Service

Il comando Get-Service opera in modo analogo al cmdlet Get-Process, ma a dif­fe­ren­za di questo, Get-Service fornisce dettagli su tutti i servizi at­tual­men­te attivi. Se desideri ottenere in­for­ma­zio­ni solamente su un par­ti­co­la­re servizio o su uno specifico tipo di servizi ti basterà spe­ci­fi­ca­re la richiesta.

Get-Service
shell

6. Stop-Process

In aggiunta puoi usare anche diversi comandi Po­wer­Shell per terminare i processi di­ret­ta­men­te dalla shell. Ad esempio, con il comando Stop-Process, che ti consente di spe­ci­fi­ca­re il processo da terminare uti­liz­zan­do il nome, l’ID o altri attributi. Il comando si scrive così:

Stop-Process -Name "nome del processo"
shell
Stop-Process -Id 3582 -Confirm -PassThru
shell

-Confirm richiede una conferma del comando. -PassThru, invece, richiede la conferma del processo in­ter­rot­to, poiché questa non avviene au­to­ma­ti­ca­men­te.

7. ConvertTo-HTML

Un layout chiaro può fare molto per aiutare a in­di­vi­dua­re ra­pi­da­men­te problemi o possibili com­pli­ca­zio­ni. Uti­liz­zan­do il comando ConvertTo-HTML, puoi con­ver­ti­re l’output dei comandi Po­wer­Shell in un file HTML, rendendo tutte le in­for­ma­zio­ni fa­cil­men­te leggibili in un formato a colonne. Il comando si scrive in questo modo:

Get-Command | ConvertTo-Html > c:\temp\AllCommands.html
shell

8. ConvertTo-Xml

Puoi seguire un approccio simile se hai bisogno di una rap­pre­sen­ta­zio­ne XML di un oggetto specifico. In questo caso, puoi uti­liz­za­re il comando ConvertTo-Xml. Nel seguente esempio la data corrente viene con­ver­ti­ta in formato XML:

Get-Date | ConvertTo-Xml
shell

9. 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 par­zial­men­te bisogno. Where-Object si serve di una pipe per deviare l’output e vi­sua­liz­za­re soltanto le in­for­ma­zio­ni de­si­de­ra­te. Per esempio, se desideri vi­sua­liz­za­re solo i servizi creati o ag­gior­na­ti durante l’anno corrente, puoi procedere nel modo seguente:

Get-Service | Where-Object { $_.LastWriteTime -gt "01.01.2023" }
shell

10. Get-History

Se vuoi ottenere un elenco di tutti i comandi Po­wer­Shell usati durante una sessione, puoi usare il cmdlet Get-History. Per elencare tutti i comandi di Po­wer­Shell digita:

Get-History
shell

Ag­giun­gen­do questa spe­ci­fi­ca­zio­ne richiami solo gli ultimi dieci comandi Po­wer­Shell:

Get-History -Count 10
shell

11. Clear-History

Na­tu­ral­men­te puoi can­cel­la­re anche l’elenco dei comandi Po­wer­Shell uti­liz­za­ti. Per rimuovere tutte le voci, puoi uti­liz­za­re il cmdlet Clear-History:

Clear-History
shell

Se desideri eliminare solo alcuni comandi Po­wer­Shell, puoi farlo ag­giun­gen­do i parametri ap­pro­pria­ti. Ad esempio, la seguente istru­zio­ne rimuove tutti i comandi Po­wer­Shell che con­ten­go­no la parola “Help” o terminano con “Syntax”:

Clear-History -Command *Help*, *Syntax
shell

12. Add-History

È anche possibile ag­giun­ge­re comandi Po­wer­Shell a una sessione per poterli poi ri­chia­ma­re di­ret­ta­men­te nella sessione suc­ces­si­va. Il cmdlet da usare in questo caso è Add-History.

Add-History
shell

13. Out-File

Se desideri salvare l’output dei comandi Po­wer­Shell sul tuo computer, puoi uti­liz­za­re il cmdlet Out-File. Questo comando salva i risultati dei comandi Po­wer­Shell in un documento di testo standard al percorso indicato.

Get-Process | Out-File -FilePath .\Process.txt
shell

14. Copy-Item

In Po­wer­Shell puoi copiare elementi e salvarli in un luogo diverso uti­liz­zan­do il comando Copy-Item. A tal proposito devi spe­ci­fi­ca­re anche la directory in cui desideri salvare la copia. Il comando funziona così:

Copy-Item "C:\Cartella1\file.txt" -Destination "C:\Cartella2"
shell

15. Get-ChildItem

Puoi uti­liz­za­re il comando Get-ChildItem per re­cu­pe­ra­re de­ter­mi­na­ti elementi da una o più posizioni. Se ci sono elementi su­bor­di­na­ti questi verranno inclusi nell’elenco. Nor­mal­men­te questo comando fornisce in­for­ma­zio­ni sugli attributi, l’ora dell’ultima modifica, la di­men­sio­ne del file e il nome dell’elemento. Se invece la posizione risulta vuota, non ci sarà alcun output.

Get-ChildItem -Path C:\Esempio
shell

Gli 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-Au­then­ti­co­de­Si­gna­tu­re

Per pro­teg­ge­re i file puoi dotarli di una firma Au­then­ti­co­de ser­ven­do­ti del comando Set-Au­then­ti­co­de­Si­gna­tu­re. Ma at­ten­zio­ne: questo processo funziona solo con i file che sup­por­ta­no il Subject Interface Package (SIP).

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
shell

17. Invoke-Item

Se desideri eseguire un’azione pre­de­fi­ni­ta per un file specifico, puoi farlo con il comando Invoke-Item. Questo comando ga­ran­ti­sce, ad esempio, che un file ese­gui­bi­le venga avviato o che un documento di testo venga aperto con il programma con­fi­gu­ra­to. Qui di seguito il file viene aperto con Microsoft Word per im­po­sta­zio­ne pre­de­fi­ni­ta:

Invoke-Item "C:\Test\Esempio.doc"
shell

18. Start-Job

Con il comando Start-Job puoi eseguire un’attività in back­ground sul tuo PC locale. In questo modo puoi eseguire un comando specifico senza che questo in­ter­fe­ri­sca di­ret­ta­men­te con la sessione corrente.

Start-Job -ScriptBlock { Get-Process -Name pwsh }
shell
Server dedicati
Per­for­man­ce e in­no­va­zio­ne
  • Pro­ces­so­ri al­l'a­van­guar­dia di ultima ge­ne­ra­zio­ne
  • Hardware dedicato ad alte pre­sta­zio­ni
  • Data center cer­ti­fi­ca­ti ISO

Comandi Po­wer­Shell per eseguire azioni spe­ci­fi­che

I comandi Po­wer­Shell men­zio­na­ti qui sopra servono prin­ci­pal­men­te a ottenere una visione d’insieme di processi o oggetti. Allo stesso tempo, però, esistono cmdlet che con­sen­to­no una vasta gamma di azioni per uti­liz­za­re il sistema in modo più pro­dut­ti­vo. Di seguito ti elen­chia­mo vari comandi Po­wer­Shell che po­treb­be­ro sem­pli­fi­car­ti 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ò can­cel­la­re il file. Il comando si presenta così:

Clear-Content C:\Temp\Esempio.txt
shell

20. ForEach-Object

Il comando ForEach-Object consente di eseguire un’ope­ra­zio­ne su ciascun elemento in un insieme di oggetti spe­ci­fi­ca­ti 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
shell

21. Compare-Object

Il cmdlet Compare-Object è utile quando non si vogliono con­fron­ta­re ma­nual­men­te dif­fe­ren­ti insiemi di oggetti. Questo comando genera un rapporto che mostra le dif­fe­ren­ze tra i record. Il primo record è uti­liz­za­to come com­po­nen­te di ri­fe­ri­men­to, mentre il secondo funge da com­po­nen­te di confronto. È possibile spe­ci­fi­ca­re gli attributi da con­fron­ta­re, ma se questa in­for­ma­zio­ne viene omessa verranno comparati solo i risultati delle stringhe. L’output è diviso in proprietà che compaiono solo nel com­po­nen­te di ri­fe­ri­men­to (<==) e proprietà che appaiono solo nel com­po­nen­te 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		<==
shell

I contenuti che compaiono in entrambi i documenti (in questo caso “Berlino”) non vengono mostrati.

22. New-Object

Uno dei comandi Po­wer­Shell più utili è New-Object. Puoi uti­liz­za­re 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 co­strut­to­re, il comando apparirà nel seguente modo:

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
shell

23. Select-Object

Puoi uti­liz­za­re il comando Select-Object per se­le­zio­na­re un oggetto o un gruppo di oggetti con proprietà pre­ce­den­te­men­te spe­ci­fi­ca­te. A tal proposito puoi stabilire i seguenti parametri:

  • First
  • Last
  • Unique
  • Skip
  • Index

Nell’esempio qui sotto uti­liz­zia­mo i comandi Po­wer­Shell Get-Process e Sort-Object per vi­sua­liz­za­re i tre processi con il maggiore consumo di memoria al momento dell’input.

Get-Process | Sort-Object -Property WS | Select-Object -Last 3
shell

24. Set-Alias

Le scor­cia­to­ie da tastiera di Windows sono adatte a eseguire de­ter­mi­na­te ope­ra­zio­ni con maggiore rapidità. Anche Po­wer­Shell offre questa opzione. Nel sistema puoi uti­liz­za­re il cmdlet Set-Alias per definire ab­bre­via­zio­ni dei vari comandi Po­wer­Shell. 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
shell

25. Set-Location

Se desideri mo­di­fi­ca­re la posizione in cui salvare il tuo lavoro, puoi uti­liz­za­re il comando Set-Location. Puoi spe­ci­fi­ca­re nuove posizioni quali directory, sot­to­di­rec­to­ry, posizioni del registro o percorsi di provider. Di seguito im­po­stia­mo l’unità C: come posizione di lavoro corrente:

PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>
shell

26. Set-Service

Puoi uti­liz­za­re il cmdlet Set-Service per in­te­ra­gi­re con un servizio, ovvero avviarlo, ter­mi­nar­lo, metterlo in pausa o mo­di­fi­car­ne le proprietà. Nell’esempio qui sotto mo­di­fi­chia­mo il nome di un servizio da “New Work­sta­tion” a “Old Work­sta­tion”:

Set-Service -Name New Workstation -DisplayName "Old Workstation"
shell

27. Set-TimeZone

Se desideri mo­di­fi­ca­re il fuso orario del tuo sistema, puoi farlo usando il comando Set-TimeZone. Se come nuovo fuso orario desideri impostare il Coor­di­na­ted Universal Time (UTC), dovrai digitare quanto segue:

Set-TimeZone -Id "UTC"
shell

28. Restart-Computer

Se desideri riavviare il sistema operativo su un PC locale o un PC remoto, puoi usare il relativo comando Po­wer­Shell Restart-Computer.

Il comando per il computer locale è:

Restart-Computer
shell

Invece, per altri computer nella rete devi scrivere:

Restart-Computer -ComputerName Server01, Server03
shell

29. Restart-Service

Il cmdlet più indicato per arrestare e riavviare un servizio usando i comandi Po­wer­Shell è Restart-Service. Ad esempio, puoi riavviare tutti i servizi il cui nome inizia con “Net” uti­liz­zan­do il seguente comando Po­wer­Shell:

PS C:\> Restart-Service -DisplayName "net*"
shell

30. Clear-Re­cy­cle­Bin

È im­por­tan­te svuotare il cestino re­go­lar­men­te per liberare spazio sul disco. Puoi farlo anche tramite la Po­wer­Shell, uti­liz­zan­do il comando Clear-Re­cy­cle­Bin.

Clear-RecycleBin
shell

31. Get-Com­pu­te­rIn­fo

Il comando Get-Com­pu­te­rIn­fo serve a ottenere in­for­ma­zio­ni sul sistema operativo e sulle sue proprietà.

Get-ComputerInfo
shell

32. Move-Item

Esistono diversi comandi Po­wer­Shell 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 ri­no­mi­nia­mo nuovo.txt.

Move-Item -Path C:\vecchio.txt -Destination D:\Temp\nuovo.txt
shell

Mo­ni­to­rag­gio e debug con i comandi Po­wer­Shell

Anche i comandi Po­wer­Shell che con­sen­to­no di mo­ni­to­ra­re e con­trol­la­re il sistema sono par­ti­co­lar­men­te utili, spe­cial­men­te se desideri testare una nuova rete e valutarne le pre­sta­zio­ni in con­di­zio­ni reali. Di seguito trovi una lista di comandi Po­wer­Shell che po­treb­be­ro servirti in questa si­tua­zio­ne.

33. Debug-Process

Il debugging è un passaggio fon­da­men­ta­le per as­si­cu­rar­si che tutte le im­po­sta­zio­ni e i processi fun­zio­ni­no senza errori. Prima di procedere però, è ne­ces­sa­rio scaricare e con­fi­gu­ra­re i debugger ap­pro­pria­ti. Una volta com­ple­ta­ta questa ope­ra­zio­ne, è possibile uti­liz­za­re il comando Debug-Process. In questo esempio uti­liz­zia­mo un debugger per Explorer:

PS C:\> Debug-Process -Name "Explorer"
shell

Per eseguire il debug di più processi con­tem­po­ra­nea­men­te, puoi sem­pli­ce­men­te elencarli di seguito, se­pa­ran­do­li con una virgola.

34. Enable-PSBrea­k­point

Per attivare specifici brea­k­point, puoi uti­liz­za­re il comando Enable-PSBrea­k­point. 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 Po­wer­Shell per attivare tutti i brea­k­point nella sessione corrente:

Get-PSBreakpoint | Enable-PSBreakpoint
shell

Questo comando serve ad attivare tutti i brea­k­point tramite il loro ID:

Enable-PSBreakpoint -ID 0, 3, 4
shell

35. Disable-PSBrea­k­point

Se desideri di­sat­ti­va­re nuo­va­men­te i brea­k­point di Po­wer­Shell, puoi farlo uti­liz­zan­do il cmdlet Disable-PSBrea­k­point. Tec­ni­ca­men­te parlando, im­po­ste­rai il valore del comando Enable-PSBrea­k­point su “false”. Per di­sat­ti­va­re un brea­k­point con l’ID 0, puoi digitare quanto segue:

Disable-PSBreakpoint -Id 0
shell

36. Get-Counter

Se il tuo di­spo­si­ti­vo usa Windows, con il comando Get-Counter di Po­wer­Shell puoi ricavare dati relativi alle pre­sta­zio­ni del sistema operativo. Questo comando può essere uti­liz­za­to sia per il computer locale che per i computer remoti. In questo esempio si vi­sua­liz­za­no dati dal computer locale:

Get-Counter -ListSet *
shell

37. Start-Sleep

La pos­si­bi­li­tà di mettere in pausa uno script o una sessione può essere estre­ma­men­te im­por­tan­te, spe­cial­men­te in caso di so­vrac­ca­ri­co del sistema. A tal proposito esiste il comando Po­wer­Shell Start-Sleep che ti permette di spe­ci­fi­ca­re il periodo di tempo in cui bloccare le attività. Nel seguente esempio, l’attività viene bloccata per due secondi.

Start-Sleep -Seconds 2
shell

38. Test-Path

Puoi uti­liz­za­re il comando Test-Path per ve­ri­fi­ca­re 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
shell

39. Test-Con­nec­tion

Con Po­wer­Shell puoi anche testare le con­nes­sio­ni all’interno della rete. Mediante il comando Test-Con­nec­tion, Po­wer­Shell invia un pacchetto di richiesta di eco ICMP (Internet Control Message Protocol) ai de­sti­na­ta­ri spe­ci­fi­ca­ti e richiede una risposta. Nell’esempio seguente inviamo una richiesta al server02 mediante il pro­to­col­lo IPv6.

Test-Connection -TargetName Server02 -IPv6
shell

40. Get-WinEvent

Se hai bisogno di vi­sua­liz­za­re uno o più registri eventi, puoi usare diversi comandi Po­wer­Shell. Il cmdlet più pratico è Get-WinEvent. Per ottenere tutti i registri eventi del computer locale, puoi immettere il seguente comando:

Get-WinEvent -ListLog *
shell
Vai al menu prin­ci­pa­le