Se sei nuovo nel linguaggio di scripting PowerShell e vuoi imparare come eseguire uno script PowerShell, sei arrivato al post del blog giusto. Questo blog sarà un tutorial che copre i modi comuni per eseguire script e alcuni problemi che potrebbero apparire.
Indice
Prerequisiti
Questo articolo ti illustrerà come eseguire PowerShell sul tuo computer locale. Se desideri seguire, assicurati di avere i seguenti prerequisiti prima di iniziare questo articolo.
- Un computer Windows 10 con privilegi di amministratore.
- Windows PowerShell versione 5 o superiore. È inoltre possibile utilizzare PowerShell v7. Questo tutorial si concentrerà su Windows PowerShell poiché il sistema operativo Windows lo ha già.
- Qualsiasi editor di file di testo
Gestione dei criteri di esecuzione
Se questa è la prima volta che si tenta di eseguire uno script di Windows PowerShell, è possibile che si verifichi un problema comune. PowerShell probabilmente restituirà un messaggio di errore che indica che uno script “non può essere caricato perché gli script in esecuzione sono disabilitati 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 riportato sopra quando si tenta di eseguire un PowerShell con un criterio di esecuzione impostato su Restricted, Remote Signed o All Signed.
Restricted
Restricted è il criterio predefinito impostato per i computer client Windows. Se si utilizza PowerShell per la prima volta, il criterio predefinito verrà probabilmente impostato per limitare tutti gli script.
È comunque possibile eseguire singoli comandi in un terminale, ma non in un file di script. La restrizione include qualsiasi file che termina con .ps1xml
, .psm1
o .ps1
.
Unrestricted
Unrestricted ti consente di eseguire qualsiasi script tuttavia, ti avvisa prima dell’esecuzione se lo script viene scaricato da Internet. Questo criterio è di solito l’impostazione predefinita per tutti i dispositivi non Windows.
Firma remota
La politica firma remota consente di eseguire qualsiasi script (a) firmato digitalmente o (b) qualsiasi script scritto sul computer locale con o senza firma.
Se uno script viene scaricato da Internet e non firmato, è necessario sbloccare il file. È possibile farlo facendo clic destro sul file e scegliendo Proprietà. Oppure, è possibile utilizzare il cmdlet Unblock-File
PowerShell per quel particolare file di script.
L’utilizzo di un criterio firmato remoto sarebbe un’opzione ideale quando si esegue uno script scaricato da Internet.
Tutti firmati
Tutti firmati richiede che tutti gli script siano firmati digitalmente da un editore attendibile. Questo include gli script scaricati da Internet e scritti localmente sul computer.
Modifica del criterio di esecuzione PowerShell
Per modificare il criterio di esecuzione:
- Apri Windows PowerShell con Esegui come amministratore per assicurarti di avere l’autorizzazione più alta per apportare le modifiche ai criteri.
2. Quando è aperto, eseguire il seguente comando PowerShell per impostare i criteri di esecuzione del computer. La politica di esecuzione, come descritto sopra, può essere di tre tipi diversi. Questo tutorial utilizza una politica di esecuzione utile ma ancora sicura di RemoteSigned.
Poiché questo tutorial presuppone che tu abbia scaricato da Internet il file di script GetServices.ps1, imposta il criterio di esecuzione su RemoteSigned.
PS> Set-ExecutionPolicy RemoteSigned
Il criterio di esecuzione RemoteSigned ti obbliga a firmare crittograficamente 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. Immettere Y e premere invio per confermare la modifica dei criteri.
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? Yes Yes to All No No to All Suspend Help (default is "N"):
A questo punto, 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, è effettivamente necessario un file di script per l’esecuzione! Se non ne hai uno a portata di mano, scarica questo file ZIP ed estrai il file PS1 all’interno. Troverai un semplice file di script all’interno chiamato GetServices. ps1.
Write-Output "Listing Computer Services"Get-Service
Ogni script PowerShell dovrebbe terminare con un’estensione
.ps1
.
Utilizzando la Console
Una volta che hai uno script pronto, ci sono alcuni modi diversi per eseguire un file di script PowerShell. Uno dei modi più comuni è tramite la console PowerShell.
Per farlo:
- Apri la console PowerShell come mostrato sopra.
2. Passare alla posizione del file system in cui si trova lo script utilizzando il cmdlet Set-Location
PowerShell o l’alias cd
. Lo script di questo tutorial si trova nel C:\Temp elenco.
PS> cd C:\Temp\
3. Eseguire lo script utilizzando una notazione punto (.
). PowerShell è una shell che cerca anche i nomi dei comandi. Per distinguere tra un comando PowerShell e uno script, è necessario prefigurare 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 PowerShell
Se non è possibile o non si preferisce eseguire script tramite la console PowerShell, è possibile farlo anche con la riga di comando good ol’ (prompt dei comandi).
Per eseguire gli script tramite il prompt dei comandi, è necessario prima avviare l’eseguibile PowerShell (powershell.exe), con la posizione PowerShell di C:\Program Files\WindowsPowerShell\powershell.exe
e quindi passare il percorso dello script come parametro ad esso.
È possibile eseguire script con parametri in qualsiasi contesto semplicemente specificandoli durante l’esecuzione dell’eseguibile PowerShell come
powershell.exe -Parameter 'Foo' -Parameter2 'Bar'
.
Una volta aperto cmd.exe, puoi eseguire uno script PowerShell come di seguito. Questo esempio sta eseguendo il motore e passando il percorso dello script di C:\Temp\GetServices.ps1.
Si noti di seguito che l’esempio seguente utilizza il percorso della posizione di PowerShell per eseguire lo script. Dovrai farlo se la cartella non è nel tuo PERCORSO da qualche parte.
CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"
Il percorso PowerShell per PowerShell 7 utilizza un eseguibile diverso denominato pwsh.exe tipicamente situato in C:\Program File \ PowerShell \ 7 \ pwsh.exe.
Di seguito è riportato un comodo video di YouTube che copre l’esecuzione di uno script tramite un file batch che il cmd.exe esegue.
Usando PowerShell ISE
Se crei i tuoi script o modifichi quelli di altri, probabilmente utilizzerai un editor di script come PowerShell ISE o forse Visual Studio (VS) Codice. Poiché ISE viene fornito con Windows, concentriamoci su questo metodo per questo tutorial.
Per richiamare uno script tramite ISE:
- Passare al menu Start, cercare PowerShell ISE e aprirlo.
2. Clicca su File → Apri e trova il tuo script.
3. Con lo script aperto, fare clic sul pulsante verde esegui per eseguire lo script. Questo pulsante richiamerà lo script nel terminale PowerShell incorporato in basso.
L’output dello script di esempio
A volte uno script PowerShell può restituire l’output. Ciò accade quando lo script che si sta eseguendo è costruito per restituire oggetti che è un componente fondamentale di PowerShell.
Se si esegue lo script GetServices.ps1 di esempio, verrà visualizzato quanto segue. Questo script esegue il cmdlet Get-Service
che restituisce tutti i servizi installati sul computer Windows locale.
PS> .\GetScripts.ps1Listing Computer ServicesStatus Name DisplayName------ ---- -----------Running aakore Acronis Agent Core ServiceStopped AarSvc_1b668d Agent Activation Runtime_1b668dRunning AcronisActivePr... Acronis Active Protection ServiceRunning AcronisCyberPro... Acronis Cyber Protection ServiceRunning AcrSch2Svc Acronis Scheduler2 ServiceRunning AdobeARMservice Adobe Acrobat Update ServiceRunning AdobeUpdateService AdobeUpdateServiceRunning AGMService Adobe Genuine Monitor ServiceRunning AGSService Adobe Genuine Software Integrity Se...----Truncated----
Esecuzione di uno script PowerShell all’interno di uno script
Diciamo che hai due script e vorresti che uno chiamasse l’altro. Forse hai uno script chiamato GetUser. ps1 e uno chiamato ResetPassword. ps1.All’interno dello script GetUser.ps1, vorresti eseguire ResetPassword.ps1 per reimpostare una password utente.
All’interno dello script chiamante (GetUser.ps1), si aggiungerebbe una riga per eseguire l’altro script proprio come si chiamerebbe lo script dalla riga di comando.
Puoi vedere sotto hai un paio di opzioni. In genere è necessario scegliere di eseguire l’altro script all’interno della stessa sessione o ambito per semplificare le cose a meno che non si abbia un motivo specifico per eseguire lo script in un’altra sessione di PowerShell.
## To run the other script in a new sessionpowershell.exe .\ResetPassword.ps1## To run the other script in the same session.\ResetPassword.ps1