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

This site uses Akismet to reduce spam. Learn how your comment data is processed.