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

StackOverflow https://stackoverflow.com/questions/1215260

  •  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
  • Создайте новый 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
    

    Это должно сработать.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top