Il tipo di stringa è probabilmente la variabile più popolare in PowerShell. Non credo di aver mai scritto uno script che non contenesse almeno una stringa. Le stringhe sono ottime per definire un semplice insieme di caratteri come un nome computer, il percorso di un file di testo, una chiave di registro, un URL e così via. Espandendo le variabili all’interno delle stringhe e utilizzando le capacità di formattazione delle stringhe di PowerShell, puoi fare praticamente qualsiasi cosa.
Le stringhe sono definite racchiudendo uno o più caratteri tra virgolette singole o doppie, ad esempio:
Definire stringhe in questo modo è semplice, ma presto ti troverai nella necessità di ottenere il valore di una variabile all’interno delle stringhe.
Per esempio, forse hai uno script con un parametro ComputerName
e nel tuo script devi concatenare un prefisso standard come SRV- come mostrato di seguito.
Il valore della variabile $ComputerName
è ora SRV-URANUS, ma racchiudere $ComputerName
all’interno della stringa con virgolette doppie è solo un modo per inserire le variabili nelle stringhe. Ci sono diverse modalità per farlo. Vediamo due esempi.
Espansione delle Stringhe
Il primo metodo è probabilmente già familiare, chiamato espansione delle stringhe, ovvero l’espansione delle variabili all’interno di stringhe esistenti. Questo è il modo più comune per ottenere il valore di una variabile all’interno di una stringa.
Per farlo è necessario inserire la variabile all’interno di una stringa con virgolette doppie. Le virgolette singole non funzioneranno perché trattano tutti i caratteri letteralmente.
Per esempio, potrei aver bisogno di specificare il percorso di un file. Conosco il percorso di base della cartella ma non ancora il nome effettivo del file. Potrei creare una variabile chiamata $FullPath
e inserire staticamente il percorso della cartella, rendendo però il nome del file una variabile.
Cosa succede se è necessario specificare una proprietà di un oggetto all’interno di una stringa? Questo appare un po’ diverso. In questo caso, è necessario circondare la proprietà con parentesi e anteporre un segno di dollaro davanti. Questo si chiama operatore di sottoespressione. Ciò dice a PowerShell di espandere prima il valore.
L’espansione di stringhe è molto comune, ma cosa succede se hai una stringa più complicata?
Utilizzando l’operatore di formattazione delle stringhe di PowerShell
Un altro modo per assicurarsi che i valori delle variabili vengano inseriti nelle stringhe è attraverso l’operatore di formattazione di Powershell (-f
).
Usando l’operatore di formattazione, non è necessario inserire la variabile o la proprietà all’interno di una stringa circondata da virgolette doppie. Puoi creare una stringa tra virgolette singole e specificare le variabili che andranno in quella stringa all’esterno, come mostrato di seguito.
Puoi vedere che ha lo stesso effetto. Anche se questa volta non hai dovuto usare virgolette doppie o preoccuparti di racchiudere la proprietà dell’oggetto tra parentesi e un altro segno di dollaro. Appare un po’ più pulito ma potrebbe essere più difficile da capire. Utilizzare l’operatore di formattazione ti obbliga a sostituire il {0}
con $File.Name
nella tua mente.
Per aggiungere altre variabili, basta incrementare i tuoi label di 1 e continuare ad aggiungere variabili separate da una virgola all’operatore di formato. Finché la posizione dell’indice dell’operatore di formato corrisponde alla posizione nell’etichetta di stringa, puoi aggiungere quante referenze desideri.
Quando usare l’operatore di formato
I usually prefer to place variables inside of the string and expand them because I don’t have to match an index with a value. However, there are exceptions, as in the case of special characters that must be escaped.
Per esempio, diciamo che devi eseguire un’utilità a riga di comando che richiede di passare un nome file ad essa. Il percorso di questo file potrebbe contenere spazi, quindi dovrai racchiudere tale riferimento tra doppi apici. Senza quei doppi apici, utility.exe non potrebbe interpretare correttamente l’argomento file.
Adesso diciamo che vuoi fare questo in uno script PowerShell. Se stai usando stringhe espandibili, sembrerebbe un po’ disordinato perché devi usare un backtick per escapare i doppi apici.
Ora, otteniamo lo stesso risultato con l’operatore di formato.
I don’t have to use any escape characters. This may seem like a simple example but as soon as you come across large strings that require a lot of escaping you will soon see the real benefit of using the format operator!
Riepilogo
La prossima volta che ti trovi a dover sostituire variabili all’interno di una stringa, pensa a quale metodo sarebbe più leggibile. Ti risparmierà tempo nel lungo periodo.
Per altri post correlati al lavoro con le stringhe, assicurati di controllare PowerShell Substring: Trovare una stringa all’interno di una stringa e Variabili PowerShell nelle stringhe.
Source:
https://adamtheautomator.com/powershell-string-format/