Come eseguire uno script PowerShell dalla riga di comando e altro

Se sei nuovo nel linguaggio di scripting PowerShell e vuoi imparare come eseguire uno script PowerShell, sei nel posto giusto. Questo blog sarà un tutorial che coprirà modi comuni per eseguire gli script e alcuni problemi che potrebbero presentarsi.

Prerequisiti

Questo articolo sarà una guida passo passo su come eseguire PowerShell sul tuo computer locale. Se vuoi seguirci, assicurati di avere i seguenti prerequisiti prima di iniziare questo articolo.

  • A Windows 10 computer with Administrator privileges.
  • Windows versione di PowerShell 5 o superiore. Puoi anche utilizzare PowerShell v7. Questo tutorial si concentrerà su Windows PowerShell poiché il sistema operativo Windows lo ha già integrato.
  • Un qualsiasi editor di file di testo

Gestione della policy di esecuzione

Se questa è la prima volta che provi ad eseguire uno script di Windows PowerShell, potresti incontrare un problema comune. PowerShell probabilmente restituirà un messaggio di errore che indica che uno script “non può essere caricato perché l’esecuzione degli script è disabilitata su questo sistema”.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell restituisce il messaggio di errore sopra quando si cerca di eseguire un PowerShell con una policy di esecuzione impostata su Restricted, Remote Signed o All Signed.

Restricted

Restricted è la policy predefinita impostata per i computer client Windows. Se stai usando PowerShell per la prima volta, probabilmente la tua policy predefinita sarà impostata per limitare tutti gli script.

Puoi comunque eseguire comandi individuali in un terminale, ma non un file di script. La restrizione include qualsiasi file con estensione .ps1xml, .psm1 o .ps1.

Unrestricted

Unrestricted ti consente di eseguire qualsiasi script, tuttavia avverte prima dell’esecuzione se lo script è stato scaricato da Internet. Questa policy è di solito predefinita per dispositivi non Windows.

Remote Signed

La policy Remote Signed ti consente di eseguire qualsiasi script che è (a) digitalmente firmato o (b) qualsiasi script scritto sul tuo computer locale con o senza firma.

Se uno script è scaricato da Internet e non è firmato, è necessario sbloccare il file. Puoi farlo facendo clic con il pulsante destro del mouse sul file e scegliendo Proprietà. In alternativa, puoi utilizzare il cmdlet PowerShell Unblock-File per quel particolare file di script.

Utilizzare una policy Remote Signed sarebbe un’opzione ideale quando si esegue uno script scaricato da Internet.

All Signed

All Signed richiede che tutti gli script siano firmati digitalmente da un editore attendibile. Questo include gli script scaricati da Internet e scritti localmente sul tuo computer.

Cambiare la policy di esecuzione di PowerShell

Per cambiare la policy di esecuzione:

  1. Apri Windows PowerShell con Esegui come amministratore per assicurarti di avere le autorizzazioni più elevate per apportare modifiche alla policy.
Search PowerShell in Start Menu

2. Quando è aperto, esegui il seguente comando PowerShell per impostare la policy di esecuzione del tuo computer. La policy di esecuzione, come illustrato in precedenza, può essere uno dei tre tipi differenti. Questo tutorial utilizza una policy di esecuzione utile ma comunque sicura di RemoteSigned.

Visto che questo tutorial presume che tu abbia scaricato da Internet il file di script GetServices.ps1, imposta la policy di esecuzione su RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

La policy di esecuzione RemoteSigned ti obbliga a firmare criptograficamente ogni script PowerShell scaricato da Internet prima che PowerShell lo esegua sul tuo sistema.

3. Dovresti vedere un output che richiede di confermare l’azione. Inserisci Y e premi invio per confermare la modifica della policy.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

In questo momento, segui i passaggi successivi per esplorare diversi metodi per eseguire lo script PowerShell sul tuo computer.

Come Eseguire uno Script PowerShell

Per dimostrare l’esecuzione di uno script PowerShell, hai effettivamente bisogno di un file di script da eseguire! Se non ne hai uno a portata di mano, scarica questo file ZIP ed estrai il file PS1 al suo interno. Troverai all’interno un semplice file di script chiamato GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Ogni script PowerShell dovrebbe terminare con l’estensione .ps1.

