如何在执行过程中将PowerShell的输出redirect到文件

我有一个PowerShell脚本,我想将输出redirect到一个文件。 问题是我不能改变这个脚本被调用的方式。 所以我做不到:

.\MyScript.ps1 > output.txt 

如何在执行期间redirectPowerShell脚本的输出?

也许Start-Transcript会为你工作。 如果它已经运行,先停下来,然后启动它,完成后停止。

 $ ErrorActionPreference = “SilentlyContinue”
 Stop-Transcript | 出空
 $ ErrorActionPreference =“继续”
 Start-Transcript -path C:\ output.txt --append
 #做一些东西
停止 - 成绩单

你也可以在运行的时候运行这个程序,让它保存你的命令行会话供以后参考。

编辑 :如果你想完全压制错误,当试图停止不抄录的抄本,你可以这样做:

 $ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" # or "Stop" 

微软已经在Powershell的Connections网站(2012年2月15日下午4:40)上宣布,在3.0版本中,他们已经将redirect扩展为解决此问题的解决scheme。

 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-File Outputfile.txt -Append

一个可能的解决scheme,如果你的情况允许:

  1. 将MyScript.ps1重命名为TheRealMyScript.ps1
  2. 创build一个如下所示的新的MyScript.ps1:

    。\ TheRealMyScript.ps1> output.txt

您可能需要查看cmdlet Tee-Object 。 你可以pipe输出到Tee,它将写入pipe道,也写入一个文件

我拿它可以修改MyScript.ps1 。 然后尝试像这样改变它:

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

我只是用Powershell 3试过这个。你可以像Nathan Hartley的回答一样使用所有的redirect选项。

 powershell ".\MyScript.ps1" > test.log 
 .\myscript.ps1 | Out-File c:\output.csv 

如果你想从命令行执行,而不是内置到脚本本身

如果您想要将所有输出直接redirect到文件,请尝试使用*>>

 # 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 ; 

由于这是一个直接redirect到文件,它不会输出到控制台(通常有帮助)。 如果您需要控制台输出,将所有输出与*&>1合并,然后使用Tee-Object进行pipe道操作:

 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+,我正在testingPowershell 5.0。

要将其embedded到脚本中,可以这样做:

  Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append 

这应该够了吧。