如何将两个PowerShell变量导出为CSV文件的两列?
解决方法
核心问题是你分开提取了两个独立的对象列表,丢失了description和username之间的对应关系。正确的做法是直接遍历每个UserAccount节点,一次性提取两个属性并生成包含对应列的对象,再导出CSV。
修改后的脚本:
# 定义文件路径 $AccountListPath = "$DataPATH\ADM\AccountList.ain" # 读取XML文件 [xml]$UserInfoPath = Get-Content $AccountListPath # 遍历每个UserAccount,同时提取描述和用户ID,生成统一对象 $combinedUserObjects = $UserInfoPath.AccountList.UserAccount | Select-Object ` @{Name='Description'; Expression={$_.description}}, @{Name='UserID'; Expression={$_.UserInfo.username}} # 导出到CSV(替换为你的目标路径) $combinedUserObjects | Export-Csv -Path "C:\目标路径\合并结果.csv" -NoTypeInformation -Encoding UTF8
为什么之前的方法失败:
- 方法1(追加导出):
Export-Csv的追加模式要求后续对象的列名与已有列完全匹配,你第一个对象只有Description列,第二个只有UserID列,列结构不匹配所以报错。 - 方法2(导入后加列):导入CSV后添加列时,没有指定行与行的对应关系,PowerShell会把整个
$UserInfoObject集合批量加到每一行,导致所有用户ID重复出现在每一行。
补充说明:
如果你的XML结构中每个UserAccount节点都对应唯一的description和UserInfo.username,上述脚本会直接生成每行对应一个用户的两列数据,完全符合你期望的CSV格式。
内容的提问来源于stack exchange,提问作者SeveredTRUTH
相关产品推荐
相关产品推荐

