如何在执行期间将PowerShell的输出重定向到文件

时间:2009-07-31 22:49:10

标签: powershell scripting stdout

我有一个PowerShell脚本,我想将输出重定向到文件。问题是我无法改变调用此脚本的方式。所以我不能这样做:

 .\MyScript.ps1 > output.txt

如何在执行期间重定向PowerShell脚本的输出?

10 个答案:

答案 0 :(得分:167)

也许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"

答案 1 :(得分:43)

Microsoft已announced on Powershell's Connections web site (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

答案 2 :(得分:32)

使用:

Write "Stuff to write" | Out-File Outputfile.txt -Append

答案 3 :(得分:24)

一种可能的解决方案,如果您的情况允许:

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

    。\ TheRealMyScript.ps1> output.txt的

答案 4 :(得分:21)

我认为你可以修改MyScript.ps1。然后尝试改变它:

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

我刚尝试使用PowerShell 3.您可以使用Nathan Hartley's answer中的所有重定向选项。

答案 5 :(得分:17)

您可能需要查看cmdlet Tee-Object。您可以将输出传输到Tee,它将写入管道并写入文件

答案 6 :(得分:11)

powershell ".\MyScript.ps1" > test.log

答案 7 :(得分:7)

如果您希望将所有输​​出直接重定向到文件,请尝试使用*>>

# 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上进行测试。

答案 8 :(得分:4)

如果要从命令行执行此操作而不是内置到脚本本身,请使用:

.\myscript.ps1 | Out-File c:\output.csv

答案 9 :(得分:0)

要将其嵌入到您的脚本中,您可以这样做:

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

这应该可以解决问题。