Powershell Write-Host присоединяется к текстовому файлу - имя компьютера и отметка времени

Я - Powershell noobie, и я в настоящее время пишу свой второй сценарий, так что медведь со мной. Я пытаюсь сделать write-host и выводить сообщение с записью-записью вместе с меткой времени и какой компьютер завершает мои различные блоки сценариев в текстовом файле, и у меня возникают проблемы с каким синтаксисом, чтобы заставить все работать.

В целях тестирования я попробовал следующее. Это произойдет на сервере, как только я получу синтаксис, пока он идет на мой локальный диск C:.

write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt

Поведение, которое я вижу, это текстовый файл, но в нем нет содержимого - все пустое.

Ответ 1

Write-Host не использует стандартный выход. Он всегда выводит на консоль напрямую, пропуская что-либо еще. Write-Output выводит на стандартный вывод.

Чтобы ответить на ваш конкретный вопрос - как добавить вывод команды в текстовый файл - вы можете использовать:

Write-Output "folders created successfully $env:computername" >> C:\scripts\testlog.txt

Однако вы также можете использовать Add-Content:

Add-Content -Path C:\scripts\testlog.txt -Value "folders created successfully $env:computername"

Или вы можете направить pipeку к Out-File -Append:

"folders created successfully $env:computername" | Out-File -FilePath C:\scripts\testlog.txt -Append

Почему вы используете разные методы? У них есть несколько различий, с которыми вы не будете сталкиваться очень часто. операторы перенаправления не дают вам большого контроля над тем, что происходит (кодирование и т.д.).

Ответ 2

Используйте командлет Start-Transcript - он может захватывать вывод Write-Host следующим образом:

Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript

Ответ 3

Write-Host предназначен только для отправки данных на консоль и нигде больше. Если вы хотите отправить данные в другом месте, т.е. в файл вам нужно будет отправить его в выходной поток

write-output "folders created successfully $($env:computername)" >> c:\scripts\testlog.txt

или

"folders created successfully $($env:computername)" >> c:\scripts\testlog.txt

Обратите внимание на подвыражение вокруг $env. Мы должны быть уверены, что переменная расширяется в двойных кавычках должным образом.

Посмотрите на ответы Bacons, как это сделать с помощью родных командлетов PowerShell