代码之家  ›  专栏  ›  技术社区  ›  Voo

带有scriptBlock的组对象的意外行为

  •  2
  • Voo  · 技术社区  · 6 年前

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

    $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 回复  |  直到 6 年前
        1
  •  2
  •   mklement0    6 年前

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

    我打开了一个 issue 在GitHub上查找此Bug。