Come eseguire uno script PowerShell
Jan 10, 2025
Gli script PowerShell automatizzano compiti amministrativi su Windows, Linux e macOS, ma l'esecuzione è limitata per impostazione predefinita per motivi di sicurezza. Gli utenti devono regolare le politiche di esecuzione, avviare PowerShell o CMD e specificare percorsi completi o relativi degli script. Gli script possono includere parametri, essere eseguiti con privilegi elevati o eseguiti in remoto con Invoke-Command. Le migliori pratiche includono la firma degli script, l'utilizzo del minimo privilegio, la convalida degli input e la gestione degli errori con Try-Catch per un'automazione sicura.
PowerShell è un linguaggio di scripting e una shell a riga di comando progettata per l'automazione dei compiti e la gestione della configurazione, utilizzata principalmente da amministratori di sistema e utenti avanzati. Basato sul framework .NET (.Net Core per PowerShell 7), supporta Windows, Linux e macOS. Consente l'automazione di compiti amministrativi come la gestione degli account utente, la configurazione delle reti e l'esecuzione di backup, riducendo così gli errori umani.
Mentre PowerShell semplifica l'amministrazione, può presentare sfide, in particolare per i principianti. I problemi comuni includono errori di sintassi, percorsi configurati in modo errato, problemi di dipendenza e messaggi di errore confusi. Inoltre, per migliorare la sicurezza, l'esecuzione degli script è limitata per impostazione predefinita, richiedendo agli utenti di adeguare le politiche di esecuzione per eseguire gli script. Per massimizzare il potenziale di PowerShell mantenendo la sicurezza, gli utenti devono combinare un'attenta gestione degli script con abilità di risoluzione dei problemi.
Contenuti correlati selezionati:
Perché utilizzare gli script di PowerShell?
Gli script PowerShell sono uno strumento essenziale per gli amministratori di sistema e gli sviluppatori sia in ambienti Windows che cross-platform. Automatizzare processi come la gestione degli account, il monitoraggio della rete e il dispiegamento del software consente di risparmiare tempo considerevole, liberando i professionisti IT per concentrarsi su iniziative strategiche, ottimizzazione dei flussi di lavoro e risoluzione dei problemi, guidando una maggiore efficienza e innovazione. Possono persino programmare gli script per l'esecuzione automatica. PowerShell Remoting amplifica il valore di PowerShell consentendo una gestione remota sicura di più sistemi da un'interfaccia centrale, riducendo la necessità di accesso fisico e migliorando i tempi di risposta agli incidenti.
L'utilizzo di script PowerShell garantisce anche un'esecuzione coerente e precisa di operazioni complesse. Eliminare l'errore umano è essenziale per mantenere configurazioni uniformi come richiesto per la conformità e la sicurezza. Questa affidabilità è inestimabile in ambienti di grandi dimensioni dove anche piccole incongruenze possono portare a vulnerabilità o fallimenti operativi.
Comprensione delle politiche di esecuzione di PowerShell
PowerShell utilizza le execution policies per controllare se gli script di PowerShell possono essere eseguiti su un sistema e, in caso affermativo, in quali condizioni.
Impostazioni della Policy di Esecuzione
Le politiche di esecuzione possono avere le seguenti impostazioni:
- Limitato: Non è possibile eseguire script; si possono eseguire solo comandi singoli nel prompt di PowerShell. Tentare di eseguire uno script porta al messaggio di errore: “L'esecuzione degli script è disabilitata su questo sistema.” Questa è l'impostazione predefinita per la maggior parte dei sistemi.
- AllSigned: Solo gli script firmati da un editore affidabile possono essere eseguiti. Questa impostazione offre un alto livello di sicurezza poiché garantisce che vengano eseguiti solo script verificati.
- RemoteSigned: Gli script creati localmente possono essere eseguiti senza una firma, ma gli script scaricati da internet devono essere firmati da un editore affidabile. Questa politica è comunemente raccomandata per l'uso quotidiano.
- Illimitato: Tutti gli script possono essere eseguiti, indipendentemente dalla loro origine o dal fatto che siano firmati. Tuttavia, gli utenti riceveranno un avviso quando eseguono script scaricati per allertarli sui rischi.
Come modificare una policy di esecuzione utilizzando Set-ExecutionPolicy
Per modificare una policy di esecuzione, utilizzare il cmdlet Set-ExecutionPolicy. Il parametro -Scope definisce l'ambito: CurrentUser si applica solo all'utente attualmente connesso, mentre LocalMachine si applica a tutti gli utenti del sistema (utilizzare questo valore richiede diritti di amministratore).
Ecco un esempio:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Conferma la modifica digitando Y (Sì) quando richiesto.
Verifica della Policy di Esecuzione Utilizzando Get-ExecutionPolicy
Puoi verificare l'attuale policy di esecuzione con il seguente comando:
Get-ExecutionPolicy -List
Ecco un esempio di output:
Guida passo dopo passo all'esecuzione di script PowerShell
Per eseguire uno script PowerShell da PowerShell, segui questi passaggi:
Passo 1: Avvia PowerShell
Prima di eseguire uno script, è necessario aprire PowerShell. Ecco due opzioni:
- Fai clic sul menu Start, digita PowerShell e seleziona Windows PowerShell.
- Avvia il prompt dei comandi digitando cmd nel menu Start. Digita powershell per aprire una sessione di PowerShell.
Passaggio 2: Naviga fino alla posizione dello script
Successivamente, naviga nella directory dove è salvato il file .ps1 eseguendo il comando cd:
cd C:\Users\AbbeyCrawford\Scripts
Passaggio 3: Esegui lo Script
Il comando per eseguire uno script PowerShell dipende dal fatto che tu sia nella directory dove si trova il tuo script:
- Se ti trovi nella directory dove è situato il tuo script, ecco come eseguire uno script in PowerShell:
.\HelloWorld.ps1
- Se non ti trovi nella directory dello script, per eseguire uno script PowerShell, devi fornirne il percorso completo:
C:\Users\JohnDoe\Scripts\HelloWorld.ps1
- Se lo script si trova in una sottocartella della directory corrente, usa il prefisso .\ per fornire il percorso relativo:
.\SubFolder\HelloWorld.ps1
- Un punto (.) prima del percorso indica che si desidera eseguire lo script nella sessione corrente per consentire alle sue variabili o funzioni di rimanere disponibili dopo l'esecuzione. (Il dot sourcing è spiegato più in dettaglio più avanti in questo documento.) Notare lo spazio tra i due punti.
. .\HellowWorld.ps1
. C:\Scripts\MyScripts\HelloWorld.ps1
Esecuzione di script con parametri
Molti script PowerShell accettano parametri per renderli più flessibili. Puoi passare argomenti durante l'esecuzione dello script.
Ad esempio, supponiamo che tu abbia lo script seguente che accetta due parametri, Name e Age:
param(
[string]$Name,
[int]$Age
)
Write-Host "Hello, $Name! You are $Age years old."
When running the script, you can pass arguments to it as follows:
.\Get-UserInfo.ps1 -Name "John" -Age 30
Come eseguire uno script PowerShell da CMD
Per eseguire uno script PowerShell dal prompt dei comandi, seguire i seguenti passaggi:
- Apri il prompt dei comandi digitando cmd nella barra di ricerca e premendo Enter.
- Utilizza il seguente comando per eseguire il tuo script PowerShell. L'opzione -File è necessaria; specifica il file dello script da eseguire.
powershell -File C:\Scripts\Get-UserInfo.ps1
Utilizzando l'opzione -NoExit Option
In alcuni casi, potresti volere che la finestra di PowerShell rimanga aperta dopo che lo script ha terminato l'esecuzione. Questo può essere particolarmente utile per il debugging o quando lo script è progettato per mostrare un output che vuoi vedere prima che la finestra si chiuda.
Per mantenere aperta la finestra di PowerShell quando si eseguono script dalla riga di comando, utilizzare l'opzione -NoExit come mostrato di seguito:
powershell -NoExit -File C:\Scripts\Backup.ps1
Come eseguire PowerShell come amministratore
Molti compiti amministrativi richiedono permessi elevati per essere eseguiti con successo. Esempi includono l'installazione di software, la modifica delle impostazioni di rete e l'accesso alle directory di sistema. Tentare di eseguire questi compiti senza diritti amministrativi può portare a errori, che potrebbero bloccare importanti attività di manutenzione o configurazione.
Per eseguire PowerShell con privilegi amministrativi, fare clic con il tasto destro su Windows PowerShell e scegliere Esegui come amministratore.
Utilizzo di Start-Process per l'Esecuzione Amministrativa
In alcune situazioni, è necessario eseguire un'altra istanza di PowerShell o uno script all'interno di una sessione di PowerShell. Il cmdlet Start-Process è uno strumento perfetto. Aggiungendo il parametro -Verb RunAs si istruisce PowerShell a lanciare una nuova istanza con diritti amministrativi:
Start-Process PowerShell -Verb RunAs
Per eseguire uno script specifico con privilegi elevati, aggiungi il parametro -ArgumentList e usa -File per specificare il percorso dello script. Di seguito sono riportati due esempi:
Start-Process PowerShell -ArgumentList '-File "C:\Scripts\Update-Software.ps1"' -Verb RunAs
Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File “ C:\Scripts\Update-Software.ps1” -Verb RunAs
Errori comuni e come risolverli
Risolvere gli errori può sembrare scoraggiante all'inizio, ma superarli è un passo importante, paragonabile al guadagnare medaglie d'oro, d'argento e di bronzo per le abilità di debugging. Di seguito sono elencati alcuni dei problemi più comuni e come risolverli efficacemente.
Errore “Running scripts is disabled”
Questo errore si verifica perché la policy di esecuzione predefinita di PowerShell è impostata su Restricted, che impedisce l'esecuzione di qualsiasi script. Ad esempio, lo screenshot sottostante mostra l'errore, “Il file C:\Scripts\Get-UserInfo.ps1 non può essere caricato perché l'esecuzione degli script è disabilitata su questo sistema”:
Per risolvere questo problema, modifica la policy di esecuzione per consentire l'esecuzione degli script. Usa Set-ExecutionPolicy per passare a un'impostazione meno restrittiva, come RemoteSigned.
Errori di sintassi
Gli errori di sintassi derivano tipicamente da una struttura del comando errata, parametri mancanti o errori di battitura. Ecco un esempio:
Per correggere gli errori di sintassi, leggere attentamente i messaggi di errore visualizzati e controllare il numero di riga indicato per identificare dove si è verificato l'errore. Per prevenire gli errori, controllare sempre due volte lo script per errori comuni e considerare l'uso di un editor di codice che offra funzionalità di evidenziazione della sintassi o IntelliSense.
Errori di permessi
Gli errori di autorizzazione si verificano quando lo script tenta di accedere a risorse che richiedono privilegi elevati o quando i permessi dei file/cartelle sono insufficienti. Ad esempio, l'errore sottostante indica che l'accesso al percorso C:\Backup\Backup.txt è stato negato:
Ecco due modi per risolvere il problema:
- Fai clic con il pulsante destro del mouse su PowerShell, seleziona Esegui come amministratore ed esegui nuovamente lo script.
- Controlla i permessi del file o della cartella a cui lo script sta accedendo e concedi i permessi necessari utilizzando i cmdlet Get-Acl e Set-Acl.
Tutorial su Windows PowerShell Scripting (PDF) per Principianti
Scopri di piùEsecuzione di script PowerShell in diversi ambienti
Il processo per eseguire gli script PowerShell varia a seconda che li si stia eseguendo:
- Nell'ambiente di scripting integrato PowerShell (ISE)
- Tramite Esplora File
- Utilizzando comandi a distanza come Invoke-Command
Esecuzione di script nell'ISE di PowerShell
L'ISE di PowerShell è un ambiente di sviluppo user-friendly progettato per scrivere, testare e fare il debug degli script di PowerShell. Offre un'interfaccia multi-finestra con funzionalità come l'evidenziazione della sintassi e strumenti di debug integrati. Per eseguire script nell'ISE di PowerShell, segui questi passaggi:
- Apri il PowerShell ISE. Per trovarlo, puoi cercare PowerShell ISE nel menu Start, oppure digitare powershell_ise nella finestra di dialogo Run (Windows + R). Ecco l'interfaccia risultante:
- Utilizza il riquadro degli script (finestra superiore) per scrivere o caricare script. Per creare un nuovo file .ps1, premi FileèNew. Per salvare lo script, fai clic su File > Salva con nome.
- Per eseguire l'intero script, clicca sul pulsante Run Script (triangolo verde) o premi F5. Per eseguire delle linee selezionate, evidenziale e premi F8.
Esecuzione di script da Esplora File
Un altro metodo conveniente per eseguire script PowerShell è direttamente dall'Esplora File. Questo approccio è vantaggioso quando si desidera eseguire uno script senza dover aprire una finestra del terminale o per un accesso rapido.
- Naviga alla cartella che contiene il tuo script PowerShell.
- Fare clic con il tasto destro sul file dello script .ps1. Nel menu contestuale, selezionare Esegui con PowerShell. Questo avvierà lo script in una nuova finestra di PowerShell ed eseguirlo immediatamente.
Esecuzione di script in remoto
PowerShell offre anche la capacità di eseguire script su macchine remote senza la necessità di accesso fisico. Questo è particolarmente utile negli ambienti aziendali dove i compiti devono essere eseguiti su più server.
Prerequisito: Abilitare l'Esecuzione Remota
Prima di poter eseguire uno script in remoto, devi abilitare PowerShell Remoting sul sistema di destinazione. Esegui il seguente comando:
Enable-PSRemoting -Force
Sintassi di base per Invoke-Command
Invoke-Command consente di eseguire cmdlet o script su computer remoti. Ad esempio, per eseguire UpdateSystem.ps1 su un computer remoto chiamato Server01, utilizzare il seguente cmdlet:
Invoke-Command -ComputerName Server01 -FilePath C:\Scripts\UpdateSystem.ps1
Fornire un blocco di script da eseguire
Per eseguire direttamente un blocco di script, utilizza questa sintassi:
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }
Esecuzione di comandi su più computer
Per eseguire script su più computer, puoi specificare i nomi dei computer utilizzando una variabile, come mostrato di seguito:
$computers = "PC1", "PC2", "PC3"
Invoke-Command -ComputerName $computers -ScriptBlock { Your PowerShell Commands }
In alternativa, puoi passare i nomi dei computer come un elenco separato da virgole:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Restart-Service -Name Spooler }
Automazione degli script PowerShell con Task Scheduler
Windows Task Scheduler, uno strumento integrato nel sistema operativo Windows, consente agli utenti di pianificare l'esecuzione di compiti in una data e ora specifiche, secondo una programmazione definita o quando vengono attivati da determinati eventi.
Per conoscere i vantaggi della programmazione degli script PowerShell e ottenere istruzioni dettagliate, esempi, migliori pratiche e consigli per la risoluzione dei problemi, si prega di fare riferimento a questo articolo: Come automatizzare gli script PowerShell con Task Scheduler.
Tecniche avanzate
PowerShell offre tecniche avanzate per migliorare la riutilizzabilità degli script, la modularità e la condivisione di variabili e funzioni tra gli script. Due concetti chiave sono il dot sourcing e i moduli degli script.
Dot Sourcing
Normalmente, ogni script viene eseguito in una nuova sessione e tutte le variabili o funzioni dichiarate al suo interno vengono perse al termine dello script. Con il dot sourcing, uno script viene eseguito nell'ambito corrente in modo che qualsiasi variabile, funzione o alias definito in quello script sia disponibile nella sessione che lo ha chiamato. Questo è particolarmente utile quando si desidera condividere funzioni o variabili comuni tra script diversi o all'interno della stessa sessione.
La sintassi è la seguente:
. .\ScriptName.ps1
Il primo punto seguito da uno spazio (. ) indica a PowerShell che stai eseguendo lo script con il dot sourcing.
La seconda parte (.\ScriptName.ps1) è il percorso relativo al tuo script.
Utilizzando i moduli script
Un modulo in PowerShell è un pacchetto che contiene funzioni, cmdlet, variabili e altro di PowerShell. I moduli sono progettati per essere importati e utilizzati in più script. Rispetto al dot sourcing, i moduli offrono una migliore incapsulamento e versionamento, il che rende più semplice organizzare, mantenere e condividere script riutilizzabili.
Per creare un modulo script, salva semplicemente il tuo script con un'estensione del file .psm1 invece di .ps1.
Una volta creato un modulo, puoi rendere disponibili le sue funzioni nella tua sessione di PowerShell utilizzando il comando Import-Module nel seguente modo:
Import-Module C:\Scripts\Modules\Geometry.psm1
Migliori pratiche per l'esecuzione di script PowerShell
Le seguenti best practice sono essenziali per mantenere la sicurezza durante l'esecuzione di script PowerShell, così come per migliorare l'usabilità e l'accuratezza degli script.
Migliori pratiche di sicurezza
Utilizzare impostazioni di Strong Execution Policy
Utilizza le policy di esecuzione di PowerShell per consentire solo script da fonti affidabili e verificate. Imposta la policy di esecuzione su un livello appropriato per il tuo ambiente. Per la maggior parte delle organizzazioni, RemoteSigned offre un buon equilibrio, consentendo l'esecuzione di script creati localmente mentre richiede che gli script scaricati siano firmati da un editore fidato.
Firma digitalmente i tuoi script
PowerShell verifica la firma digitale di uno script prima di eseguirlo. Firmare digitalmente i tuoi script con un certificato affidabile aiuta a proteggere contro le manomissioni.
Esegui script con i minimi privilegi richiesti
Ove possibile, eseguire gli script con il minimo dei privilegi per limitare i danni potenziali in caso di vulnerabilità di sicurezza o errori.
Migliori pratiche per la documentazione
Gli script ben documentati sono più facili da mantenere, eseguire il debug e comprendere sia per gli utenti attuali che futuri.
Usa Commenti
I commenti sono importanti per spiegare lo scopo dello script, i parametri e la logica. In PowerShell, i commenti sono preceduti dal simbolo #.
Per spiegazioni rapide, utilizza i commenti inline:
$backupDirectory = "D:\Backup" # Set the backup directory
Per fornire spiegazioni più dettagliate o per disabilitare temporaneamente parti del tuo codice, utilizza i commenti a blocco (<# … #>):
<#
Questo script esegue il backup dei dati critici.
Controlla lo spazio disponibile e verifica l'integrità del backup.
#>
Controlla la sezione Aiuto
Per assicurarti di utilizzare correttamente le funzioni di PowerShell, usa Get-Help per rivedere la sintassi e l'uso dei cmdlet. Ad esempio, per ottenere aiuto su Get-Process, esegui il seguente comando:
Get-Help Get-Process
Migliori pratiche per la gestione degli errori
Una gestione corretta degli errori è essenziale per prevenire che gli script PowerShell falliscano inaspettatamente e lascino compiti incompleti o sistemi in uno stato instabile.
Convalida l'input
Per evitare errori imprevisti, assicurati che i tuoi script convalidino l'input. Questo è particolarmente importante per i dati relativi agli utenti come nomi o avatar degli utenti.
Implement Try-Catch Blocks
Il blocco try-catch è il metodo principale per gestire gli errori in PowerShell. Questo ti permette di intercettare e gestire le eccezioni in modo elegante. Ecco un esempio:
try {
# Attempt to run a command
Copy-Item -Path $source -Destination $destination -Recurse
} catch {
# Handle the error
Write-Host "An error occurred: $_"
# Additional error recovery actions can be performed here
}
Use Finally Blocks
Aggiungi un blocco final quando necessario. Questo blocco verrà eseguito indipendentemente dall'eventuale presenza di un errore nel blocco try consentendoti di liberare risorse o eseguire il codice di finalizzazione. Di seguito è riportato un esempio:
try {
# Code that may throw an exception
Remove-Item -Path $filePath -ErrorAction Stop
} catch {
Write-Host "Failed to remove the file: $_"
} finally {
Write-Host "Cleanup actions have been performed."
}
Conclusione
PowerShell è uno strumento incredibilmente potente per automatizzare i compiti di amministrazione del sistema per garantire l'accuratezza e migliorare l'efficienza. Comprendendo concetti fondamentali come le politiche di esecuzione, il dot sourcing e i moduli degli script, così come seguendo le migliori pratiche per la sicurezza e la gestione degli errori, puoi sfruttare appieno PowerShell per scrivere script robusti, riutilizzabili e sicuri che migliorano le tue operazioni quotidiane.
Vi incoraggiamo a iniziare a sperimentare con PowerShell scrivendo ed eseguendo i vostri script. Iniziate con compiti di automazione semplici e progressivamente immergetevi in tecniche di scripting avanzate. Più praticherete, più diventerete proficienti nell'automatizzare flussi di lavoro complessi, gestire sistemi remoti e maneggiare operazioni IT su larga scala.
Netwrix Directory Manager
FAQ
Condividi su
Scopri di più
Informazioni sull'autore
Tyler Reese
Vicepresidente della Gestione Prodotti, CISSP
Con più di due decenni nel settore della sicurezza del software, Tyler Reese conosce intimamente le sfide di identità e sicurezza in rapida evoluzione che le aziende affrontano oggi. Attualmente, ricopre il ruolo di direttore del prodotto per il portfolio di Netwrix Identity and Access Management, dove le sue responsabilità includono la valutazione delle tendenze di mercato, la definizione della direzione per la linea di prodotti IAM e, in ultima analisi, la soddisfazione delle esigenze degli utenti finali. La sua esperienza professionale spazia dalla consulenza IAM per le aziende Fortune 500 al lavoro come architetto aziendale di una grande compagnia diretta al consumatore. Attualmente detiene la certificazione CISSP.
Scopri di più su questo argomento
Powershell Elimina il file se esiste
PowerShell Write to File: "Out-File" e Tecniche di Output del File
Come creare nuovi utenti di Active Directory con PowerShell
Cos'è PowerShell? Una guida completa alle sue funzionalità e utilizzi
Padroneggiare PowerShell Sleep per la gestione degli script