Scrivere su File con PowerShell Set-Content: Una Guida Completa

Set-Content è uno di quei cmdlet di base di PowerShell che non posso fare a meno. Ricordo ancora di usare VBscript prima che potessimo usare PowerShell per scrivere su un file. Ricordo di cercare sempre di ricordare quale tipo di oggetto dovevo usare e il nome del metodo. Era FileSystemObject, FileObject o altro? Era un incubo! Anche quando ricordavo che il nome del metodo era CreateTextFile(), dimenticavo sempre di aggiungere True come secondo argomento.

Ecco un esempio di quel mostro di cui sto parlando.

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

Confronta quello script VBScript con questo PowerShell:

Set-Content -Path 'C:\file.txt' -Value 'testo di prova'

Quale preferisci? Io scelgo il modo PowerShell! Il modo PowerShell utilizza un singolo cmdlet chiamato Set-content. Questo cmdlet ci permette di scrivere su un file in modo molto più facile utilizzando PowerShell. Questo cmdlet di PowerShell è un cmdlet integrato che ha un solo scopo; scrivere su un file.

Può avere alcuni parametri qui e là per modificare un po’ quel comportamento, ma è focalizzato esclusivamente sulla scrittura su un file. Non confonderlo però con Add-Content, poiché sono simili. Set-Content sovrascrive l’intero file mentre Add-Content aggiunge a un file. Ho imparato questa cosa a modo mio molte volte quando ho iniziato per la prima volta!

Creazione di un file/sovra-scrittura di un file

Il cmdlet Set-Content è abbastanza semplice. Di seguito è riportato un buon esempio. Questo esempio mostra che Set-Content può creare un file se non esiste o può sostituire tutti i contenuti all’interno di un file preesistente.

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 su un file

Un cmdlet che può generare un output su un file è Out-File, ma Set-Content può svolgere la stessa attività, sebbene in modo leggermente diverso.

Forse ti piacerebbe estrarre specifiche parti di testo da un file di testo e inviare le righe su un altro file. Utilizzando Get-Content e Set-Content, puoi farlo. Magari ho un file di testo con un server e il suo stato per riga. Vorrei leggere lo stato di ogni server e inviarlo su un file. Utilizzando Get-Content per leggere il file e Set-Content per scriverci, è possibile.

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 è uno di quei cmdlet di base che viene utilizzato costantemente. Non è sofisticato, ma funziona sempre ed è uno strumento che dovresti avere nel tuo kit di strumenti PowerShell.

Per una panoramica completa, consulta la documentazione di Microsoft su Set-Content.

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