In PowerShell ist es sehr einfach mit Boardmitteln Dateien im *.txt, *.csv oder sonst einem Format zu erstellen. Um die Datei in einem Script zu laden wird lediglich der Befehl Get-Content benötigt. Anschließend kann der Inhalt spielend in einer Foreach Schleife behandelt werden. Ebenso ist es sehr einfach in eine Datei zuschreiben oder eine neue Datei zu erstellen. Ich nutze die Schreibfunktion gerne für Logs.
Im Inputfile befinden sich mehrereDatensätze die ausgewertet werden sollen.
Mit Get-Content laden wir das Textfile, mit der Funktion Split() können wir die Daten trennen und weiterverarbeiten. In der Datei sind alle Informationen mit einen | getrennt. Wir wollen aus den Teilstücken den Satz bilden ‚Name‘ ist geboren in ‚Ort‘, ‚Land‘.
Codebeispiele
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#Variante 1 #Pfad zur txt Datei $path = "D:\Input\inputfile.txt" #Inputfile laden $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split("|") $Name = $Inhalttrennen[0] $Ort = $Inhalttrennen[1] $Land = $Inhalttrennen[2] $Ausgabe = "$($Name) ist geboren in $($Ort),$($Land)." $Ausgabe } #Ausgabe #stefan Rehwald ist geboren in Leipzig,Deutschland #Dennis MacAlistair Ritchie ist geboren in Bronxville, New York,USA #Variante 2 #Pfad zur txt Datei $path = #Inputfile laden $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split("|") $Ausgabe = "$($Inhalttrennen[0]) ist geboren in $($Inhalttrennen[1]),$($Inhalttrennen[2])." $Ausgabe } #Variante 3 #Inputfile laden $input = Get-Content "D:\Input\inputfile.txt" foreach ($temp in $input) { $Inhalttrennen = $temp.Split("|") $Name = $Inhalttrennen[0] $Ort = $Inhalttrennen[1] $Land = $Inhalttrennen[2] $Ausgabe = "$($Name) ist geboren in $($Ort),$($Land)." $Ausgabe } |
Nun sollen diese Sätze wieder in eine Text Datei eingefügt werden. Dies wird mittels Out-File realisiert. Es muss der Zielpfad der Textdatei angeben werden, existiert diese Datei noch nicht, so wird sie angelegt. Existiert die Textdatei bereits, so wird sie überschrieben! Der Pfad wird wie folgt durch den Parameter -FilePath angehangen. Wenn man nun mehrere Daten in das selbe Textfile schreiben möchte, muss man den Parameter -Append hinter -FilePath hängen. Append besagt, dass das File Weiter beschreiben und nicht überschrieben wird.
Codebeispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#Variante 1 #Pfad zur txt Datei $path = "D:\Input\inputfile.txt" $Ausgabepfad = "D:\Input\outputfile.txt" #Inputfile Lade $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split("|") $Name = $Inhalttrennen[0] $Ort = $Inhalttrennen[1] $Land = $Inhalttrennen[2] $Ausgabe = "$($Name) ist geboren in $($Ort),$($Land)." | Out-File -FilePath $Ausgabepfad } |
In Variante 1 hat das Outputfile ohne den Parameter -Append erstellt. Die Folge ist das nur der letzte bearbeitete Datensatz in Outputfile zusehen ist, da alle vorherigen immer wieder überschrieben wurden.
Nun das ganze mit dem Parameter Append.
Codebeispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#Variante 2 #Pfad zur txt Datei $path = "D:\Input\inputfile.txt" $Ausgabepfad = "D:\Input\outputfile.txt" #Inputfile Lade $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split("|") $Name = $Inhalttrennen[0] $Ort = $Inhalttrennen[1] $Land = $Inhalttrennen[2] $Ausgabe = "$($Name) ist geboren in $($Ort),$($Land)." | Out-File -FilePath $Ausgabepfad -Append } |
In Variante 2 ist deutlich zu sehen, das die Datei fortlaufend beschrieben wurde, sogar der Eintrag aus Variante 1 ist noch beinhaltet.
rewe
Hallo,
ich möchte gerne, dass alle Sätze in ein separates Files geschrieben werden, Das File solle den namen der jeweiligen Ortschaft haben.
Wie kann ich hier vorgehen?
Hallo,
ich bin relativ neu in der Thematik und habe von daher wenige Grundkenntnisse. Bisher wurden bei uns in der Firma die Anzahl der User in der AD immer per VBS ausgelesen. Dies soll nun auf PowerShell umgestellt werden und ich soll mal schauen ob ich es hin bekomme. Eigentlich sollte ich auch schon auf einer PowerShell Schulung gewesen sein, aber das ganze hat sich hinausgeschoben wegen Corona,…
Ich haben durch entsprechende Recherche und Testen auch so weit gebracht, das die User in einer bestimmten OU ausgelesen werden. Hierbei bekomme ich einmal eine Datei mit den ganzen Usern gelistet und eine weitere Datei, wo nur die Anzahl der User steht.
Dies bekomme ich pro OU, welche ich auslesen. Jetzt soll aber in nur einer Datei, die Anzahl der User stehen. Klappt soweit auch, aber eben nur die Zahl. Wie bekomme ich es hin, dass vor der Zahl noch folgendes steht:
User in Hamburg: 200
User in Bremen: 100
User in Nürnberg: 120
User in Frankfurt: 150
User in München: 999
Vielen Dank im Voraus
Gruß Patrick
Z.B. wie folgt:
$usercounthh = 200
write-host „User in Hamburg $($usercounthh)“
oder
$string = „User in Hamburg {0}“ -f $usercounthh # -f steht für Format
write-host $string
————————————————————————-
User in Hamburg 200
User in Hamburg 200
Sei gegrüßt!
Eigentlich dachte ich, dass Deine Beiträge mein Grundlagenverständniss soweit angehoben hätten, dass ich problemfrei eine einfache Abfrage gestalten und umsetzen könnte.
Leider ein Irrtum oder einfach nur der „böse Tunnelblick“!?
Folgendes Skript gibt ab Zeile 71 nicht mehr das erwartete Ergebniss zurück, sondern schreibt nur den Pfad der Variablen $a in $b.
Könntest du ermitteln, woran das liegt?
Danke im Vorraus und
mit freundlichen Grüßen
A. Raue – Leipzig (Plagwitz)
Zum Script (als HTML zum rauskopieren): http://alph-raue.de/uemmsen/Boardsachen/ping.ps1
Hi,
kurz und knapp würde ich sagen es fehlt das -Append 🙂
$a | out-file $b -Append
und zack werden alle Daten fortlaufend in dein Log geschrieben.
Viele Grüße
rewe