我最好的猜测是这与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
}
我的问题是两个变量的输出。
$var2
的第三列“默认”未显示。 $var1
输出顶部的列标题。
注释掉第一个变量调用这是我应该看到的第二个变量的输出:
在调用它们时,PowerShell甚至看不到第二个变量中的其他列。我可以对函数执行Get-Member
,它只显示第一个变量的属性名称。
为了强制将它分成不同的对象,我应该做些什么(意思是两组的列标题?
与MSPaint一起粘贴这个是我预期的输出,并希望:
答案 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格式化和输出的工作原理。