Programming Notes
Think it, Code it, Run it    moschini.cloud  

Esempi con PowerShell
Data pubblicazione: 08 dicembre 2022

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 -ItemTypepermette 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
Attenzione

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