Как перенаправить вывод PowerShell в файл во время его выполнения
У меня есть PowerShell script, для которого я хотел бы перенаправить вывод в файл. Проблема в том, что я не могу изменить способ вызова script. Поэтому я не могу:
.\MyScript.ps1 > output.txt
Как перенаправить вывод PowerShell script во время его выполнения?
Ответы
Ответ 1
Может быть, Start-Transcript
будет работать для вас. Сначала остановите его, если он уже запущен, затем запустите его и остановите, когда закончите.
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path C:\output.txt -append
# do some stuff
Stop-Transcript
Вы также можете запустить этот процесс во время работы над материалами и сохранить его для сеансов командной строки для последующей справки.
EDIT. Если вы хотите полностью подавить ошибку при попытке остановить транскрипцию, которая не расшифровывается, вы можете сделать это:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
Ответ 2
У Microsoft объявлено на веб-сайте Powershell Connections (15.02.2012 в 16:40), что в версии 3.0 они расширили перенаправление как решение этой проблемы.
In PS 3.0, we've extended output redirection to include the following streams:
Pipeline (1)
Error (2)
Warning (3)
Verbose (4)
Debug (5)
All (*)
We still use the same operators
> Redirect to a file and replace contents
>> Redirect to a file and append to existing content
>&1 Merge with pipeline output
Подробную информацию и примеры см. в статье справки "about_Redirection".
help about_Redirection
Ответ 3
Напишите "Stuff to write" | Out-File Outputfile.txt -Append
Ответ 4
Одно из возможных решений, если это позволяет ваша ситуация:
Ответ 5
Возможно, вы захотите взглянуть на командлет Tee-Object. Вы можете вывести вывод на Tee, и он будет записываться в конвейер, а также в файл
Ответ 6
Я так понимаю, вы можете изменить MyScript.ps1
. Затем попробуйте изменить его так:
$(
here is your current script
) *>&1 > output.txt
Я просто попробовал это с Powershell 3. Вы можете использовать все параметры перенаправления, как в ответе Натана Хартли.
Ответ 7
powershell ".\MyScript.ps1" > test.log
Ответ 8
.\myscript.ps1 | Out-File c:\output.csv
Если вы хотите сделать это из командной строки и не встроены в script
Ответ 9
Если вы хотите прямое перенаправление всего вывода в файл, попробуйте использовать *>>
:
# You'll receive standard output for the first command, and an error from the second command.
mkdir c:\temp -force *>> c:\my.log ;
mkdir c:\temp *>> c:\my.log ;
Так как это прямой перенаправление на файл, он не будет выводиться на консоль (часто полезно). Если вы хотите вывести консоль, объедините весь вывод с помощью *&>1
, а затем выполните команду pipe с помощью Tee-Object
:
mkdir c:\temp -force *>&1 | Tee-Object -Append -FilePath c:\my.log ;
mkdir c:\temp *>&1 | Tee-Object -Append -FilePath c:\my.log ;
# shorter aliased version
mkdir c:\temp *>&1 | tee -Append c:\my.log ;
Я считаю, что эти методы поддерживаются Powershell 3.0+, я тестирую Powershell 5.0.
Ответ 10
Чтобы вставить это в свой script, вы можете сделать это следующим образом:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
Это должно сделать трюк.