【发布时间】:2019-10-16 20:56:06
【问题描述】:
我正在使用网络请求来查询我的电话系统以获取用户列表及其队列关联。生成的数据被放入一个对象并最终输出到屏幕和 CSV。问题是许多用户是多个队列的成员,并且生成的队列成员数据作为数组返回。
这就是我的输出的样子:
名字 姓氏 扩展技能 组 技能水平 ---------- --------- --------- ------------ ----------- Kylo Ren 1234 {销售支持、客户服务} {8, 8} Flip Zimmerman 4321 {会计、营销} {5, 3} Clyde Logan 1122 {销售支持、客户服务} {4、9} Ronnie Peterson 2211 {销售支持、客户服务、索赔} {4, 9, 1} 亚当萨克勒 1212 工程 2如您所见,“技能组”和“技能级别”列表示为数组,而保存的 CSV 中的单元格只有 System.Object[],这显然只是表示该单元格包含一个数组。但是,如果用户只是一个技能组的成员,则返回的数据将是一个普通字符串,如上面列表中的 Adam Sackler。
我正在苦苦挣扎的一件事是我不知道应该如何显示数据?各位好心人的一些建议将不胜感激。
例如,我应该为每个技能组和相关技能级别动态创建列吗?当用户的列数少于或多于已有的列数时会发生什么?
名 姓 扩展名 技能组 1 技能等级 1 技能组 2 技能等级 2 ---------- --------- --------- ------------- --------- ---- ------------- ------------- Kylo Ren 1234 销售支持 8 客户服务 8 Flip Zimmerman 4321 会计 5 营销 3或者每个额外的技能组和技能水平应该在一个新的线上?额外的技能组/级别应该在单独的行中还是只在单元格中使用回车?
名字 姓氏 扩展技能 组 技能水平 ---------- --------- --------- ------------ ----------- Kylo Ren 1234 销售支持 8 客户服务 4 翻转齐默尔曼 4321 会计 5 营销 3无论如何,以下是使用数组创建对象的相关代码:
[xml]$resourceCsqInfo = Invoke-WebRequest -Uri $uccxServerBaseUrl"resource?csqid="$($csq.id) -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
[object]$data = $resourceCsqInfo.resources.resource
foreach ($resource in $data) {
$outputList += New-Object -TypeName PSObject -Property @{
"First Name" = $resource.firstName;
"Last Name" = $resource.lastName;
"Extension" = $resource.extension;
"Skill Group" = $resource.skillmap.skillcompetency.skillNameUriPair.name;
"Skill Level" = $resource.skillmap.skillcompetency.competencelevel
}
}
变量$resource.skillmap.skillcompetency.skillNameUriPair.name 和$resource.skillmap.skillcompetency.competencelevel 是循环中的相关项。
所以我的问题是这样的;如何扩展对象中的数组以及传达附加信息的最佳方式是什么?
【问题讨论】:
-
看看learn-powershell.net/2014/01/24/…“Out-String and Trim()”部分将是我的解决方案。
-
将包含集合的属性放入列的一种方法是使用
$Collection -join ';'。这将使您将属性中的项目转换为分号分隔的字符串。
标签: powershell