Как перенаправить вывод PowerShell в файл во время его выполнения
У меня есть скрипт PowerShell, для которого я хотел бы перенаправить вывод в файл. Проблема в том, что я не могу изменить этот скрипт называется. Поэтому я не могу сделать:
.MyScript.ps1 > output.txt
как перенаправить вывод сценария PowerShell во время его выполнения?
10 ответов:
может быть
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"
компания Microsoft объявлено на веб-сайте соединений Powershell (2/15/2012 в 4: 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
одно из возможных решений, если ваша ситуация позволяет это:
- переименовать MyScript. ps1 в TheRealMyScript. ps1
создайте новый MyScript. ps1, который выглядит так:
.\TheRealMyScript.ps1 > вывод.txt
возможно, вы захотите взглянуть на командлет Tee-Object. Вы можете передать вывод в Tee, и он будет записывать в трубопровод, а также в файл
Я так понимаю, вы можете изменить
MyScript.ps1. Затем попробуйте изменить его следующим образом:$( here is your current script ) *>&1 > output.txtЯ только что попробовал это с Powershell 3. Вы можете использовать все параметры перенаправления, как в ответе Натана Хартли.
если вы хотите прямое перенаправление всех выходных данных в файл, попробуйте использовать
*>>:# 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, а потом труба с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.
.\myscript.ps1 | Out-File c:\output.csvЕсли вы хотите сделать это из командной строки, а не встроен в сам скрипт
чтобы встроить это в свой скрипт, вы можете сделать это так:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Appendэто должно сделать трюк.
Comments