Esempi di script con PowerShell
Versione
Per visualizzare la versione di PowerShell installata sul computer, si può utilizzare:
$PSVersionTable
Help in linea
Il comando:
Get-Help
permette di avere informazioni sui comandi (cmdlets) e sulla loro sintassi.
Esempio:
Get-Help -Name Get-Process
Creazione di una directory
Si utilizza il cmdlets:
New-Item -Path 'C:\path\to\newfoldername' -ItemType Directory
Specificando solo il nome della nuova directory, questa verrà creata nella directory corrente.
L'opzione -ItemType
permette di definire il tipo di oggetto da creare.
Per creare un file, si può utilizzare questo cmdlets:
New-Item -Path 'C:\path\to\\folder\newfilename' -ItemType File
Copia di una directory
Per copiare una directory con tutto il contenuto, utilizziamo il cmdlets:
Copy-Item 'C:\path\to\sourcefolder' 'D:\path\to\destinationfolder' -Recurse
La copia può avvenire da un disco ad un altro oppure sullo stesso disco.
Eliminazione di una directory
Per cancellare una directory con tutto il suo contenuto, si può utilizzare:
Remove-Item 'C:\path\to\folder' -Recurse
Se nonsi specifica il parametro -Recurse
e la directory contiene elementi, viene chiesta la conferma di cancellazione.
Spostamento di una directory
Per spostare una directory utilizziamo:
Move-Item 'C:\path\to\folder' 'D:\another\path\to\folder'
Ridenominazione di una directory
Il cmdlets da utilizzare è:
Rename-Item 'C:\path\to\folder' newfoldername
Verificare l'esistenza di una directory
Per verificare se una directory esiste, utilizziamo:
Test-Path 'C:\path\to\foldertocheck'
L'output sarà true
, se la directory esiste, oppure false
, se la directory non esiste.
Creazione di un file
Utilizziamo il cmdlets New–Item
già visto per la creazione di una directory:
New-Item -Path 'C:\path\to\folder\newfilename' -ItemType File
Copia di un file tra due directory
Per questo compito, utilizziamo:
Copy-Item 'C:\path\to\sourcefolder\sourcefilename' 'D:\path\to\destinationfolder\destinationfilename'
Se non specifichiamo il nome del file per la directory di destinazione, il file manterrà il nome originario.
Cancellazione di un file
Per cancellare un file, utilizziamo:
Remove-Item 'C:\path\to\folder\filename'
Spostamento di un file
Per spostare un file utilizziamo lo stesso cmdlets usato per le directory:
Move-Item 'C:\path\to\sourcefolder\filename' 'D:\path\to\destinationfolder'
Se non specifichiamo il nome del file per la directory di destinazione, il file manterrà il nome originario.
Ridenominazione di un file
Il cmdlets da utilizzare è:
Rename-Item 'C:\path\to\folder\filename' newfilename
Verificare l'esistenza di un file
Per verificare se un file esiste, utilizziamo:
Test-Path 'C:\path\to\folder\filetocheck'
L'output sarà true
, se il file esiste, oppure false
, se il file non esiste.
Leggere il contenuto di un file
Per visualizzare il contenuto d un file, utilizziamo:
Get-Content 'C:\path\to\folder\filename'
Visualizzare la data e l'ora correnti
Per visualizzare la data e l'ora correnti, si può utilizzare:
Get-Date
Se non specifichiamo alcun parametro, la visualizzazione avviene nel formato esteso si aper la data che per l'ora.
Per visualizzare la data e l'ora nel formato breve:
Get-Date -Format g
Per visualizzare solo la data corrente, specifichiamo il parametro -DisplayHint Date
:
Get-Date -DisplayHint Date
In modo analogo, per visualizzare solo l'ora corrente, scriviamo:
Get-Date -DisplayHint Time
Modifica della data di sistema
Possiamo modificare la data e l'ora di sistema con il cmdlets:
Set-Date -date "31/12/2022 23:50"
Per spostare l'ra di sistema indietro di 15 minuti, utilizziamo il seguente cmdlets:
Set-Date -Adjust -0:15:0 -DisplayHint Time
Per utilizzare il comando Set-Date, è necessario aprire la finestra di PowerShell con diritti di amministratore.
Creare un file XML
Abbiamo già visto come creare un nuovo file utilizzando il cmdlets New–Item
.
Nello specifico, per creare un file XML dovremo specificare la sua estensione:
New-Item 'C:\path\to\folder\filename.xml' -ItemType File
Per aggiungere il contenuto al file appena creato, utilizziamo il cmdlets Set-Content
:
Set-Content 'C:\path\to\folder\filename.xml' '<titolo>Questo è il contenuto del file XML</titolo>'
Per leggere il contenuto del file, utilizziamo il comando:
Get-Content 'C:\path\to\folder\filename.xml'
Cancellare il contenuto di un file
Per questa operazione, utilizziamo il comando:
Clear-Content 'C:\path\to\folder\filename'
Aggiungere testo ad un file
Per aggiungere una porzione di testo ad un file (append), utilizziamo:
Add-Content 'C:\path\to\folder\filename' "testo aggiunto al file"
Le variabili
Le variabili in PowerShell iniziano con il simbolo $
, seguito da lettere, numeri o carattere _
.
Nel caso in cui volessimo utilizzare caratteri "speciali" nel nome di una variabile, dovremmo includere il nome tra le parentesi {
e }
.
Esempio:
$variabile
$nome_cognome
${variabile-trattino}
Per assegnare il valore ad una variabile, utilizziamo l'operatore =
:
$variabile = 3
Abbiamo a disposizione anche l'assegnamento multiplo:
$variabile = $valore = $abc = 3
In questo modo, tutte le variabili sono valorizzate con 3.
Possiamo assegnare valori diversi a variabili diverse in una sola riga di codice, con questa sintassi:
$a,$b,$c = 10,3,"test"
Possiamo anche assegnare più valori alla stessa variabile, definendo in questo modo un array:
$elenco=1,12,134,55,78,100,55,12
Per accedere al singolo elemento utilizziamo le parentesi quadre per indicare l'indice dell'array:
$elenco[2]
Il valore mostrato sarà 134.
Possiamo anche visualizzare i valori ordinati e ignorare i duplicati:
$elenco | sort | get-unique
Per sapere quanti valori sono contenuti in un array, scriviamo:
$elenco.Count
E' possibile inizializzare il contenuto di un array utilizzando diverse modalità.
Ad esempio, per inizializzare un array di interi consecutivi, si può scrivere:
$elenco=4..10
In questo modo, l'array $elenco
avrà nella posizione [0] il valore 4, nella posizione [1] il valore 5 fino alla posizione [6] con il valore 10.
Possiamo estrarre una porzione dell'array:
$subelenco = $elenco[1..3]
L'array $subelenco
conterrà i valori 5, 6, 7 nelle posizioni [0], [1], [2].
Misurazioni
PowerShell mette a disposizione il cmdlets Measure-Object
per effettuare misurazioni di varia natura.
Vediamo alcuni esempi:
- Per calcolare il numero di file e cartelle della directory corrente:
Get-ChildItem | Measure-Object
- Per calcolare la dimensione minima e massima dei file contenuti in una directory, la somma delle dimensioni e il valore medio:
Get-ChildItem | Measure-Object -Property length -Minimum -Maximum -Sum -Average
- Per calcolare il numero di caratteri, di parole e di righe in un file di testo:
Get-Content 'C:\path\to\folder\filename' | Measure-Object -Character -Word -Line
Visualizzare il contenuto di una directory
Tramite il cmdlets Get-ChildItem
possiamo visualizzare il contenuto di una directory:
Get-ChildItem 'C:\path\to\folder'
Non spcificando la directory, otteniamo il contenuto della directory corrente:
Get-ChildItem
E' possibile filtare l'output in modo da visualizzare solo i file ocn una certa estensione:
Get-ChildItem 'C:\path\to\folder' *.txt -Recurse -Force
Il parametro -Recurse
permette di cercare i file anche all'interno delle subdirectory mentre -Force
permette di allargare la ricerca anche ai file di sistema e nascosti.
Confrontare due file di testo
Per confrontare due file testuali si può utilizzare il seguente cmdlets:
Compare-Object -ReferenceObject $(Get-Content 'C:\path\to\folder\firstfile.txt') -DifferenceObject $(Get-Content 'C:\path\to\folder\secondfile.txt')
Mettere in pausa l'esecuzione di uno script
Per fermare l'esecuzione dei comandi all'interno di uno script, si può utilizzare:
Start-Sleep -m 2000
per impostare una pausa in millisecondi oppure:
Start-Sleep -s 2
per definire la pausa in secondi.
Alias
Gli Alias
sono un'alternativa ai nomi utilizzati per i cmdlets.
Ad esempio, si può definire un alias per il cmdlets Get-Help
in questo modo:
New-Alias -Name Aiuto -Value Get-Help
Da questo momento, possiamo utilizzare l'alias Aiuto
allo stesso modo in cui utilizziamo il cmdlets Get-Help
.
Gli alias sono validi solo all'interno della sessione in cui sono stati creati.
E' possibile utilizzare il cmdlets Export-Alias
per salvare le informazioni sugli alias in un file.
Per visualizzare tutti gli alias definiti nella sessione corrente, si utilizza:
Get-alias
PowerShell Backtick
PowerShell supporta un insieme di sequenze di caratteri speciali, conosciute anche come sequenze di escape
.
Ogni sequenza inizia con il carattere `
(Backtick). Vediamone alcuni:
Sequenza | Descrizione |
---|---|
Sequenza | Descrizione |
`t | Horizontal tab |
`n | New line |
`v | Vertical tab |
`b | Backspace |
`e | Escape |
`0 | Null |
`a | Alert |
`f | Form feed |
`r | Carriage return |
`u{x} | Unicode escape sequence |
Esempio:
Write-Host "Questo testo appare sulla prima riga `nSeconda riga`tEsempio TAB"
Output:
Questo testo appare sulla prima riga
Seconda riga Esempio TAB
Operazioni su stringhe: Split e Join
L'operazione di split permette di suddividere una stringa in funzione di un carattere o di una sottostringa.
In PowerShell può essere utilizzato l'operatore -split
.
Ad esempio, per suddividere una frase in parole si può utilizzare questo script:
$stringa="Questa stringa elaborata con l'operatore -split"
$array = $stringa -split ' '
$array
L'output è:
Questa
stringa
elaborata
con
l'operatore
-split
Si può effettuare lo split di una stringa anche in funzione di un'altra stringa:
$stringa="Questa stringa dopo essere stata splittata"
$array = $stringa -split 'st'
$array
L'ouuput è:
Que
a
ringa dopo essere
ata splittata
L'operazione opposta allo split, ovvero join
, permette di unire più stringhe.
Esempio:
$array=("Stringa"," ottenuta"," utilizzando"," -join")
$stringa = -join$array
$stringa
L'output è:
Stringa ottenuta utilizzando -join