Write-Host ou Write-Output

Galera!

Atualmente venho revisitando alguns scripts em ambientes legado e estou encontrando muita confusão entre o Write-Host e o Write-Output.
Vamos simplificar …
O CmdLet Write-Host tem a finalidade de retornar algo para interagir com o usuário final.
Já o Write-Output serve para ser embarcado em scripts e não interagir com o usuário.
Em outras palavras, o Write-Host direciona o resultado para a tela e com isso não podem ser utilizados por outro script para automatizar uma tarefa.
Pense nos scripts como uma coleção de ferramentas, onde cada script criado tem um escopo e ao criar um novo script você irá chamar um script já existente para auxiliar.
Desta forma, com a linguagem você cria ferramentas e com ferramentas você cria novas ferramentas.
O Write-Host não poderá ser utilizado para transmitir os resultados, o que invalidaria a sua caixa de ferramentas.
Minha recomendação é utilizar o Write-Host somente quando os scripts devem realmente exibir um retorno formatado para o usuário.
A imagem abaixo mostra os parâmetros aceitos pelo Write-Host.
01
Ainda no Write-Host aproveitando o uso dos parâmetros disponíveis, vou exibir para o usuário o texto SQLCrespi em azul com fundo branco. Segue exemplo abaixo:
Write-Host “SQLCrespi ” -ForegroundColor Blue -BackgroundColor White
02
Já o CmdLet Write-Output possuí os parâmetros conforme a imagem abaixo:
03
Assim, não conseguiríamos incluir cor de letra ou de fundo, já que este CmdLet é utilizado apenas para retorno.
Vejamos na prática onde mora o problema em trocar um CmdLet por outro.
No exemplo abaixo, escrevo algo em um arquivo utilizando o Write-Host e na sequencia o Write-Output.
04
Nesta imagem podemos ver o primeiro CmdLet sendo utilizado para um Out-File, quando utilizamos o comando cat para visualizar o conteúdo do arquivo, ele é retornado em branco. Isso ocorre porque o Write-Host escreve apenas para o Host.
Já no segundo CmdLet ao utilizar o Out-File ele preenche o arquivo retorno2.txt com o conteúdo, como vamos ver na sequência pelo comando cat.
Contudo, compreendo que há momentos que necessitamos formatar a saída quando o retorno é em prompt e quando for originado de um arquivo de automação deveria ser output. Como fazer?
Minha sugestão é bem simples. Apenas utilize uma condicional testando qual o host. Veja abaixo:
05
Recomendo que seja bem pensando a escolha dos commandlets utilizados nos scripts, partindo da premissa que sempre iremos criar scripts para não repetir funções e automatizar ao máximo.
Lembre-se! Tenha cuidado para selecionar bem as precedências e os comandos corretos. #ficaadica

Abraço, Rodrigo

 

Author: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

Deixe uma resposta