Write-Host =>导出到文件

exp*_*001 15 powershell powershell-2.0 powershell-1.0

我有一个脚本,有一些命令,如Write-Host "Server1".如何将其导出到文件?

当我尝试script > export.txt它时,它没有用.

CB.*_*CB. 25

Write-Host 将输出重定向到控制台.

您可以使用Write-Output并重定向到文件(> export.txt或管道Out-File export.txt)

在绝对需要重定向脚本的所有输出的极端情况下,请查看此cmdlet:

Start-Transcript
Get-Help Start-Transcript -full
Run Code Online (Sandbox Code Playgroud)


jon*_*n Z 9

在PowerShell中script > export.txt是语法糖script | Out-File -path export.txt.

Write-Host将对象发送到主机,并且不返回任何对象.这意味着没有对象通过管道输出到Out-File cmdlet,并且没有任何内容写入export.txt文件.解决方法(如果您不想更改脚本)是打开cmd控制台并使用cmd控制台重定向重定向PowerShell输出.

C:\> powershell .\script.ps1 > .\export.txt
Run Code Online (Sandbox Code Playgroud)


ruf*_*fin 6

当然,不同方法的用处很大程度上取决于您的用例,但......

"正确"的方式做到这一点,我相信,如果你有脚本的控制(这是我平时做,但无可否认我一直在寻找一个快捷的今天),是"过载"Write-Host,可以这么说,和然后将你要发送的所有内容发送Write-Host到这个新功能.

为了保持有效的PowerShell动词,我称之为我的Write-Feedback.

function Write-Feedback()
{
    param
    (
        [Parameter(Position=0,ValueFromPipeline=$true)]
        [string]$msg,
        [string]$BackgroundColor = "Yellow",
        [string]$ForegroundColor = "Black"
    )

    Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
}
Run Code Online (Sandbox Code Playgroud)

所以现在你有一个功能基本相同Write-Host,但你可以轻松控制输出的位置.如果您需要写入文件,则可以进行编辑,Write-Feedback以便其所有调用现在可以执行您需要的任何操作.

您可以简单地将行更改为Write-Output,具体取决于您是否在管道中执行任何其他操作...

...
Write-Output $msg;
Run Code Online (Sandbox Code Playgroud)

您可以将输出发送到与命令的其余部分相同的文件,但在Write-Feedback函数内,甚至保留Write-Host:

function Write-Feedback()
{
    param
    (
        [Parameter(Position=0,ValueFromPipeline=$true)]
        [string]$msg,
        [string]$BackgroundColor = "Yellow",
        [string]$ForegroundColor = "Black"
    )

    Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
    $msg | Out-File "./export.txt" -Append; # <<< or add a param to location
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一些不希望Write-Feedback内容通过管道传输到文件的异常值,您可以添加一个新的可选参数,询问如何处理Write-Feedbackswitch关闭的每个特定调用- 并发送到文件,Write-Host,Write-Output等等 - 将默认值更改为您通常需要的值,并switch明确设置明确设置的新参数.

等等.在PowerShell中将所有调用路由到集中式清算中以便输出更容易.然后,当你改变你的想法,这是不是一个巨大的搜索和替换-和替换回来-任务.

我认为这里唯一的痛苦就是如果你不想在管道中发送东西,那么Write-Output就出来了,但是确实想要确保Write-Feedback写入的文件与你在> export.txt未经编辑的示例中指定的内容相同Write-Feedback每一次.我不确定是否有一种简单的方法可以做到这一点.

但是,既然你已经从"管道步骤"中删除了一步,那可能不是一个合法的用例.

无论如何,底线是过载Write-Host并通过在一个地方编辑做任何你想做的事情.