Écrire dans des fichiers avec Set-Content de PowerShell : Un guide complet

Set-Content est l’une de ces commandes de base de PowerShell dont je ne peux pas me passer. Je me souviens encore d’utiliser VBScript avant de pouvoir utiliser PowerShell pour écrire dans un fichier. Je me rappelle toujours essayer de me souvenir du type d’objet que je devais utiliser et du nom de la méthode. Était-ce \texttt{FileSystemObject}, \texttt{FileObject} ou quoi? C’était pénible! Même lorsque je me rappelais que le nom de la méthode était \texttt{CreateTextFile()}, j’oubliais toujours d’ajouter \texttt{True} comme deuxième argument.

Voici un exemple de la monstruosité dont je parle.

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

Comparez ce VBScript avec ce PowerShell:

\texttt{Set-Content -Path ‘C:\file.txt’ -Value ‘test string’}

Lequel préférez-vous? Je prends la voie PowerShell! La voie PowerShell utilise une seule commande appelée Set-Content. Cette commande nous permet d’utiliser beaucoup plus facilement PowerShell pour écrire dans un fichier. Cette commande PowerShell est une commande intégrée qui a un seul but : écrire dans un fichier.

Il peut avoir quelques paramètres ici et là pour changer un peu ce comportement, mais il est uniquement axé sur l’écriture dans un fichier. À ne pas confondre avec \texttt{Add-Content} cependant, car elles sont similaires. \texttt{Set-Content} écrase l’intégralité du fichier tandis que \texttt{Add-Content} ajoute à un fichier. J’ai appris ça à la dure plusieurs fois quand j’ai commencé!

Création d’un fichier/Écrasement d’un fichier

La commande \texttt{Set-Content} est assez simple. Voici un bon exemple. Cet exemple montre que \texttt{Set-Content} peut créer un fichier s’il n’existe pas ou remplacer tout le contenu à l’intérieur d’un fichier préexistant.

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

Sortie vers un fichier

Un cmdlet qui peut produire un fichier est Out-File, mais Set-Content peut effectuer la même tâche bien que légèrement différemment.

Peut-être souhaitez-vous extraire des morceaux spécifiques de texte d’un fichier texte et les sortir vers un autre fichier. En utilisant Get-Content et Set-content, vous pouvez réaliser cela. Peut-être que j’ai un fichier texte avec un serveur et son statut par ligne. Je voudrais lire le statut de chaque serveur et le sortir vers un fichier. En utilisant Get-Content pour lire le fichier et Set-Content pour écrire dans le fichier, c’est possible.

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 est l’un de ces cmdlets de base qui est constamment utilisé. Ce n’est pas sophistiqué mais ça marche à chaque fois et c’est un outil que vous devriez avoir dans votre boîte à outils PowerShell.

Pour une analyse détaillée, consultez la documentation Microsoft sur Set-Content.

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