输出功能不起作用

时间:2014-07-11 15:53:45

标签: powershell output powershell-v2.0 user-defined-functions

我有输出到不同多个位置的功能,如下所示:

Function OutputToInfo
{
        %{
            Write-Host $_; 
            Out-File -FilePath $InfoLog -InputObject $_ -Append
         }
}

然而,当我运行我的脚本并调用这样的函数时:

"Script started at: ${TS}" | OutputToInfo

它不会输出到任何一个位置。输出到控制台的是函数本身 -

%{
    Write-Host $_; 
    Out-File -FilePath $InfoLog -InputObject $_ -Append
}

此代码有效:

"Script started at: ${TS}" | %{write-host $_; out-file -filepath $ErrorLog -inputobject $_ -append}

但是我的脚本在我要输出到多个位置的每一行之后看起来很草率。

有谁知道为什么我的功能无法正常工作?

1 个答案:

答案 0 :(得分:1)

我认为这更像是你在寻找的东西。我想指出Alroc关于Tee-Object的回答仍然值得考虑。

Function OutputToInfo
{
    $input| %{Write-Host $_; Out-File -FilePath $InfoLog -InputObject $_ -Append}
}

$ input变量允许函数访问来自管道的数据。 http://www.powershellpro.com/powershell-tutorial-introduction/powershell-functions-filters/

"Hello" | OutputToInfo
Hello

同时将“Hello”附加到$InfoLog

之前定义的文件中

鉴于评论

在没有某种循环结构的情况下,没有使用Tee-ObjectOut-File来处理多个路径的本地方法。所以你可能是一个很小的功能。 警告:这几乎没有错误,并且主要用于显示可以做什么的示例。

Function Output-ToFiles
{
    Param(
        [parameter(ValueFromPipeline=$True)]
        [string]
        $data,
        [parameter(
            Mandatory=$false,
            ValueFromRemainingArguments=$true,
            Position=0)]
        [string[]]
        $paths
    )

    # Write data to console.
    Write-Host "$data"

    # Write data to each file passed. 
    $paths | ForEach-Object{
        $data | Out-File -Append -FilePath $_
    }
}

行动中

PS C:\users\Cameron\Downloads> "DataToPipe" | Output-ToFiles "C:\temp\data.log" "C:\temp\data.log2"
DataToPipe

该函数接受管道数据作为字符串。该函数的其余参数存储在字符串数组$paths中。对于运行Out-File的每个路径。此外,如果您厌倦了一直键入相同的路径,您可以设置$paths的默认值$paths = "C:\temp\wood.log

您可以使用Tee-Object构建一个命令字符串,但使用它的逻辑更容易。如果你不需要,就不需要复杂化。