使用PowerShell获取SharePoint用户所属组并优化显示
问题分析
原命令中$_.Groups返回SPGroup集合,PowerShell默认将集合压缩为{group1, group2...}格式,无法每行展示单个组;同时Out-GridView因集合类型无法完整显示组信息。以下是针对性解决方案:
方案1:控制台实现合并UserLogin列的期望显示效果
通过遍历用户及所属组,生成自定义对象,仅在首个组对应的行显示UserLogin,后续组行留空:
$targetUsers = Get-SPUser -Web https://contonso.com -Limit all | Where-Object {$_.UserLogin -like "*tom"} foreach ($user in $targetUsers) { $isFirstGroup = $true foreach ($group in $user.Groups) { [PSCustomObject]@{ UserLogin = if ($isFirstGroup) { $user.UserLogin } else { "" } Groups = $group.Name } $isFirstGroup = $false } } | Format-Table -AutoSize
执行后控制台显示效果:
UserLogin Groups --------- ------ i:0#.w|xyx\om group1 group2 group3 group4
方案2:适配Out-GridView的完整显示方案
为了在Out-GridView中方便筛选、查看,每个组行保留UserLogin信息(避免空值影响操作):
Get-SPUser -Web https://contonso.com -Limit all | Where-Object {$_.UserLogin -like "*tom"} | ForEach-Object { $currentUser = $_ $_.Groups | ForEach-Object { [PSCustomObject]@{ UserLogin = $currentUser.UserLogin GroupName = $_.Name } } } | Out-GridView -Title "目标用户的SharePoint所属组"
该命令会生成每行对应一个用户-组关联的对象,Out-GridView可完整显示所有组名,支持排序、筛选操作。
核心原理
通过嵌套遍历将用户与所属组的一对多关系拆分为多个一对一的自定义对象,替代原命令中集合类型的Groups列,从根本解决PowerShell对集合的压缩显示问题,同时适配Out-GridView的对象展示要求。
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

