itchley
Goto Top

Von einer Variable bei Ausgabe in Datei Zeilenumbrüche behalten

Moin zusammen,

ich habe erst vor kurzem mit PS angefangen und habe u.a. folgendes zusammengebastelt (vermutlich vollkommen umständlich, aber es funktioniert bis auf eine Kleinigkeit)
do{ ## __________________________ Switche auslesen
$WalkIP = "$Netzbereich$Start"  
cls
write-output $WalkIP
$BeginnSwitch = "Beginn $LfdNr. Switch"  
$EndeSwitch = "Ende $LfdNr. Switch"  
$SwitchIP_Typ = (get-content C:\Itchley\Switchtyp.txt -TotalCount $LfdNr)[-1]
"$BeginnSwitch" | out-file C:\Itchley\Switchbelegung.txt -append  
"$SwitchIP_Typ" | Out-File C:\Itchley\Switchbelegung.txt -append  
&$Walk -r:$Netzbereich$Start -v:2c -c:$WalkCommunity -os:$Walk_Ports -op:$Walk_PortsE -t:1 -csv | out-file C:\Itchley\temp.txt
$Temp = Get-Content C:\Itchley\temp.txt
$Temp = $Temp.replace(".1.3.6.1.2.1.17.7.1.2.2.1.2.1.","");$Temp.replace(",Integer,",";")  
Remove-Item C:\Itchley\temp.txt
"$Temp" | out-file C:\Itchley\Switchbelegung.txt -append  
"$EndeSwitch" | Out-File C:\Itchley\Switchbelegung.txt -append  
Remove-Variable -Name Temp
Remove-Variable -Name SwitchIP_Typ
$Start = $Start + 1
$LfdNr = $LfdNr + 1
}until($Ende -lt $Start) ## __________________ Switche auslesen

Stelle ich es einzeln in der PS nach (inkl. Variablen) und lasse mir den Inhalt der Variable $Temp vor der Ausgabe mit Out-File in der Console anzeigen, sehe ich eine Variable mit viele Zeilen, diese sind auch gewollt nur leider kommt in der Datei der Inhalt dieser Variable nur in einer Zeile an.
Wie behalte ich die Zeilenumbrüche bei der Ausgabe.

Danke im Voraus

Gruß
Itchley

Content-ID: 7657828956

Url: https://administrator.de/forum/von-einer-variable-bei-ausgabe-in-datei-zeilenumbrueche-behalten-7657828956.html

Ausgedruckt am: 06.04.2025 um 18:04 Uhr

7426148943
Lösung 7426148943 27.06.2023 aktualisiert um 08:18:16 Uhr
Goto Top
ich habe erst vor kurzem mit PS angefangen
Man sieht es, vieeerel zu umständlich alles 😉.

Stelle ich es einzeln in der PS nach (inkl. Variablen) und lasse mir den Inhalt der Variable $Temp vor der Ausgabe mit Out-File in der Console anzeigen, sehe ich eine Variable mit viele Zeilen, diese sind auch gewollt nur leider kommt in der Datei der Inhalt dieser Variable nur in einer Zeile an.
Wie behalte ich die Zeilenumbrüche bei der Ausgabe.
Der Grund dafür ist das du mit Get-Content ein Zeilenarray geliefert bekommst, also ein Array aus Strings.
Du packst nun oben die Array-Variable in Anführungszeichen was bedeutet, dass PowerShell das Array irgendwie in einem String zusammenfassen muss. Hierfür hat es per Default als Join String das Leerzeichen (kann man anpassen indem man die $OFS Variable festlegt). Deswegen sind die Zeilenumbrüche weg.
Damit das nicht passiert lass einfach die Anführungszeichen um die Variable weg die sind hier unnötig und das Array wird automatisch durch Zeilenumbruch getrennt in die Datei geschrieben.
$Temp | out-file C:\Itchley\Switchbelegung.txt -append
Wenn man mit Get-Content kein Array möchte oder braucht kann man dort den Parameter -Raw anhängen dann wird es ein reiner String.
$Temp = Get-Content C:\Itchley\temp.txt -Raw
Wenn man Arrays innerhalb von Strings auflösen will kann man das auch als weitere Methode mittels -join Operator tun
"$($Temp -join "`r`n")"  
Wie die PowerShell Arrays per Default in Strings auflöst lässt sich wie oben bereits angemerkt mit der speziellen Variable $OFS (Output Field Seperator) festlegen, per Default ist das ein Leerzeichen, hiermit wird es ein Zeilenumbruch
$OFS = "`r`n"  
Du siehst es gibt jede Menge Möglichkeiten das zu erreichen.

Zeppel
Itchley
Itchley 27.06.2023 um 18:15:53 Uhr
Goto Top
@7426148943

Besten Dank für die Hilfe und super Erklärung.
Funktioniert wie gewollt

Je länger ich mit PS hantiere, desto weniger umständlich wird es hoffentlich auch irgendwann...Learning by burning

Gruß
Itchley