Хорошо известно, что Write-Host
является злом.
В PowerShell 5
добавляется Write-Information
и считается заменой Write-Host
.
Но, действительно, что лучше? Write-Host
является злом, потому что он не использует конвейер, поэтому входное сообщение не может использоваться повторно.
Но что делать Write-Host
- это просто показать что-то в консоли прямо? В каком случае мы должны повторно использовать вход?
В любом случае, если мы действительно хотим повторно использовать входные данные, почему бы просто не написать что-то вроде этого:
$foo = "Some message to be reused like saving to a file"
Write-Host $foo
$foo | Out-File -Path "D:\foo.log"
Другой минус Write-Host
заключается в том, что Write-Host
может указать, в каком цвете сообщения отображаются в консоли с помощью -ForegroundColor
и -BackgroundColor
.
С другой стороны, используя Write-Information
, входное сообщение может использоваться везде, где мы хотим, через конвейер №6. И не нужно писать дополнительные коды, как я пишу выше. Но темная сторона этого заключается в том, что если мы хотим писать сообщения на консоль и также сохраняться в файле, мы должны это сделать:
# 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 =======
Немного лишний, я думаю.
Я знаю только небольшой аспект этой вещи "против", и, должно быть, что-то не в моих силах. Так есть ли что-нибудь еще, что может заставить меня поверить, что Write-Information
лучше, чем Write-Host
, пожалуйста, оставьте здесь свои добрые ответы.
Спасибо.