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

问题描述 投票:0回答:11

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

 .\MyScript.ps1 > output.txt

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

powershell scripting stdout
11个回答
254
投票

也许

Start-Transcript
对你有用。 如果它已经在运行,请先停止它,然后启动它,完成后停止它。

$ErrorActionPreference="静默继续"
停止记录 |输出为空
$ErrorActionPreference = "继续"
开始-转录-path C:\output.txt -append
# 做一些事情
停止转录

您还可以在处理内容时运行它,并让它保存您的命令行会话以供以后参考。

如果您想在尝试停止未转录的转录本时完全抑制错误,您可以这样做:

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

69
投票

Microsoft 在 Powershell 的 Connections 网站上宣布(2012 年 2 月 15 日下午 4: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

62
投票

用途:

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

46
投票

我认为你可以修改

MyScript.ps1
。然后尝试像这样改变它:

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

我刚刚使用 PowerShell 3 尝试过此操作。您可以使用所有重定向选项,如 Nathan Hartley 的回答


37
投票
powershell ".\MyScript.ps1" > test.log

29
投票

如果您想将所有输出直接重定向到文件,请尝试使用

*>>
:

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


27
投票

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

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

    .\TheRealMyScript.ps1 > 输出.txt


17
投票

您可能想查看 cmdlet Tee-Object。您可以通过管道输出到 Tee,它将写入管道和文件


10
投票

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

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

0
投票

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

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

这应该可以解决问题。


0
投票

这对我有用:

.\myscript.ps1 -myarg1 arg1 -myarg2 arg2 *>&1 1> output.txt

这里有一个解释:

  • *>&1
    将所有流(由
    *
    指定)重定向到成功流
  • 1>
    将成功流(由
    1
    指定)重定向到文件

请参阅文档以查看所有可能的选项:关于重定向

这比我喜欢的要复杂一点,但我想它更灵活。

© www.soinside.com 2019 - 2024. All rights reserved.