Le stringhe in PowerShell sono probabilmente il tipo di dato più utilizzato in PowerShell. Dal visualizzare messaggi, sollecitare input, o inviare dati a file, è quasi impossibile scrivere script senza l’interazione di stringhe.
In questo articolo, imparerai che le stringhe non sono solo per la lettura e la visualizzazione. Possono anche essere manipolate per adattarsi allo scopo del compito per cui potresti scrivere lo script. Ad esempio, sostituire caratteri o intere parole, concatenare stringhe per formare una nuova stringa, o addirittura dividere una stringa in più stringhe.
Comprendere le Stringhe
Secondo la definizione .NET di stringa – “Una stringa è una collezione sequenziale di caratteri che viene usata per rappresentare il testo”. In sintesi, finché c’è una sequenza di caratteri che forma un testo, c’è una stringa.
Definire le Stringhe di Sistema in PowerShell
Le stringhe vengono definite racchiudendo una serie di caratteri tra virgolette singole o doppie. Di seguito sono riportati degli esempi di stringa.
Le stringhe sono in realtà System.Strings in .NET.
Come puoi vedere dall’esempio sopra, la prima stringa è racchiusa da una virgoletta singola, e la seconda stringa è racchiusa da una doppia virgoletta. Se te lo stai chiedendo, l’unica differenza tra le due è che le stringhe tra virgolette doppie supportano l’espansione della stringa, mentre una virgoletta singola rappresenterà solo stringhe letterali.
Per confermare il concetto di virgoletta singola vs. doppia, quando incollerai entrambe le stringhe dall’esempio sopra in PowerShell.
Lo screenshot qui sotto mostra che una stringa tra virgolette singole restituisce esattamente la stringa letterale definita. Mentre la stringa tra virgolette doppie restituisce la stringa con il risultato dell’espressione del cmdlet Get-Date.

Il risultato mostrato sopra dimostra la distinzione di quando è appropriato utilizzare virgolette singole o doppie nella definizione delle stringhe.
L’oggetto stringa
Come indicato nella sezione precedente, la collezione di caratteri che forma un testo è una stringa. Il valore risultante della stringa è l’oggetto String. L’oggetto String è un oggetto .NET che appartiene al tipo [System.String].
E poiché System.String è un oggetto, ha delle proprietà a cui è possibile accedere utilizzando il cmdlet Get-Member. Di seguito inseriamo una variabile all’interno di una stringa tra virgolette doppie.
Lo screenshot qui sotto mostra il TypeName e l’elenco parziale delle proprietà dell’oggetto String.

Concatenazione delle stringhe in PowerShell
La concatenazione delle stringhe viene descritta come l’unione di due o più stringhe, creando essenzialmente un oggetto stringa da più oggetti stringa separati. Ci sono diversi metodi in PowerShell per concatenare le stringhe. Ogni metodo è diverso e quale utilizzare dipende da come si intende implementare la concatenazione delle stringhe.
A typical example of using string concatenation in the real world is Active Directory user creation. Perhaps you’re creating a user creation script that takes the first name, last name, and department values from a list.
Utilizzando la concatenazione di stringhe, è possibile formulare la convenzione standard di denominazione per il nome, il nome visualizzato, il nome utente e l’indirizzo email. Per questo esempio, lavorerai con le seguenti stringhe mostrate di seguito. Copia il codice qui sotto e incollalo nella tua sessione di PowerShell.
Utilizzando i valori variabili di esempio sopra, l’obiettivo è ottenere i seguenti valori elencati di seguito concatenando le stringhe insieme.
- Nome = nome cognome
- Nome visualizzato = nome cognome (reparto)
- SamAccountName = nome.cognome
- Indirizzo email = [email protected]
Nelle sezioni successive, i valori elencati sopra verranno creati utilizzando i diversi metodi di concatenazione di stringhe disponibili in PowerShell.
Cominciamo!
Utilizzando l’operatore di concatenazione di stringhe di PowerShell
I linguaggi di programmazione hanno il proprio operatore di concatenazione di stringhe utilizzato per concatenare le stringhe. Ad esempio, in Visual Basic, il metodo di concatenazione è il segno ampersand (&
). PowerShell ha anche il suo metodo di concatenazione, che è il segno più (+
).
Utilizzando l’operatore di concatenazione di stringhe, è possibile concatenare le stringhe utilizzando il codice di seguito.
Utilizzando l’espansione delle stringhe di PowerShell
l’uso dell’espansione delle stringhe potrebbe essere il metodo che comporta il codice più breve quando si concatenano le stringhe. Come si può vedere dal codice sottostante, tutto ciò che è necessario è organizzare le stringhe come dovrebbero apparire e racchiuderle tra virgolette doppie.
In seguito, PowerShell interpreta e gestisce l’espansione delle stringhe all’interno della stringa tra virgolette doppie per produrre come risultato la stringa concatenata. È possibile fare riferimento all’output di esempio di seguito riportato.

