Qual é a diferença entre Write-Host e Write-Output no PowerShell?
Gostar...
Write-Host "Hello World ";
Write-Output "Hello World";
Qual é a diferença entre Write-Host e Write-Output no PowerShell?
Gostar...
Write-Host "Hello World ";
Write-Output "Hello World";
Respostas:
Em suma, Write-Hostgrava no próprio console. Pense nisso como um MsgBox em VBScript . Write-Output, por outro lado, grava no pipeline, para que o próximo comando possa aceitá-lo como sua entrada. Você não é obrigado a usar Write-Outputpara escrever objetos, como Write-Outputé implicitamente chamado para você.
PS> Get-Service
seria o mesmo que:
PS> Get-Service | Write-Output
Write-Output envia a saída para o pipeline. De lá, ele pode ser canalizado para outro cmdlet ou atribuído a uma variável. O Write-Host o envia diretamente para o console.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Saídas:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Se você não disser ao Powershell o que fazer com a saída do pipeline atribuindo-a a uma variável ou canalizando-a para outro comando, ela será enviada para o padrão externo, que normalmente é o console, então o resultado final parece o mesmo .
Write-Outputenvia os dados como um objeto por meio do pipeline. No exemplo de perguntas, ele apenas passará uma string.
write-hosté dependente do host. No console write-hostestá essencialmente fazendo [console]::WriteLine. Veja isso para mais informações.
Write-Ouputenvia objetos. Desta vez era uma string, mas em geral enviará objetos, e normalmente não é necessário usar, pois é a forma padrão de resultados / dados de saída :)
Outra diferença entre Write-Host e Write-Output:
Write-Host exibe a mensagem na tela, mas não a grava no log
Write-Output escreve uma mensagem no log, mas não a exibe na tela.
E o Write-Host é considerado prejudicial. Você pode ver uma explicação detalhada em Write-Host Considered Harmful .
Write-Outputexibe a mensagem na tela, se você estiver executando o script sozinho. Portanto, não tenho certeza do que você quer dizer com "Write-Output grava uma mensagem no log, mas não a exibe na tela." ?
Você pode entender a diferença entre os dois cmds com o exemplo abaixo:
Host de gravação "msgtxt" | Get-Service Na execução acima, você receberá a saída como "msgtxt"
Saída de gravação "msgtxt" | Get-Service Na execução acima, você receberá um erro, pois msgtxt não é o nome de nenhum serviço. (Em condições ideais) (já que você está gravando em um pipeline e está sendo passado como entrada para Get-Service)