derhoeppi
Goto Top

Powershell formatierte Ausgabe mit einem Here-String

Hallo,

ich sitze gerade an einem kosmetischen Problem. Ich generiere eine Ausgabe für das Eventlog. Dazu lege ich einen Here-String an, der als Message in Write-Eventlog mitgegeben wird. Das funktioniert soweit auch ganz gut, aber ich habe einige Zeile die keinen Sinn ergeben, weil die hinterlegten Variablen nicht befüllt werden.
Aus diesem Grund habe ich die Frage, ob mir jemand einen Tipp geben kann, wie ich im Here-String mit If-Bedingungen arbeiten kann. Damit könnte ich ganze Blöcke ausblenden, so dass im Eventlog nur die wichtigen Informationen landen.

Gruß
derhoeppi

Content-ID: 400578

Url: https://administrator.de/contentid/400578

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

138721
Lösung 138721 06.02.2019 aktualisiert um 07:52:47 Uhr
Goto Top
Wie immer halt...
$var = 'das ist ein Test'  
@"  
Hallo
derhoeppi
$(if($var -match 'Test'){$var})  
"@  
derhoeppi
derhoeppi 06.02.2019 um 08:05:15 Uhr
Goto Top
Vielen Dank. Ich sehe meinen Fehler. Ich habe es bisher nur mit dem reinen if-statement versucht. Dieses hat er mir natürlich als String ausgegeben. Ich muss also noch das $() verwenden.
derhoeppi
derhoeppi 06.02.2019 um 10:45:06 Uhr
Goto Top
Eine kleine Frage hätte ich noch. Wenn ich nun mit mehreren If-Statements arbeite, deren Ausgang negativ ist, erhalte ich nun relativ viele Leerzeilen. Gibt es eine Möglichkeit, die Leerzeilen die durch das nicht Zutreffen des If-Statements entstehen zu löschen? Problem ist, dass ich an bestimmten Stellen Leerzeilen für die bessere Lesbarkeit einfüge.
138721
138721 06.02.2019 aktualisiert um 10:54:59 Uhr
Goto Top
Kann man indem man die Zeilenumbrüche in die Varianlen packt und die Variablen hintereinander ohne Zeilenumbruch im Heredoc einfügt, Ich würde nur mit Variablen im Heredoc arbeiten und das mit den vermischten If Abfragen darin vergessen.
Ansonsten den finalen String dynamisch zusammensetzen, je nachdem ob Variable gewünscht oder nicht.
derhoeppi
derhoeppi 06.02.2019 um 11:09:37 Uhr
Goto Top
Im eigentlichen möchte ich deinen letzten Punkt erreichen in dem ich den String dynamisch zusammensetze. Aus diesem Grund bin ich auf die If-Statements gekommen, weil ich vorab eine Bedingung prüfen kann. Wenn diese nicht zutrifft soll die Ausgabe für eine Variable ignoriert werden.
Wenn ich Dich richtig verstehe, würdest du also vorher Variable anlegen. Diese Variablen werden vor der Erstellung des Here-Strings mit Variablen aus den IF-Statements gefüllt. Wobei eine Zielvariable im Here-String mehrere Strings aus verschiedenen Variablen enthalten kann.
138721
138721 06.02.2019 aktualisiert um 11:20:45 Uhr
Goto Top
Machst dir eine Array Variable.
Und dann in den if Statements den Inhalt der Variable der Array-Variablen hinzufügen
$a = @()
If ($blablub -eq 'blablub'){  
    $a += $var
}
Am Ende hast du dann $a in der alles drin steht. Feddich.
derhoeppi
derhoeppi 06.02.2019 um 11:22:28 Uhr
Goto Top
Okay soweit habe ich Dich verstanden. Würdest du in $a auch Leerzeilen also leere Elemente ($a += " ") hinzufügen?
138721
138721 06.02.2019 aktualisiert um 11:27:23 Uhr
Goto Top
Kannst du machen wie du willst. Jedes Hinzufügen zum Array erzeugt eine neue Zeile, wenn du es später als String ausgibst, außer du joinst die Elemente mit anderem Delimiter.
Sowas hier geht auch
$a += "`r`n`r`n"  

Um z.B. mehrere Umbrüche in einen Arrayeintrag zu packen.