Utilizzando l’operatore di formattazione di PowerShell
l’operatore di formattazione (-f
) viene utilizzato principalmente per la formattazione composita. È importante ricordare che con questo metodo ci sono tre parti nell’uso di -f
.
Fare riferimento alla terza riga di codice di seguito riportata. Il "{0} {1}"
rappresenta il formato e i segnaposto. I numeri tra parentesi graffe indicano l’indice della stringa nella raccolta da visualizzare al suo posto. Le virgolette possono essere singole o doppie.
La raccolta di stringhe in input in questo esempio è rappresentata da $nome,$cognome
. Ciò significa che l’indice della variabile $nome
è 0, mentre quello di $cognome
è 1.
Infine, -f
è il posto tra il segnaposto e la collezione di stringhe rappresentata da (-f
).
Il codice sopra produrrà i risultati mostrati di seguito.

Utilizzando l’operatore -Join
di PowerShell
L’operatore -Join
può essere utilizzato per unire le stringhe in una singola stringa in due modi.
Il primo modo per utilizzare -Join
è quello di seguirlo con l’array di stringhe che si desidera concatenare. L’operatore -Join
non fornisce un’opzione per aggiungere un delimitatore. Tutte le stringhe nell’array saranno unite insieme senza nulla tra di loro.
Il secondo modo per utilizzare l’operatore -Join
consiste nel specificare il delimitatore da utilizzare. L’array di stringhe verrà unito, ma il carattere del delimitatore specificato verrà inserito tra ogni stringa.
Tornando all’obiettivo di concatenare le stringhe, il codice di seguito illustra come utilizzare l’operatore -Join
per unire le stringhe.
Quando si esegue il codice di esempio sopra in PowerShell, ci si aspetta di vedere un output simile a quello mostrato di seguito.

Il metodo String.Format()
di .NET
Il metodo String.Format di .NET è l’equivalente di .NET dell’operatore di formattazione di PowerShell. Funziona allo stesso modo dell’operatore di formattazione, in cui è necessario specificare il formato e i segnaposto.
La schermata sottostante mostra il metodo String.Format in azione.

Il metodo String.Concat()
di .NET
Un altro metodo per concatenare le stringhe è utilizzare il metodo String.Concat di .Net. Il metodo String.Concat di .NET è l’equivalente di .NET dell’operatore di concatenazione di stringhe di PowerShell (+
). Tuttavia, anziché utilizzare il segno + per unire le stringhe, è possibile aggiungere tutte le stringhe all’interno del metodo in questo modo – [string]::Concat(stringa1, stringa2...)
.
La schermata sottostante mostra il risultato dell’invocazione del metodo .NET String.Concat. È possibile vedere che PowerShell ha unito stringa1, stringa2.

