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