当前位置: 动力学知识库 > 问答 > 编程问答 >

scripting - How to redirect the output of a PowerShell to a file during its execution

问题描述:

I have a PowerShell script for which I would like to redirect the output to a file. The problem is that I cannot change the way this script is called. So I cannot do:

 .\MyScript.ps1 > output.txt

How do I redirect the output of a PowerShell script during its execution?

网友答案:

Maybe Start-Transcript would work for you. First stop it if it's already running, then start it, and stop it when done.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
Start-Transcript -path C:\output.txt -append
# do some stuff
Stop-Transcript

You can also have this running while working on stuff and have it saving your command line sessions for later reference.

EDIT: If you want to completely suppress the error when attempting to stop a transcript that is not transcribing, you could do this:

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
网友答案:

Microsoft has announced on Powershell's Connections web site (2/15/2012 at 4:40 PM) that in version 3.0 they have extended the redirection as a solution to this problem.

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

See the "about_Redirection" help article for details and examples.

help about_Redirection
网友答案:

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

网友答案:

One possible solution, if your situation allows it:

  1. Rename MyScript.ps1 to TheRealMyScript.ps1
  2. Create a new MyScript.ps1 that looks like:

    .\TheRealMyScript.ps1 > output.txt

网友答案:

You might want to take a look at the cmdlet Tee-Object. You can pipe output to Tee and it will write to the pipeline and also to a file

网友答案:

I take it you can modify MyScript.ps1. Then try to change it like so:

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

I just tried this with Powershell 3. You can use all the redirect options as in Nathan Hartley's answer.

网友答案:
.\myscript.ps1 | Out-File c:\output.csv

If you want to do it from the command line and not built into the script itself

网友答案:

To embed this in your script, you can do it like this:

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

That should do the trick.

网友答案:

If you want a straight redirect of all output to a file, try using *>>:

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

Since this is a straight redirect to file, it won't output to console (often helpful). If you desire the console output, combined all output with *&>1, and then pipe with 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 ;

I believe these techniques are supported Powershell 3.0+, I'm testing on Powershell 5.0.

网友答案:
powershell ".\MyScript.ps1" > test.log
分享给朋友:
您可能感兴趣的文章:
随机阅读: