具有ScriptBlock的Group-Object的意外行为

时间:2018-05-23 11:14:33

标签: powershell

我尝试使用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}

所以我假设这个想法是有效的 - 使用整数而不是字符串也可以按预期工作。如果有更好的方法可以做到这一点,我会尽全力。

1 个答案:

答案 0 :(得分:2)

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

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