如何在执行过程中将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,如果你的情况允许:
- 将MyScript.ps1重命名为TheRealMyScript.ps1
-
创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
这应该够了吧。