我有一个PowerShell脚本,我想将输出重定向到一个文件。问题是我不能改变这个脚本的调用方式。所以我不能:
.\MyScript.ps1 > output.txt
如何重定向PowerShell脚本执行期间的输出?
我有一个PowerShell脚本,我想将输出重定向到一个文件。问题是我不能改变这个脚本的调用方式。所以我不能:
.\MyScript.ps1 > output.txt
如何重定向PowerShell脚本执行期间的输出?
当前回答
您可能想看一看cmdlet Tee-Object。您可以将输出管道到Tee,它将写入管道和文件
其他回答
powershell ".\MyScript.ps1" > test.log
要在你的脚本中嵌入它,你可以这样做:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
这样应该可以了。
如果你想直接重定向所有输出到一个文件,尝试使用*>>:
# 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上测试。
微软已经在Powershell的连接网站(2012-02-15 at 4:40 PM)上宣布,在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
我认为你可以修改MyScript.ps1。然后试着像这样改变它:
$(
Here is your current script
) *>&1 > output.txt
我刚刚用PowerShell 3试了一下。你可以像内森·哈特利的回答一样使用所有的重定向选项。