PowerShell嵌套数组成员访问失败及skuId合并为CSV格式解决方案求助
解决PowerShell嵌套哈希表数组的skuId提取与合并问题
嘿,我一眼就瞅见问题所在了!你现在的代码有两个关键小错误,咱们一步步捋清楚:
1. 变量定义的语法错误
你把$licenses定义成了脚本块(用大括号{}包裹),但实际上你需要的是一个哈希表数组,得用PowerShell的数组语法@(...)来包裹才行。
2. 循环里的变量误用
你的foreach循环里,每次迭代的变量是$license,但你却一直在访问整个数组$licenses,自然拿不到单个元素的skuId啦!
修正后的完整代码
# 正确定义哈希表数组:用@()包裹,而不是{} $licenses = @( @{disabledPlans=System.Object[]; skuId='f30db892-07e9-47e9-837c-80727f46fd3d'}, @{disabledPlans=System.Object[]; skuId='f245ecc8-75af-4f8e-b61f-27d8114de5f3'} ) # 提取所有skuId,合并成CSV格式字符串(PowerShell 6+版本) $skuIdCsv = $licenses | ForEach-Object { $_.skuId } | Join-String -Separator ', ' # 如果是PowerShell 5.x版本,用-join运算符替代Join-String # $skuIdCsv = ($licenses | ForEach-Object { $_.skuId }) -join ', ' # 输出结果 Write-Host $skuIdCsv
代码说明
- 用
@(...)把哈希表包裹成数组,确保$licenses是真正的数组类型,能正常遍历。 - 用管道结合
ForEach-Object遍历每个哈希表,提取单个元素的skuId属性。 - 最后用
Join-String(或-join运算符)把所有skuId用,连接成你需要的CSV格式字符串。
运行这段代码后,你就能得到想要的结果:f30db892-07e9-47e9-837c-80727f46fd3d, f245ecc8-75af-4f8e-b61f-27d8114de5f3
内容的提问来源于stack exchange,提问作者Matias Haapaniemi
相关产品推荐
相关产品推荐

