Schreiben Sie mit PowerShell Set-Content in Dateien: Ein vollständiger Leitfaden

Set-Content ist eines dieser grundlegenden PowerShell-Cmdlets, auf die ich nicht verzichten kann. Ich erinnere mich noch an die Verwendung von VBscript, bevor wir PowerShell zum Schreiben in eine Datei verwenden konnten. Ich versuchte immer, mir zu merken, welche Art von Objekt ich verwenden musste und wie der Methodenname lautete. War es FileSystemObject, FileObject oder was? Es war nervig! Auch wenn ich mich an den Methodennamen CreateTextFile() erinnerte, vergaß ich immer, True als zweites Argument hinzuzufügen.

Hier ist ein Beispiel für das Monstrum, von dem ich spreche.

Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\file.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test string"
objFile.Close

Vergleichen Sie dieses VBScript mit diesem PowerShell:

Set-Content -Path 'C:\file.txt' -Value 'test string'

Welches bevorzugen Sie? Ich nehme den PowerShell-Weg! Der PowerShell-Weg verwendet ein einziges Cmdlet namens Set-Content. Dieses Cmdlet ermöglicht es uns, viel einfacher PowerShell zum Schreiben in eine Datei zu verwenden. Dieses PowerShell-Cmdlet ist ein eingebautes Cmdlet, das nur einen Zweck hat; in eine Datei schreiben.

Es kann hier und da einige Parameter haben, um dieses Verhalten ein wenig zu ändern, aber es konzentriert sich ausschließlich auf das Schreiben in eine Datei. Nicht zu verwechseln mit Add-Content, da sie ähnlich sind. Set-Content überschreibt die gesamte Datei, während Add-Content zu einer Datei hinzufügt. Das habe ich auf die harte Tour mehrmals gelernt, als ich anfing!

Eine Datei erstellen/überschreiben

Das Cmdlet Set-Content ist ziemlich einfach. Unten ist ein gutes Beispiel. Dieses Beispiel zeigt, dass Set-Content sowohl eine Datei erstellen kann, wenn sie nicht existiert, als auch alle Inhalte in einer bereits vorhandenen Datei ersetzen kann.

PS> Test-Path -Path C:\test.txt
False
PS> Set-Content -Path C:\test.txt -Value 'foo'
PS> Get-Content -Path C:\test.txt
foo
PS> Set-Content -Path C:\test.txt -Value 'bar'
PS> Get-Content -Path C:\test.txt
bar

Ausgabe in eine Datei

Einer der Cmdlets, die eine Ausgabe in eine Datei schreiben können, ist Out-File, aber Set-Content kann dieselbe Aufgabe auf eine etwas andere Weise erledigen.

Vielleicht möchten Sie bestimmte Textabschnitte aus einer Textdatei extrahieren und die Zeilen in eine andere Datei ausgeben. Durch die Verwendung von Get-Content und Set-Content können Sie dies erreichen. Vielleicht habe ich eine Textdatei mit einem Server und seinem Status pro Zeile. Ich möchte den Status jedes Servers lesen und ihn in eine Datei ausgeben. Mit Get-Content zum Lesen der Datei und Set-Content zum Schreiben in die Datei ist dies möglich.

PS> Get-Content -Path C:\test.txt
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up
PS> Get-Content -Path C:\test.txt | ForEach-Object {
>>> $srvName = $_.Split(' ')[0]
>>> Set-Content -Path "C:\$srvName.txt" -Value $_
}
PS> Get-ChildItem -Filter 'SRV*'
Directory: C:\
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/29/2017  12:38 PM             17 SRV1.txt
-a----       10/29/2017  12:38 PM             19 SRv2.txt
-a----       10/29/2017  12:38 PM             17 SRV3.txt

PS> Get-ChildItem -Filter 'SRV*' | Get-Content
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up

Set-Content ist eines dieser grundlegenden Cmdlets, das ständig verwendet wird. Es ist nicht schick, funktioniert aber jedes Mal und sollte in Ihrem PowerShell-Werkzeugkasten nicht fehlen.

Für eine vollständige Erklärung werfen Sie einen Blick auf die Set-Content Microsoft-Dokumentation.

Source:
https://adamtheautomator.com/powershell-write-to-file/