PowerShell格式化一个函数的多个输出

时间:2013-12-02 09:32:13

标签: variables powershell

我最好的猜测是这与Powershell控制台中使用的默认输出方法有关,但我在墙上......

我正在编写一个脚本,其中包含为SQL Server实例中的配置选项找到的默认值的数据表。然后,我有一个函数,用于拉取那些相同配置选项的当前使用值。

我想从此函数输出两组信息:(1)从当前值本身中过滤特定信息,以及(2)过滤将默认值与当前值进行比较的特定信息。所以它看起来与此类似(省略了数据表的内容):


$var1 = $current | where {my filters} | 
   Select @{label='name';Expression{stuff}}, 
   @{label='value_in_use';Expression{stuff}},
   @{label='value';Expression{stuff}}

$var2 = foreach ($o in $tblDefault) {
   $current | where {my filters} | 
   Select @{label='name';Expression{stuff}},
   @{label='value_in_use';Expression{stuff}},
   @{label='default';Expression{stuff}}

Write-Host "This is a message"
$var1
Write-Host "This is a message"
$var2
}

我的问题是两个变量的输出。

  1. $var2的第三列“默认”未显示。
  2. 同样,输出仅显示$var1输出顶部的列标题。 enter image description here 注释掉第一个变量调用这是我应该看到的第二个变量的输出: enter image description here 在调用它们时,PowerShell甚至看不到第二个变量中的其他列。我可以对函数执行Get-Member,它只显示第一个变量的属性名称。 enter image description here
  3. 为了强制将它分成不同的对象,我应该做些什么(意思是两组的列标题?

    与MSPaint一起粘贴这个是我预期的输出,并希望: enter image description here

1 个答案:

答案 0 :(得分:2)

在输出变量时添加默认值可以解决您的问题:

Write-Host "This is a message"
$var1
Write-Host "This is a message"
$var2 | out-default

为什么呢?因为你强制out-default查看$ var2的第一项,而不是让它查看整个流的第一项(由你的函数返回)。 This blog post解释了powershell格式化和输出的工作原理。