Il metodo .NET String.Join()
Il metodo .NET String.Join è l’equivalente del metodo PowerShell Join Operator (-join
) in .NET. Il formato per questo metodo è [string]::Join(<delimitatore>,<stringa1>,<stringa2>,...)
.
Il primo elemento all’interno del metodo -Join
è sempre il delimitatore. Successivamente, i valori degli elementi successivi sono le stringhe che si desidera concatenare. Ecco un esempio di codice. Ricorda, il primo elemento è sempre il delimitatore. Se non si desidera aggiungere un delimitatore, è possibile specificarlo in questo modo —> ''
.

Suddivisione delle stringhe in PowerShell
Hai visto diversi metodi per concatenare stringhe nella sezione precedente. In questa sezione, imparerai i diversi modi in cui utilizzare PowerShell per suddividere le stringhe. La suddivisione delle stringhe è l’azione inversa della concatenazione.
È possibile dividere le stringhe in PowerShell in due modi diversi: utilizzando la funzione/metodo split()
o l’operatore split
.
Dividere le stringhe con il metodo Split()
Se stai cercando un modo semplice per dividere una stringa e creare un array, puoi utilizzare il metodo split()
. Il metodo split()
è presente su ogni oggetto stringa e può dividere una stringa in un array in base a un carattere non-regex.
Ad esempio, se hai una stringa come green|eggs|and|ham
e desideri creare un array come @('green','eggs','and','ham')
, puoi dividere questa stringa utilizzando il simbolo di pipe (|
) come mostrato nel seguente frammento di codice.
Vedrai quindi che PowerShell ha suddiviso la stringa nell’array desiderato utilizzando il simbolo di pipe.
Il metodo split()
è un modo semplice per dividere le stringhe, ma ha alcune limitazioni. Il metodo split()
non consente di suddividere le stringhe utilizzando le espressioni regolari. Se hai bisogno di funzionalità più avanzate per suddividere una stringa, dovrai imparare a utilizzare l’operatore split
.
L’operatore -split
L’operatore principale utilizzato per dividere le stringhe in PowerShell è l’operatore -Split
. Utilizzando l’operatore -Split
, le stringhe vengono suddivise per impostazione predefinita in base agli spazi bianchi o con specifici caratteri delimitatori.
Ecco la sintassi dell’operatore -Split
per il tuo riferimento. Ricorda di notare la differenza tra lo split unario e binario.
In questo esempio, la variabile $string
contiene il valore di una stringa su una sola riga. Successivamente, con l’operatore -Split
, la stringa su una sola riga verrà divisa in un array di stringhe di PowerShell. La stringa divisa risultante viene salvata nella variabile $split
.
Come puoi vedere dal risultato sopra, ciò che era originariamente una singola stringa è stata divisa in 7 sottostringhe. Questo dimostra come PowerShell divida una stringa in un array.
Il delimitatore di caratteri
Nell’esempio precedente, l’operatore -Split
ha diviso l’oggetto stringa singola in più sottostringhe anche senza specificare un delimitatore; questo perché il delimitatore predefinito dell’operatore -Split
è lo spazio bianco. Tuttavia, i delimitatori possono essere anche caratteri, stringhe, pattern o blocchi di script.
In questo esempio, il delimitatore utilizzato è il punto e virgola ;
.
Quando testi il codice sopra in PowerShell, otterrai il seguente risultato.

Noto dal risultato sopra che il carattere del delimitatore è stato omesso completamente dalle sottostringhe risultanti.
Se, per qualche motivo, hai bisogno di mantenere il carattere del delimitatore, il delimitatore può essere mantenuto racchiudendo il carattere tra parentesi.
Dopo aver modificato il delimitatore di divisione, come mostrato sopra, l’esecuzione produrrà l’output mostrato di seguito.

