Powershell 具有ScriptBlock的组对象出现意外行为

Powershell 具有ScriptBlock的组对象出现意外行为,powershell,Powershell,我正在尝试使用Group Object根据自定义计算对对象列表进行分组。下面是一个非常简化的示例: $groupedProjects = 1..10 | %{ [PSCustomObject]@{ ErrorMessage = if ($_ % 2) { 'SomeError' } else { '' } } } | Group-Object -Property { if ($_.ErrorMessage) { 'Failed' } else { 'Succes

我正在尝试使用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:使用脚本块以如下方式显示:

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

所以我假设这个想法是有效的——使用整数而不是字符串也可以达到预期效果。如果有更好的方法来完成上述操作,我洗耳恭听。

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


我已经在GitHub上为这个bug打开了一个窗口。

很有趣。这里有一个更大的讨论:您在组调用中使用隐式foreach和属性的scriptblock。。。为什么?你一开始也没有把任何非偶数号码传给你的通话组。您在
ErrorMessage=
@中缺少else块。错误消息缺少的else块过于简化,我将修复它。不确定组对象脚本块中的隐式foreach是什么意思。我正在为属性使用脚本块,因为我需要一个自定义组属性-您将如何做?