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

Set-Content é um daqueles cmdlets principais do PowerShell que não consigo ficar sem. Ainda me lembro de usar VBscript antes de podermos usar o PowerShell para escrever em um arquivo. Lembro-me sempre tentando 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(), sempre esquecia de adicionar True como segundo argumento.

Aqui está um exemplo da monstruosidade sobre a 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 'string de teste'

Qual você prefere? Eu fico com o método do PowerShell! O método 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 que tem um único propósito; escrever em um arquivo.

Pode ter alguns parâmetros aqui e ali para mudar um pouco esse comportamento, mas está focado exclusivamente em escrever em um arquivo. Não deve ser confundido com Add-Content, embora sejam semelhantes. Set-Content sobrescreve o arquivo inteiro 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 tanto criar um arquivo se ele não existir quanto substituir todo o conteúdo dentro de um arquivo preexistente.

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

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

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