De string-type is waarschijnlijk het meest populaire variabele type in PowerShell. Ik denk niet dat ik ooit een script heb geschreven dat niet minstens één string bevatte. Strings zijn geweldig om een eenvoudige set tekens te definiëren, zoals een computernaam, het pad naar een tekstbestand, een register-sleutelpad, een URL, enzovoort. Door variabelen uit te breiden binnenin strings en gebruik te maken van de stringformaatmogelijkheden van PowerShell, kun je zo ongeveer alles doen.
Strings worden gedefinieerd door één of meer tekens tussen enkele of dubbele aanhalingstekens te plaatsen, zoals:
Het definiëren van strings op deze manier is eenvoudig, maar al snel zul je merken dat je de waarde van een variabele binnenin strings moet kunnen ophalen.
Bijvoorbeeld, misschien heb je een script met een ComputerName
-parameter en moet je in je script een standaard voorvoegsel eraan toevoegen, zoals SRV- zoals hieronder getoond.
De waarde van de variabele $ComputerName
is nu SRV-URANUS, maar het tussen dubbele aanhalingstekens plaatsen van $ComputerName
binnenin de string is slechts één manier om variabelen in strings in te voegen. Er zijn een paar verschillende manieren om dat te doen. Laten we twee voorbeelden bekijken.
Strings uitbreiden
De eerste methode is er een die je waarschijnlijk al kent, genaamd strings uitbreiden, of eenvoudigweg variabelen uitbreiden binnen bestaande strings. Dit is de meest gebruikelijke manier om de waarde van een variabele in een string weer te geven.
Hiervoor moet je de variabele binnenin een string plaatsen met dubbele aanhalingstekens. Enkele aanhalingstekens zullen niet werken omdat ze alle tekens letterlijk behandelen.
Bijvoorbeeld, misschien moet ik het pad naar een bestand specificeren. Ik ken het basismap pad maar nog niet de daadwerkelijke bestandsnaam. Ik kan een variabele genaamd $FullPath
maken en statisch het map pad invoeren, maar de bestandsnaam variabel maken.
Wat als je een objecteigenschap binnen een string moet specificeren? Dit ziet er een beetje anders uit. In dit geval moet ik de eigenschap tussen haakjes plaatsen en een dollarteken aan de voorkant toevoegen. Dit wordt een subexpressie-operator genoemd. Dit vertelt PowerShell om de waarde eerst uit te breiden.
Het uitbreiden van een string is zeer gebruikelijk, maar wat als je een string hebt die ingewikkelder is?
Het gebruik van de PowerShell String Format Operator
Nog een manier om ervoor te zorgen dat variabele waarden in uw strings worden ingevoegd, is via de format operator van Powershell (-f
).
Met de format operator hoeft u de variabele of de eigenschap niet in een string te plaatsen die is omgeven door dubbele aanhalingstekens. U kunt een string maken in enkele aanhalingstekens en de variabelen specificeren die in die string worden geplaatst buiten de string zoals hieronder wordt getoond.
Je kunt zien dat het exact hetzelfde effect heeft. Hoewel je deze keer geen dubbele aanhalingstekens hoefde te gebruiken of je zorgen hoefde te maken over het insluiten van de objecteigenschap tussen haakjes en nog een dollarteken. Het ziet er wat schoner uit, maar kan moeilijker te begrijpen zijn. Door de format operator te gebruiken, dwing je jezelf om de {0}
te vervangen door $File.Name
in je gedachten.
Om andere variabelen toe te voegen, hoef je alleen maar je labels met 1 te verhogen en doorgaan met het toevoegen van variabelen gescheiden door een komma aan de format-operator. Zolang de positie-index van de format-operator overeenkomt met de positie in het label van de string, kun je zoveel verwijzingen toevoegen als je wilt.
Wanneer de Format-operator te gebruiken
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.
Bijvoorbeeld, laten we zeggen dat je een opdrachtregelhulpprogramma moet uitvoeren dat vereist dat je een bestandsnaam eraan doorgeeft. Dit bestandspad kan spaties bevatten, dus je moet die referentie tussen dubbele aanhalingstekens plaatsen. Zonder die dubbele aanhalingstekens kan utility.exe het bestandsargument niet correct interpreteren.
Stel dat je dit nu in een PowerShell-script wilt doen. Als je gebruikmaakt van uitgebreide strings, ziet het er een beetje rommelig uit omdat je een backtick moet gebruiken om de dubbele aanhalingstekens te ontsnappen.
Laten we nu hetzelfde resultaat behalen met de format-operator.
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!
Samenvatting
De volgende keer dat je jezelf vindt variabelen te moeten vervangen binnen een string, denk dan na over welke methode het meest leesbaar zou zijn. Het zal je op de lange termijn tijd besparen.
Voor meer berichten over het werken met strings, zorg ervoor dat je The PowerShell Substring: Finding a string inside a string en PowerShell Variables in Strings bekijkt.
Source:
https://adamtheautomator.com/powershell-string-format/