Как перенаправить выходные данные PowerShell в файл во время его выполнения
-
06-07-2019 - |
Вопрос
У меня есть скрипт PowerShell, для которого я хотел бы перенаправить выходные данные в файл.Проблема в том, что я не могу изменить способ вызова этого скрипта.Так что я не могу этого сделать:
.\MyScript.ps1 > output.txt
Как мне перенаправить выходные данные скрипта PowerShell во время его выполнения?
Решение
Возможно, Start-Transcript
подойдет вам. Сначала остановите его, если он уже запущен, затем запустите его и остановите, когда закончите.
$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" Start-Transcript -path C:\output.txt -append # Do some stuff Stop-Transcript
Это также можно запустить во время работы над материалом и сохранить его в сеансах командной строки для дальнейшего использования.
Если вы хотите полностью устранить ошибку при попытке остановить расшифровку, которая не транскрибирует, вы можете сделать это:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
Другие советы
Microsoft объявила о веб-сайте Powershell Connections (2012-02-15 в 16:40) что в версии 3.0 они расширили перенаправление в качестве решения этой проблемы.
In PowerShell 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
Использование:
Write "Stuff to write" | Out-File Outputfile.txt -Append
Одно из возможных решений, если ваша ситуация позволяет это:
<Ол>Создайте новый MyScript.ps1, который выглядит следующим образом:
. \ TheRealMyScript.ps1 > output.txt
Я так понимаю, вы можете изменить MyScript.ps1
. Затем попробуйте изменить это так:
$(
Here is your current script
) *>&1 > output.txt
Я только что попробовал это с PowerShell 3. Вы можете использовать все параметры перенаправления, как в ответ Натана Хартли .
Возможно, вы захотите взглянуть на командлет Tee-Object . Вы можете направить вывод в Tee, и он запишет в конвейер, а также в файл
powershell ".\MyScript.ps1" > test.log
Если вы хотите прямое перенаправление всех выходных данных в файл, попробуйте использовать * > >
:
# 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 ;
Поскольку это прямое перенаправление в файл, оно не будет выводиться на консоль (часто полезно). Если вы хотите получить консольный вывод, объедините весь вывод с * & amp; > 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
Это должно сработать.