Utilizzo della Console

Una volta che hai uno script pronto, ci sono diversi modi per eseguire un file di script PowerShell. Uno dei modi più comuni è tramite la console PowerShell.

Per farlo:

  1. Apri la console PowerShell come mostrato sopra.

2. Naviga nella posizione del sistema di file in cui si trova lo script utilizzando il cmdlet PowerShell Set-Location o l’alias cd. Lo script di questo tutorial si trova nella directory C:\Temp.

PS> cd C:\Temp\

3. Esegui lo script utilizzando la notazione a punto (.). PowerShell è una shell che cerca anche nomi di comando. Per differenziare tra un comando PowerShell e uno script, è necessario precedere lo script con un punto. Questo punto rappresenta la directory corrente.

 PS> .\GetServices.ps1

Come Eseguire uno Script PowerShell dalla Riga di Comando tramite la Posizione di PowerShell

Se non puoi o preferisci non eseguire script tramite la console PowerShell, puoi farlo anche con il buon vecchio prompt dei comandi.

Per eseguire script tramite il prompt dei comandi, devi prima avviare l’eseguibile PowerShell (powershell.exe), con la posizione di PowerShell di C:\Program Files\WindowsPowerShell\powershell.exe e quindi passare il percorso dello script come parametro ad esso.

Puoi eseguire script con parametri in qualsiasi contesto specificandoli semplicemente durante l’esecuzione dell’eseguibile PowerShell come powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

Una volta aperto cmd.exe, puoi eseguire uno script PowerShell come mostrato di seguito. Questo esempio sta eseguendo il motore e passandogli il percorso dello script di C:\Temp\GetServices.ps1.

Osserva che nell’esempio sottostante viene utilizzato il percorso della posizione di PowerShell per eseguire lo script. Dovrai farlo se la cartella non è presente nel tuo PATH da qualche parte.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

La posizione di PowerShell per PowerShell 7 utilizza un eseguibile diverso chiamato pwsh.exe di solito situato in C:\Program Files\PowerShell\7\pwsh.exe.

Di seguito è disponibile un pratico video di YouTube che illustra l’esecuzione di uno script tramite un file batch eseguito da cmd.exe.

Utilizzo di PowerShell ISE

Se crei i tuoi script o modifichi quelli di altri, probabilmente utilizzerai un editor di script come il PowerShell ISE o forse Visual Studio (VS) Code. Poiché ISE viene fornito con Windows, concentriamoci su questo metodo per questo tutorial.

Per invocare uno script tramite l’ISE:

  1. Vai al menu Start, cerca PowerShell ISE e aprilo.
Search PowerShell ISE in Start Menu

2. Fai clic su FileApri e trova il tuo script.

Open Script using File Menu

3. Con lo script aperto, fai clic sul pulsante verde di esecuzione per eseguire lo script. Questo pulsante invocherà lo script nel terminale PowerShell incorporato nella parte inferiore.

Run Script using PowerShell ISE

L’output dello script di esempio

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Se esegui lo script di esempio GetServices.ps1, vedrai quanto segue. Questo script esegue il cmdlet Get-Service che restituisce tutti i servizi installati sul tuo computer Windows locale.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Eseguire uno script PowerShell da un altro script

Supponiamo tu abbia due script e desideri che uno chiami l’altro. Forse hai uno script chiamato GetUser.ps1 e uno chiamato ResetPassword.ps1. All’interno dello script GetUser.ps1, desideri eseguire lo script ResetPassword.ps1 per reimpostare una password utente.

All’interno dello script di chiamata (GetUser.ps1), aggiungeresti una riga per eseguire l’altro script esattamente come faresti per chiamare lo script dalla riga di comando.

Puoi vedere di seguito che hai un paio di opzioni. Dovresti tipicamente scegliere di eseguire l’altro script nella stessa sessione o ambito per semplificare le cose, a meno che tu non abbia una ragione specifica per eseguire lo script in un’altra sessione PowerShell.

## Per eseguire l'altro script in una nuova sessione
powershell.exe .\ResetPassword.ps1
## Per eseguire l'altro script nella stessa sessione
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/