Il risultato sopra mostra che i caratteri del delimitatore non sono omessi e sono conteggiati nelle sottostringhe risultanti.
Il Delimitatore della Stringa
Le stringhe possono anche essere divise da un’altra stringa come delimitatore. In questo esempio, la stringa “giorno” viene utilizzata come delimitatore.
Il Delimitatore del Blocco di Script
A scriptBlock as the delimiter enables the -Split operator to perform custom or complex splitting of strings.
Negli esempi precedenti, il carattere o la stringa del delimitatore vengono utilizzati per dividere le stringhe. Con l’uso di un blocco di script, puoi creare un’espressione che utilizza efficacemente più di un delimitatore.
L’esempio seguente utilizza l’espressione {$PSItem -eq 'e' -or $PSItem -eq 'y'}
, il che significa che la stringa verrà divisa se il carattere in ingresso è 'e'
o 'a'
.
E quando si esegue questo comando, l’output sarà costituito da sottostringhe divise utilizzando i caratteri delimitatori specificati nell’espressione nel blocco di script.

Questo prossimo esempio fa qualcosa in più con un blocco di script. Questa volta, l’espressione valuta se:
- Il carattere in ingresso passa come un intero; e
- Che il suo valore sia superiore a 1
Se il risultato della valutazione è vero, quindi l’operatore -Split
utilizzerà quel carattere come delimitatore. Inoltre, è stata aggiunta la gestione degli errori per assicurarsi che gli errori vengano filtrati.
Dopo aver eseguito il codice mostrato sopra, l’aspettativa è che la stringa venga divisa nel punto in cui il valore del carattere può essere convertito in un intero con un valore superiore a 1. Di seguito viene mostrato l’output atteso.

Il Delimitatore RegEx
Per impostazione predefinita, l’operatore -Split
utilizza la corrispondenza RegEx del delimitatore specificato. Ciò significa che è possibile utilizzare anche RegEx come delimitatori per dividere le stringhe.
In questo prossimo esempio, la stringa contiene caratteri di parola e caratteri non di parola. L’obiettivo è dividere la stringa con qualsiasi carattere non di parola. In RegEx, i caratteri non di parola sono rappresentati da \W
, mentre i caratteri di parola che corrispondono a questi caratteri – [a-zA-Z0-9_]
– sono rappresentati da \w
.
Limitare le sottostringhe
È anche possibile impedire all’operatore -Split
di dividere una stringa in un certo numero di sottostringhe. L’opzione che può essere utilizzata per limitare il risultato delle sottostringhe è il parametro <Max-sottostringhe>
.
Quando ti riferisci alla sintassi di -Split, il parametro <Max-sottostringhe>
è il parametro che segue direttamente il parametro <Delimited>
. La sintassi viene mostrata di seguito per riferimento.
Seguendo la sintassi sopra, il codice di esempio di seguito è modificato per limitare il numero di divisioni/sottostringhe a 3.
E, eseguendo il codice di cui sopra, si ottiene l’output seguente. Come puoi vedere dall’output qui sotto, la stringa è stata divisa solo in tre sottostringhe. I delimitatori rimanenti sono stati saltati.

Ora, se vuoi limitare le sottostringhe, ma in ordine inverso, puoi cambiare il valore del parametro <Max-sottostringhe>
in un valore negativo. In questo prossimo esempio, <Max-sottostringhe>
viene modificato in -3
.
E come risultato del codice modificato sopra, la stringa è stata divisa a partire dagli ultimi tre delimitatori corrispondenti.

Trovare e sostituire stringhe
In questa sezione, imparerai i due metodi che possono essere utilizzati per cercare e eseguire una sostituzione di stringa in PowerShell. Il metodo Replace()
e l’operatore -Replace
.
Il metodo Replace()
L’oggetto stringa ha anche un metodo incorporato che può aiutare a eseguire operazioni di ricerca e sostituzione: il metodo replace()
. Il metodo replace()
accetta un massimo di quattro sovraccarichi.
Di seguito sono elencati gli insiemi accettabili di sovraccarichi per il metodo replace()
.
Gli unici sovraccarichi richiesti sono <originale>
e <sostituto>
. <ignoraMaiuscMinusc>
e <cultura>
sono opzionali.
Nell’esempio qui sotto, il codice cercherà tutte le istanze del carattere virgola (,
) e le sostituirà con un punto e virgola (;
).
Oltre a sostituire solo un singolo carattere, puoi utilizzare anche il metodo replace()
per cercare e sostituire stringhe. Il codice di esempio qui sotto sostituisce la parola “giorno” con “notte”.

