Der String-Typ ist wahrscheinlich die beliebteste Variable in PowerShell. Ich glaube, ich habe noch nie ein Skript geschrieben, das nicht zumindest einen String enthält. Strings eignen sich hervorragend, um eine einfache Gruppe von Zeichen wie einen Computernamen, einen Pfad zu einer Textdatei, einen Registrierungsschlüsselpfad, eine URL und so weiter zu definieren. Durch das Erweitern von Variablen innerhalb von Strings und die Verwendung der Formatierungsfähigkeiten von PowerShell für Strings können Sie praktisch alles tun.
Strings werden definiert, indem man ein oder mehrere Zeichen in einfache oder doppelte Anführungszeichen einschließt, wie zum Beispiel:
Das Definieren von Strings auf diese Weise ist unkompliziert, aber bald werden Sie feststellen, dass Sie den Wert einer Variable innerhalb von Strings abrufen müssen.
Zum Beispiel haben Sie vielleicht ein Skript mit einem ComputerName
-Parameter, und in Ihrem Skript müssen Sie einen Standardpräfix damit verknüpfen, wie zum Beispiel SRV-, wie unten gezeigt.
Der Wert der Variable $ComputerName
ist nun SRV-URANUS, aber das Einfügen von $ComputerName
in den String mit doppelten Anführungszeichen ist nur eine Möglichkeit, Variablen in Strings einzufügen. Es gibt einige verschiedene Möglichkeiten, dies zu erreichen. Schauen wir uns zwei Beispiele an.
Strings erweitern
Die erste Methode ist wahrscheinlich bereits bekannt und wird als Erweitern von Strings bezeichnet, oder einfach als Erweitern von Variablen innerhalb von vorhandenen Strings. Dies ist die häufigste Methode, um den Wert einer Variable in einem String anzuzeigen.
Dies erfordert das Platzieren der Variable innerhalb eines Strings mit doppelten Anführungszeichen. Einfache Anführungszeichen funktionieren nicht, weil sie alle Zeichen wörtlich behandeln.
Zum Beispiel muss ich möglicherweise den Pfad zu einer Datei angeben. Ich kenne den Basisordnerpfad, aber noch nicht den tatsächlichen Dateinamen. Ich könnte eine Variable namens $FullPath
erstellen und den Ordnerpfad statisch eingeben, den Dateinamen jedoch als Variable belassen.
Was ist, wenn Sie eine Objekteigenschaft innerhalb eines Strings angeben müssen? Das sieht ein wenig anders aus. In diesem Fall muss ich die Eigenschaft in Klammern einschließen und ein Dollarzeichen davor setzen. Dies wird als Subausdrucksoperator bezeichnet. Dies teilt PowerShell mit, den Wert zuerst zu erweitern.
Das Erweitern von Zeichenfolgen ist sehr verbreitet, aber was ist, wenn Sie eine kompliziertere Zeichenfolge haben?
Verwenden des PowerShell-Zeichenfolgenformatoperators
Eine weitere Möglichkeit, sicherzustellen, dass Variablenwerte in Ihre Zeichenfolgen eingefügt werden, besteht darin, den Formatoperator von Powershell (-f
) zu verwenden.
Bei Verwendung des Formatoperators müssen Sie die Variable oder die Eigenschaft nicht innerhalb einer Zeichenfolge in doppelten Anführungszeichen platzieren. Sie können eine Zeichenfolge in einfachen Anführungszeichen erstellen und die Variablen außerhalb der Zeichenfolge angeben, wie unten gezeigt.
Sie können sehen, dass dies genau denselben Effekt hat. Diesmal mussten Sie jedoch keine doppelten Anführungszeichen verwenden oder sich Gedanken darüber machen, die Objekteigenschaft in Klammern und ein weiteres Dollarzeichen einzuschließen. Es sieht ein wenig sauberer aus, aber könnte schwerer zu verstehen sein. Die Verwendung des Formatoperators zwingt Sie dazu, {0}
in Ihrem Kopf durch $File.Name
zu ersetzen.
Um andere Variablen hinzuzufügen, erhöhen Sie einfach Ihre Labels um 1 und fahren Sie fort, Variablen durch Kommas getrennt dem Formatoperator hinzuzufügen. Solange die Indexposition des Formatoperators mit der Position im String-Label übereinstimmt, können Sie so viele Verweise hinzufügen, wie Sie möchten.
Wann sollte der Formatoperator verwendet werden?
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.
Zum Beispiel, nehmen wir an, Sie müssen ein Befehlszeilen-Dienstprogramm ausführen, das erfordert, dass Sie ihm einen Dateinamen übergeben. Dieser Dateipfad kann Leerzeichen enthalten, sodass Sie diesen Verweis mit doppelten Anführungszeichen umschließen müssen. Ohne diese doppelten Anführungszeichen könnte utility.exe das Dateiargument nicht korrekt interpretieren.
Angenommen, Sie möchten dies nun in einem PowerShell-Skript tun. Wenn Sie erweiterbare Zeichenfolgen verwenden, sieht es ein wenig unordentlich aus, weil Sie ein Backtick verwenden müssen, um die doppelten Anführungszeichen zu escapen.
Jetzt, lassen Sie uns das gleiche Ergebnis mit dem Formatoperator erzielen.
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!
Zusammenfassung
Das nächste Mal, wenn Sie sich befinden, Variablen innerhalb einer Zeichenfolge zu ersetzen, überlegen Sie, welche Methode am lesbarsten wäre. Das wird Ihnen auf lange Sicht Zeit sparen.
Für weitere Beiträge zum Arbeiten mit Zeichenfolgen sollten Sie den PowerShell-Teilstring: Das Finden einer Zeichenfolge in einer Zeichenfolge und PowerShell-Variablen in Zeichenfolgen überprüfen.
Source:
https://adamtheautomator.com/powershell-string-format/