Escrever em Arquivos com Set-Content no PowerShell: Um Guia Completo

Set-Content é um daqueles cmdlets essenciais do PowerShell que eu não posso ficar sem. Ainda me lembro de usar VBscript antes de podermos usar o PowerShell para escrever em um arquivo. Eu sempre tentava lembrar que tipo de objeto eu precisava usar e o nome do método. Era FileSystemObject, FileObject ou o quê? Era uma dor de cabeça! Mesmo quando lembrava que o nome do método era CreateTextFile(), eu sempre esquecia de adicionar True como segundo argumento.

Aqui está um exemplo da monstruosidade da qual estou falando.

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

Compare esse VBScript com este PowerShell:

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

Qual você prefere? Eu escolho o caminho do PowerShell! O caminho do PowerShell usa um único cmdlet chamado Set-content. Este cmdlet nos permite muito mais facilmente usar o PowerShell para escrever em um arquivo. Este cmdlet do PowerShell é um cmdlet integrado com um único propósito; escrever em um arquivo.

Pode ter alguns parâmetros aqui e ali para modificar esse comportamento um pouco, mas ele está focado exclusivamente em escrever em um arquivo. Não confunda com Add-Content, no entanto, pois são semelhantes. Set-Content sobrescreve todo o arquivo, enquanto Add-Content adiciona a um arquivo. Aprendi isso da maneira difícil várias vezes quando comecei!

Criando um Arquivo/Sobrescrevendo um Arquivo

O cmdlet Set-Content é bastante simples. Abaixo está um bom exemplo. Este exemplo mostra que Set-Content pode criar um arquivo se ele não existir ou substituir todo o conteúdo dentro de um arquivo existente.

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

Saída para um Arquivo

Um cmdlet que pode enviar a saída para um arquivo é Out-File, mas Set-Content pode realizar a mesma tarefa, embora de maneira um pouco diferente.

Talvez você queira extrair partes específicas de um arquivo de texto e enviar linhas para outro arquivo. Usando Get-Content e Set-Content, você pode fazer isso acontecer. Talvez eu tenha um arquivo de texto com um servidor e seu status por linha. Gostaria de ler o status de cada servidor e enviar isso para um arquivo. Usando Get-Content para ler o arquivo e Set-Content para escrever no arquivo, é possível.

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 é um daqueles cmdlets principais que são constantemente utilizados. Não é sofisticado, mas funciona sempre e é algo que você deve ter em seu arsenal de truques do PowerShell.

Para uma análise completa, confira a documentação da Microsoft sobre Set-Content.

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