Qual é a diferença entre Write-Host e Write-Output no PowerShell?
Gostar...
Write-Host "Hello World ";
Write-Output "Hello World";
windows
powershell
daniyalahmad
fonte
fonte
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 .
fonte
Write-Output
envia os dados como um objeto por meio do pipeline. No exemplo de perguntas, ele apenas passará uma string.write-host
é dependente do host. No consolewrite-host
está essencialmente fazendo[console]::WriteLine
. Veja isso para mais informações.fonte
Write-Ouput
envia 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 .
fonte
Write-Output
exibe 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)
fonte