如何从多个RD会话集合提取用户组并追加新组后导出CSV
解决RD会话集合用户组收集与追加问题
修正后的完整PowerShell代码
# 指定要追加的新用户组 $newUserGroup = "<new_usergroup>" # 初始化数组存储结果 $results = @() # 读取Connection Broker列表 $CBs = Get-Content .\CBs.txt foreach ($CB in $CBs) { # 获取当前Broker下在RD Web中显示的会话集合 $collections = Get-RDRemoteDesktop -ConnectionBroker $CB | Where-Object { $_.ShowInWebAccess -eq $true } foreach ($collection in $collections) { $cn = $collection.CollectionName # 获取当前集合的用户组配置 $currentGroups = Get-RDSessionCollectionConfiguration -ConnectionBroker $CB -CollectionName $cn -UserGroup # 整理结果对象 $resultObj = [PSCustomObject]@{ Connection_Broker = $CB Collection_Name = $cn UserGroups = $currentGroups.UserGroup -join ";" } $results += $resultObj # 追加新用户组(避免重复添加) if ($currentGroups.UserGroup -notcontains $newUserGroup) { $updatedGroups = $currentGroups.UserGroup + $newUserGroup Set-RDSessionCollectionConfiguration -ConnectionBroker $CB -CollectionName $cn -UserGroup $updatedGroups Write-Host "已将用户组 $newUserGroup 追加到集合 $cn(Broker:$CB)" } else { Write-Host "用户组 $newUserGroup 已存在于集合 $cn(Broker:$CB),无需重复添加" } } } # 导出结果到CSV文件 $results | Export-Csv -Path ".\RD_Collection_UserGroups.csv" -NoTypeInformation -Encoding UTF8 Write-Host "用户组信息已成功导出到 .\RD_Collection_UserGroups.csv"
原代码的核心问题分析
- 变量定义时机错误:原代码在
foreach循环外定义$CN,此时$CB还未被遍历赋值,导致无法正确获取集合名称,甚至会引发空值错误。 - 未捕获输出结果:原命令直接输出用户组信息但未收集,无法后续整理成CSV格式的结构化数据。
- 缺失追加逻辑:没有实现将指定新用户组添加到现有用户组的操作,未完成需求中的核心任务。
- 输出位置错误:
Write-Host语句在循环外部执行,仅能输出最后一次循环的$CN和$CB值,无法反馈每个集合的处理状态。
关键改进说明
- 循环嵌套逻辑:通过两层循环分别遍历Connection Broker和其下的会话集合,确保每个集合都被处理。
- 结果结构化存储:使用
PSCustomObject整理每个集合的Broker、名称和用户组信息,方便后续导出CSV。 - 避免重复追加:添加了存在性检查,防止同一用户组被重复添加到集合中。
- 编码与格式:导出CSV时指定
UTF8编码,避免中文乱码,同时去掉类型信息保证CSV表头符合要求。
内容的提问来源于stack exchange,提问作者ragmyn
相关产品推荐
相关产品推荐

