我有输出到不同多个位置的功能,如下所示:
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}
但是我的脚本在我要输出到多个位置的每一行之后看起来很草率。
有谁知道为什么我的功能无法正常工作?
答案 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-Object
或Out-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
构建一个命令字符串,但使用它的逻辑更容易。如果你不需要,就不需要复杂化。