Primi comandi e primi script
CommandLet per gestione del terminale
I CommandLet sono i comandi che è possibile eseguire nell’ambiente PowerShell.
Per la gestione del terminale, PowerShell fornisce i seguenti CmdLet:
Clear-Host
: pulisce l’area del terminale;Write-Output
: Scrive sul flusso di output;Write-Error
: Scrive sul flusso di errore;Write-Debug
: Scrive sul flusso di debug;Write-Warning
: Scrive sul flusso di warning;Write-Verbose
: Scrive sul flusso di verbose;Write-Host
: Scrive sul flusso di output personalizzando l’output;Read-Host
: Legge in input dal terminale e memorizza il valore in una variabile.
Pulire l’area del terminale
Il CommandLet utilizzato per pulire l’area del terminale è Clear-Host
che ha la seguente sintassi:
SYNTAX
Clear-Host [<CommonParameters>]
ALIASES
echo
Non sono previsti parametri, se non quelli comuni, e non è previsto nessun output.
Scrivere sul flusso di output
Il CommandLet utilizzato per scrivere sul flusso di output è Write-Output
che ha la seguente sintassi:
SYNTAX
Write-Output [-InputObject] <PSObject[]>[<CommonParameters>]
ALIASES
echo
Il parametro indicato nella sintassi ha il seguente significato:
PSObject[]
: i messaggi o gli oggetti da scrivere in output.
Per scrivere uno o più messaggi sul terminale, si usa quindi:
Write-Output "Hello" "World" "!!"
L’output è il seguente:
Hello
World
!!
Si può anche utilizzare l’alias come da esempio seguente:
echo "Hello" "World" "!!"
L’output è il seguente:
Hello
World
!!
Scrivere sul flusso di errore
Il CommandLet utilizzato per scrivere sul flusso di errore è Write-Error
che ha la seguente sintassi:
Write-Error [-Message] <String> [-ErrorId <String>]
I parametri indicati nella sintassi hanno il seguente significato:
Message
: il messaggio da scrivere sul flusso di errore;ErrorId
: il codice di errore che si vuole assegnare all’errore.
Per scrivere un messaggio di errore sul terminale, si usa quindi:
Write-Error "Hello" -ErrorId "123"
L’output è il seguente:
Write-Error: Hello
Scrivere sul flusso di debug
Il CommandLet utilizzato per scrivere sul flusso di debug è Write-Debug
che ha la seguente sintassi:
Write-Debug [-Message] <String>
Il parametro indicato nella sintassi ha il seguente significato:
Message
: il messaggio da scrivere sul flusso di debug.
Per scrivere un messaggio di debug sul terminale, si usa quindi:
Write-Debug "Hello"
Il comando non presenta nessun output, perché le impostazioni predefinite non visualizzano sul terminale lo stream di output. Nel caso fosse attivato, l’output sarebbe il seguente:
DEBUG: Hello
Scrivere sul flusso di warning
Il CommandLet utilizzato per scrivere sul flusso di warning è Write-Warning
che ha la seguente sintassi:
Write-Warning [-Message] <String>
Il parametro indicato nella sintassi ha il seguente significato:
Message
: il messaggio da scrivere sul flusso di warning.
Per scrivere un messaggio di warning sul terminale, si usa quindi:
Write-Warning "Hello"
L’output è il seguente:
Warning: Hello
Scrivere sul flusso di verbose
Il CommandLet utilizzato per scrivere sul flusso di verbose è Write-Verbose
che ha la seguente sintassi:
Write-Verbose [-Message] <String>
Il parametro indicato nella sintassi ha il seguente significato:
Message
: il messaggio da scrivere sul flusso di verbose.
Per scrivere un messaggio di verbose sul terminale, si usa quindi:
Write-Verbose "Hello"
Il comando non presenta nessun output, perché le impostazioni predefinite non visualizzano sul terminale lo stream di output. Questo stream si attiva passando il parametro -Verbose
, comune a tutti i CommandLet.
Per visualizzare il messaggio di verbose sul terminale, si usa quindi:
Write-Verbose "Hello" -Verbose
L’output è il seguente:
Verbose: Hello
Scrivere sul flusso di output personalizzando l’output
Il CommandLet utilizzato per scrivere sul flusso di output è Write-Host
che permette di personalizzare l’output:
Write-Host [[-Object] <Object[]>] [-NoNewline] [-Separator <Object>]
[-ForegroundColor <ConsoleColor>] [-BackgroundColor <ConsoleColor>]
I parametri indicati nella sintassi hanno il seguente significato:
Object[]
: lista di oggetti da scrivere sul flusso di output;NoNewline
: indica di non aggiungere caratteri di ‘a capo’;Separator
: indica il separatore da utilizzare;ForegroundColor
: il colore del testo;BackgroundColor
: il colore dello sfondo.
La lista di colori disponibili è la seguente: Black
, DarkBlue
, DarkGreen
, DarkCyan
, DarkRed
, DarkMagenta
, DarkYellow
, Gray
, DarkGray
, Blue
, Green
, Cyan
, Red
, Magenta
, Yellow
, White
.
Per scrivere un messaggio di output sul terminale con sfondo nero e colore testo rosso, si usa quindi:
Write-Host "Red" "on white" "text." -NoNewline -Separator " -- "
-ForegroundColor red -BackgroundColor white
L’output è il seguente:
Red -- on white -- text.
Si nota che i vari oggetti sono separati dal separatore " – " e non è presente nessun carattere ‘a capo’; Il testo è in rosso e lo sfondo è in bianco.
Leggere dal terminale
Il CommandLet utilizzato per leggere dal terminale è Read-Host
che ha la seguente sintassi:
Read-Host [[-Prompt] <Object>] [-AsSecureString]
I parametri indicati nella sintassi hanno il seguente significato:
Prompt
: il messaggio da visualizzare;AsSecureString
: non visualizza i caratteri scritti dall’utente.
Per leggere un valore dal terminale si usa quindi:
$nome = Read-Host "Inserisci il nome"
Nel caso in cui si deve inserire una password o comunque un input che non si vuole visualizzare a video, si usa l’opzione AsSecureString
, come nel seguente esempio:
$nome = Read-Host "Inserisci il nome" -AsSecureString
Commenti
E’ possibile aggiungere commenti attraverso il carattere #
. In caso di commenti su più righe, questi vanno racchiusi tra i simboli di apertura e chiusura commento rappresentati da <#
e #>
.
Ad esempio:
# Questo è un commento
<# Questo è un
commento su
più righe #>
Creazione e rimozione di Alias
E’ possibile personalizzare la lista di alias per i CmdLet, aggiungendone di nuovi con il comando:
Set-Alias -Name "wo" -Value "Write-Output"
A questo punto è possibile utilizzare l’alias wo
al posto di Write-Output
, come nell’esempio seguente:
wo "Hello"
E’ possibile cancellare un alias con il CmdLet:
Remove-Alias -Name "wo"
Primi script
Uno script è un elenco di istruzioni inserite in un file. Eseguire uno script consiste nell’esecuzione di tutte le istruzioni inserite nel file. L’estensione del file per gli script PowerShell è ps1
.
Prima di creare uno script è consigliato impostare le opzioni di salvataggio (quali codifica dei caratteri UTF-8 ed il carattere di terminazione riga) attraverso gli strumenti appositi quali EditorConfig.
E’ possibile creare il primo script salvando le seguenti istruzioni in un file esempio.ps1
:
# Questo è il primo script
# Scrivo un messaggio
Write-Host "Inserisci il nome"
<# procedo con la lettura
del nome dell'utente #>
$nome = Read-Host
# Scrivo il nome sullo stream di errore
Write-Error $nome
Per questioni di sicurezza, le impostazioni predefinite prevedono che l’esecuzione di script sia disabilitata. Per verificare le impostazioni, aprire il terminale di PowerShell ed eseguire:
Get-ExecutionPolicy
L’output del comando rappresenta la politica di esecuzione degli script impostata.
Le politiche di esecuzione sono:
-
Restricted
: script non permessi; -
AllSigned
: script eseguiti solo se firmati; -
RemoteSigned
: script eseguiti se propri o se firmati; -
Unrestricted
: script eseguiti sempre.
Per impostare una politica, ad esempio la politica di esecuzione senza restrizioni, eseguire:
Set-ExecutionPolicy Unrestricted
Sempre per impostazioni di sicurezza predefinite, gli script non possono essere eseguiti con il doppio click del mouse.
Per eseguire lo script da terminale, è necessario indicare il nome, nel caso dell’esempio precedente è esempio.ps1
.
Per eseguire lo script da interfaccia grafica, cliccare con il tasto destro del mouse sullo script e scegliere da menu la voce “Esegui con powershell”.