【问题标题】:PowerShell formatting multiple outputs from one functionPowerShell 格式化一个函数的多个输出
【发布时间】:2013-12-02 09:32:12
【问题描述】:

我最好的猜测是这与 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 的列标题。 注释掉第一个变量调用这是我应该看到的第二个变量的输出: 当同时调用第二个变量时,PowerShell 甚至似乎都看不到第二个变量的附加列。我可以在函数上执行Get-Member,它只显示第一个变量的属性名称。

我应该怎么做才能将其强制转换为单独的对象(意味着两个集合的列标题?

只需将其与 MSPaint 一起粘贴,这是我期望的输出,并且希望:

【问题讨论】:

    标签: variables powershell


    【解决方案1】:

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

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

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

    【讨论】:

    • 我知道这很简单。工作正常,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2023-04-02
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多