PowerShell哈希表导出CSV遇问题:如何批量引用键值而非逐个调用?
解决哈希表批量导出CSV的问题
我完全懂你在把哈希表导出成CSV时的头疼——直接导出哈希表确实会因为它的结构导致输出混乱,手动调用每个.item属性又太繁琐。其实用PowerShell的枚举器就能轻松解决这个批量处理键值的问题,不用逐个指定每个哈希表项。
核心解决方案:用GetEnumerator()遍历哈希表
哈希表本身没有直接可批量调用的Name/Value属性,但通过GetEnumerator()方法,我们可以把哈希表转换成包含Key和Value属性的键值对集合,这样就能批量处理所有项了。
完整示例代码
# 你的SKU哈希表 $Sku = @{ "AAD_BASIC" = "Azure Active Directory Basic"; "RMS_S_ENTERPRISE" = "Azure Active Directory Rights Management"; "AAD_PREMIUM" = "Azure Active Directory Premium P1"; "AAD_PREMIUM_P2" = "Azure Active Directory Premium P2"; "MFA_PREMIUM" = "Azure Multi-Factor Authentication"; "RIGHTSMANAGEMENT" = "Azure Information Protection Plan 1"; "O365_BUSINESS_ESSENTIALS" = "Office 365 Business Essentials"; "O365_BUSINESS_PREMIUM" = "Office 365 Business Premium"; "ADALLOM_O365" = "Office 365 Cloud App Security"; "ADALLOM_S_DISCOVERY" = "Unknown" } # 方法1:转换成PSCustomObject后导出 $Sku.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ SkuCode = $_.Key # 哈希表的键 SkuName = $_.Value # 哈希表对应的值 } } | Export-Csv -Path "C:\temp\SkuList.csv" -NoTypeInformation -Encoding UTF8 # 方法2:用Select-Object简化写法 $Sku.GetEnumerator() | Select-Object @{Name='SkuCode'; Expression={$_.Key}}, @{Name='SkuName'; Expression={$_.Value}} | Export-Csv -Path "C:\temp\SkuList_Short.csv" -NoTypeInformation -Encoding UTF8
为什么这个方法有效?
哈希表的GetEnumerator()会返回一个包含所有键值对的集合,每个集合项都自带Key(哈希表的键名)和Value(对应的值)属性。通过遍历这个集合,我们可以批量把每个键值对转换成结构化的对象,这样导出CSV时就会得到整洁的两列数据,完全不需要手动调用每个.item属性。
之前你尝试的.name和.value无效,是因为哈希表本身没有这些属性——只有通过枚举器拿到单个键值对对象后,才能访问对应的Key和Value。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

