PowerShell定义pscustomobject报hash literal缺失=运算符错误如何解决
错误根因
你遇到的报错是因为直接将if/else控制流语句写在了哈希字面量@{}的定义范围内,PowerShell 的哈希表字面量语法只允许在花括号内书写键名 = 键值格式的键值对,不支持直接嵌入控制流语句。
此外你的代码还有3处额外问题:
if (key -like 'CBT99*')中的key没有加变量引用符,实际应该引用当前遍历对象的key属性,即$_.key- 写了
elseif但没有跟上判断条件,按照逻辑应为无额外条件的else分支 - if分支内定义的键名为
bo,else分支内定义的键名为boperator,属于笔误,同一对象的属性名应保持统一
修正后代码
$Nests | ForEach-Object { # 先在哈希表外完成分支逻辑计算 if ($_.key -like 'CBT99*') { $boperator = 'CBT' $SiteID = 1972 } else { # 提前提取公共前缀,避免重复计算 $keyPrefix = $_.key.TrimEnd("0123456789-") $boperator = $map[$keyPrefix].boperator $SiteID = $map[$keyPrefix].SiteID } # 所有属性值确定后再构造自定义对象 $RecordMetrics = [pscustomobject]@{ key = $_.key count = $_.doc_count boperator = $boperator SiteID = $SiteID } # 此处可补充你对$RecordMetrics的后续处理逻辑,例如存入集合、输出等 }
如果你的业务逻辑确实需要if分支对应bo属性、else分支对应boperator属性,只需要调整分支内的变量名、并在自定义对象中补充对应的属性定义即可。
内容的提问来源于stack exchange,提问作者Georgi Gochev
相关产品推荐
相关产品推荐

