Host de gravação versus informações de gravação no PowerShell 5
É bem sabido queWrite-Host
é mau. NoPowerShell 5
, Write-Information
é adicionado e é considerado para substituirWrite-Host
.
Mas, realmente, qual é o melhor?Write-Host
é ruim porque não usa pipeline, portanto, a mensagem de entrada não pode ser reutilizada.
Mas o queWrite-Host
fazer é apenas mostrar algo no console, certo? Em que caso devemos reutilizar a entrada?
De qualquer forma, se realmente queremos reutilizar a entrada, por que não escrever algo assim:
$foo = "Some message to be reused like saving to a file"
Write-Host $foo
$foo | Out-File -Path "D:\foo.log"
Outros contras deWrite-Host
é aquele,Write-Host
pode especificar em que cor as mensagens são mostradas no console usando-ForegroundColor
e-BackgroundColor
.
Por outro lado, usandoWrite-Information
, a mensagem de entrada pode ser usada onde quisermos através do pipeline No.6. E não precisa escrever os códigos extras como eu escrevi acima. Mas o lado obscuro disso é que, se queremos escrever mensagens no console e também salvas no arquivo, precisamos fazer o seguinte:
# Always set the $InformationPreference variable to "Continue"
$InformationPreference = "Continue";
# if we don't want something like this:
# ======= Example 1 =======
# File Foo.ps1
$InformationPreference = "Continue";
Write-Information "Some Message"
Write-Information "Another Message"
# File AlwaysRunThisBeforeEverything.ps1
.\Foo.ps1 6>"D:\foo.log"
# ======= End of Example 1 =======
# then we have to add '6>"D:\foo.log"' to every lines of Write-Information like this:
# ======= Example 2 =======
$InformationPreference = "Continue";
Write-Information "Some Message" 6>"D:\foo.log"
Write-Information "Another Message" 6>"D:\foo.log"
# ======= End of Example 2 =======
Um pouco redundante, eu acho.
Eu só conheço um pequeno aspecto dessa coisa "vs", e deve ter algo da minha cabeça. Então, há mais alguma coisa que possa me fazer acreditar queWrite-Information
é melhor queWrite-Host
, deixe suas respostas gentis aqui.
Obrigado.