Как перенаправить вывод PowerShell в файл во время его выполнения



У меня есть скрипт PowerShell, для которого я хотел бы перенаправить вывод в файл. Проблема в том, что я не могу изменить этот скрипт называется. Поэтому я не могу сделать:



 .MyScript.ps1 > output.txt


как перенаправить вывод сценария PowerShell во время его выполнения?

808   10  

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

написать "материал для записи" | Out-файл Outputfile.тхт -добавить

одно из возможных решений, если ваша ситуация позволяет это:

  1. переименовать MyScript. ps1 в TheRealMyScript. ps1
  2. создайте новый MyScript. ps1, который выглядит так:

    .\TheRealMyScript.ps1 > вывод.txt

возможно, вы захотите взглянуть на командлет Tee-Object. Вы можете передать вывод в Tee, и он будет записывать в трубопровод, а также в файл

Я так понимаю, вы можете изменить MyScript.ps1. Затем попробуйте изменить его следующим образом:

$(
  here is your current script
) *>&1 > output.txt

Я только что попробовал это с Powershell 3. Вы можете использовать все параметры перенаправления, как в ответе Натана Хартли.

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 ;

так как это прямое перенаправление в файл, он не будет выводить на консоль (часто полезно). Если вы хотите консольный вывод, объедините все выходные данные с *&>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

    Ничего не найдено.