Schrijven naar bestanden met PowerShell Set-Content: Een volledige handleiding

Set-Content is een van die essentiële PowerShell cmdlets waar ik niet zonder kan. Ik herinner me nog dat ik VBscript gebruikte voordat we PowerShell konden gebruiken om naar een bestand te schrijven. Ik probeerde altijd te onthouden welk soort object ik moest gebruiken en de naam van de methode. Was het FileSystemObject, FileObject of wat? Het was een gedoe! Zelfs toen ik me de naam van de methode herinnerde, CreateTextFile(), vergat ik altijd True als het tweede argument toe te voegen.

Hier is een voorbeeld van het monster waar ik het over heb.

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

Vergelijk dat VBScript met deze PowerShell:

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

Welke heeft je voorkeur? Ik kies de PowerShell manier! De PowerShell manier maakt gebruik van een enkele cmdlet genaamd Set-content. Deze cmdlet stelt ons in staat om veel gemakkelijker PowerShell te gebruiken om naar een bestand te schrijven. Deze PowerShell cmdlet is een ingebouwde cmdlet met één doel; schrijven naar een bestand.

Het kan hier en daar wat parameters hebben om dat gedrag een beetje te veranderen, maar het is uitsluitend gericht op het schrijven naar een bestand. Niet te verwarren met Add-Content, omdat ze vergelijkbaar zijn. Set-Content overschrijft het hele bestand, terwijl Add-Content toevoegt aan een bestand. Dat heb ik op de harde manier meerdere keren geleerd toen ik net begon!

Creëren van een bestand/overschrijven van een bestand

De Set-Content cmdlet is vrij eenvoudig. Hieronder is een goed voorbeeld. Dit voorbeeld laat zien dat Set-Content zowel een bestand kan creëren als het niet bestaat, of het kan alle inhoud in een bestaand bestand vervangen.

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

Output naar een bestand

Een cmdlet die naar een bestand kan uitvoeren, is Out-File, maar Set-Content kan dezelfde taak uitvoeren zij het een beetje anders.

Misschien wilt u specifieke stukken tekst uit één tekstbestand halen en regels naar een ander bestand uitvoeren. Door Get-Content en Set-Content te gebruiken, kunt u dit laten gebeuren. Misschien heb ik een tekstbestand met één server en hun status per regel. Ik wil de status van elke server lezen en die naar een bestand uitvoeren. Met Get-Content om het bestand te lezen en Set-Content om naar het bestand te schrijven, is dit mogelijk.

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 is een van die kern-cmdlets die constant worden gebruikt. Het is niet fancy maar werkt elke keer en is er een die u in uw PowerShell-arsenaal moet hebben.

Voor een volledige uitleg, bekijk de Set-Content Microsoft-documentatie.

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