【问题标题】:Unexpected Behavior with Group-Object with ScriptBlock [duplicate]带有 ScriptBlock 的 Group-Object 的意外行为 [重复]
【发布时间】:2018-11-02 08:40:11
【问题描述】:

我正在尝试使用 Group-Object 根据自定义计算对对象列表进行分组。一个非常简单的例子如下:

$groupedProjects = 1..10 | %{
    [PSCustomObject]@{
        ErrorMessage = if ($_ % 2) { 'SomeError' } else { '' } 
    }
} | Group-Object -Property { if ($_.ErrorMessage) { 'Failed' } else { 'Successful' } } -AsHashTable

$successGroup = $groupedProjects['Successful'] 
# $successGroup is null here instead of a list with the integers.

问题是这些组不是由字符串键入而是由其他东西键入 - 不确定我是否真的理解这个问题。

PS:使用脚本块在documentation中显示的方式如下:

1..35 | Group-Object -Property {$_ % 2},{$_ % 3}

所以我认为这个想法是有效的 - 使用整数而不是字符串也可以按预期工作。如果有更好的方法来完成上述操作,我会全力以赴。

【问题讨论】:

  • 有趣。这里有一个更大的讨论:stackoverflow.com/questions/28190053/…
  • 您在组调用中使用隐式 foreach 和该脚本块作为属性...为什么?
  • 首先,您也没有将任何非偶数传递给您的群组通话。 ErrorMessage= 中缺少 else 块
  • @TheIncorrigle ErrorMessage 缺少的 else 太简单了,我会修复它。不确定组对象脚本块中隐式 foreach 的含义。我正在使用该属性的脚本块,因为我需要一个自定义组属性 - 你会怎么做?

标签: powershell


【解决方案1】:

其他海报是正确的,问题在于密钥存储为PSObject,但有一个内置解决方案:使用-AsString 开关和-AsHashTable。这将强制将密钥存储为字符串。

我已经在 GitHub 上为这个错误打开了issue

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多