Powershell 具有ScriptBlock的组对象出现意外行为
我正在尝试使用Group Object根据自定义计算对对象列表进行分组。下面是一个非常简化的示例:Powershell 具有ScriptBlock的组对象出现意外行为,powershell,Powershell,我正在尝试使用Group Object根据自定义计算对对象列表进行分组。下面是一个非常简化的示例: $groupedProjects = 1..10 | %{ [PSCustomObject]@{ ErrorMessage = if ($_ % 2) { 'SomeError' } else { '' } } } | Group-Object -Property { if ($_.ErrorMessage) { 'Failed' } else { 'Succes
$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是什么意思。我正在为属性使用脚本块,因为我需要一个自定义组属性-您将如何做?