确保只有预期的对象从函数传递到管道

时间:2017-10-06 15:45:55

标签: powershell

我有一个复杂的函数(不是一个班轮)接收一个对象,做一些人员,然后它应该将同一个对象返回给管道。

功能体打开文件进行编写,从Web服务下载内容等。它还通过打印到控制台向用户提供反馈。

function($obj)
{
     do some staff
     more staff
     $obj
}

如何确保只将目标对象返回到管道,而不是像打印到控制台的文本或者可以从我在函数体中运行的命令打印的东西?

我认为Write-Host不应该影响管道。但不确定其他命令。也许,有一些方法可以做到这一点。还没有找到任何东西。

2 个答案:

答案 0 :(得分:2)

一种策略可能是将函数体包装在一个单独的块中,对它进行点源,但是抑制它的所有输出,然后return从主块外部返回所需的任何变量:

function Do-Stuff
{
  param($obj)

  $null = . {
    Get-Random
    $obj.Stuff = "Modified"
    Write-Output "All sorts of noise"
  }
  return $obj
}

现在你可以做到:

PS C:\> Do-Stuff -obj ([pscustomobject]@{Name="MyObject";Stuff="Original"})

Name     Stuff
----     -----
MyObject Modified

仅返回$obj,其他所有内容都被$null

吞没

答案 1 :(得分:0)

只有输出流将传递给管道。如果您使用Write-VerboseWrite-Warning或(如果必须)Write-Host等cmdlet处理控制台输出,则它们不会干扰管道。

如果您使用的是带有返回值的cmdlet,您不希望传递给输出流或变量,则可以将它们作为选项传递给Out-Null