replace()
methodL’operatore -Replace
La sintassi per l’operatore replace è mostrata qui sotto.
Utilizzando la sintassi sopra, il codice di esempio qui sotto sostituisce la parola “giorno” con “Notte” utilizzando l’operatore -replace
.

-replace
operatorQuesto prossimo esempio utilizza una corrispondenza RegEx per sostituire le stringhe con l’operatore -replace
. Il codice qui sotto cerca la stringa che corrisponde a (#.
) all’interno della stringa qui e le sostituisce con nulla.

-replace
Estrazione di stringhe da altre stringhe
L’oggetto stringa ha un metodo chiamato SubString()
. Il metodo SubString()
viene utilizzato per estrarre stringhe all’interno di altre stringhe in posizioni specifiche. La sintassi del metodo SubString()
è mostrata di seguito.
L’argomento startIndex
indica l’indice di posizione da cui il metodo SubString()
inizia la ricerca. Il parametro length
indica il numero di caratteri da restituire a partire dall’argomento startIndex
. Il parametro length
è opzionale e, se non viene utilizzato, il metodo SubString()
restituirà tutti i caratteri.
Estrazione di una sottostringa da una posizione di partenza e una lunghezza fissa
Nell’esempio di codice qui sotto viene recuperata la parte della stringa $guid
a partire dall’indice 9 e vengono restituiti esattamente i 5 caratteri successivi.
Estrazione di una sottostringa da una posizione di partenza dinamica
Questo prossimo esempio mostra come utilizzare la proprietà della lunghezza della stringa PowerShell per definire dinamicamente un indice di inizio.
Il codice qui sotto esegue le seguenti operazioni:
- Ottiene la lunghezza dell’oggetto stringa.
- Ottiene l’indice dell’indice centrale dividendo la lunghezza per 2.
- Utilizza l’indice centrale come indice di partenza della sottostringa.
Dato che il valore length
non è stato specificato, il metodo Substring()
restituisce tutti i caratteri a partire dall’indice di partenza.

Confronto di stringhe in PowerShell
Puoi utilizzare PowerShell per confrontare anche le stringhe utilizzando i metodi integrati dell’oggetto stringa come CompareTo()
, Equals()
e Contains()
. Oppure, utilizzando gli operatori di confronto di PowerShell.
Utilizzando il metodo CompareTo()
Il metodo CompareTo()
restituisce un valore di 0 se le due stringhe hanno lo stesso valore. Ad esempio, il codice seguente confronta due oggetti stringa.
E dato che i valori sono gli stessi, il risultato dovrebbe essere 0, come mostrato di seguito.

CompareTo()
method to compare stringsUtilizzando il metodo Equals()
e l’operatore -eq
Il metodo Equals()
e l’operatore -eq
possono essere utilizzati per verificare se il valore delle due stringhe è uguale.
L’esempio seguente utilizza il metodo Equals()
per confrontare i valori di $string1
e $string2
.
Il codice sopra dovrebbe restituire False
perché i valori di $string1
e $string2
non sono uguali tra loro.

Equals()
methodNell’esempio di codice successivo viene utilizzato -eq
al posto di Equals()
per confrontare i valori di $string1
e $string2
.
Come puoi vedere dall’output sottostante, il risultato quando si utilizza l’operatore -eq
e il metodo Equal()
sono gli stessi.

-eq
operatorUtilizzando il metodo Contains()
In questo esempio, le due stringhe vengono confrontate verificando se la stringa di PowerShell contiene una sottostringa di un’altra stringa.
Il codice sottostante mostra che i valori di $string1
e $string2
non sono uguali. Tuttavia, il valore di $string2
è una sottostringa di $string1
.
Il risultato del codice precedente dovrebbe essere True
, come mostrato di seguito.

Contains()
method