Here-String in PowerShell: Bedeutung und Verwendung

Ein klassischer String wird in Hochkomma oder Anführungszeichen definiert. Gibt es aber viele Sonderzeichen, oder Anführungszeichen im Inhalt, so kann man in Powershell einen Here-String verwenden. Vor allem beim Ausführen von .NET Code wird der Code in einem solchen String angegeben, da man sich keine Gedanken um Sonderzeichen und Formatierungen machen muss.

Was ist ein Here-String in PowerShell?

Um einen kompletten Code-Block oder einen String mit Sonderzeichen und Absätzen zu definieren, wird in PowerShell ein Here-String verwendet. Somit kann man komplexe Inhalte einfach angeben. Formatierungen, Sonderzeichen und Absätze spielen somit keine Rolle.

Wie wird ein Here-String verwendet?

Ein Here-String wird wie ein normaler String verwendet, allerdings am Anfang und am Ende mit einem @-Zeichen. In PowerShell sieht ein Here-String dann folgendermaßen aus:

$meinHS = @"

Das ist 
der Inhalt 
meines Here-Strings!

Sonderzeichen " ' ³ § sind kein Problem! 😉

"@

Somit kann man komplexe Inhalte einer Variable zuweisen, ohne auf Anführungszeichen oder Ähnlichem achten zu müssen. In PowerShell wird ein Here-String gerne zum Ausführen, beziehungsweise definieren von Dot-Net-Code verwendet. Mehr dazu aber im Beispiel.

Here-String in PowerShell

.NET Code definieren

In einem PowerShell Script lässt sich ohne Probleme .Net Code ausführen. Wie oben bereits genannt, wird in der Regel der gewünschte Code in einem Here-String definiert, damit man sich keine Gedanken über Sonderzeichen machen zu müssen. Ein Beispiel ist folgendes:

$code = @'
    [DllImport("user32.dll")]
    public static extern bool BlockInput(bool fBlockIt);
'@

Dieser Teil wird zum Blockieren der Benutzereingabe in einem PowerShell Script benötigt. Die Syntax von vb.net oder C# ist anders als die PowerShell Syntax.

Here-String statt Array

Ein weiteres Beispiel ist das Definieren von Sonderzeichen in einem Here-String anstatt in einem Array: https://www.reddit.com/r/PowerShell/comments/nc04b2/array_of_special_characters_in_powershell/

Anführungszeichen oder Hochkomma verwenden?

Im ersten Satz des Beitrags haben wir einen Beitrag verlinkt, der den Unterschied zwischen Anführungszeichen und Hochkomma erklärt. Auch bei einem Here String ist das so. Eine Variable wird aufgelöst wenn sie in Anführungszeichen angegeben wird. Wird ein Literal Here-String verwendet, also mit Hochkomma, wird die Variable nicht aufgelöst.

$myName = "Joe"

$code1 = @"
My name is $myname
"@

$code2 = @'
My name is $myname
'@

Als Ausgabe erhält man das altbekannte Ergebnis: Mit Anführungszeichen wird die Variable aufgelöst, mit Hochkomma nicht.

literal here string

Möchte man also in einem PowerShell Code fremden (Syntaxfremden) Code ausführen, so sollte man den Here String mit Hochkomma definieren, damit der Inhalt nicht verfälscht wird. In machen Situationen mag es aber bestimmt Notwendig sein klassische Anführungszeichen zu benutzen.

Johannes
 

sidebar
>