SharePoint Online:查找用户所属的所有网站集

问题描述 投票:0回答:1

我想知道特定用户所属的网站集。不幸的是,我的PowerShell知识仍然非常有限。

这是我到目前为止所提出的,但它非常慢,并且不会返回我想要的结果。

Get-SPOSite | ForEach-Object {Get-SPOUser -Site https://contoso.sharepoint.com/ -Limit All | Where-Object {$_.LoginName -eq "[email protected]"}}

不幸的是,输出显示用户(显示名称,登录名,组),而不是有问题的用户所属的不同网站集。

我觉得cmdlet必须互换,即

Get-SPOUser -site https://contoso.sharepoint.com/ | ForEach-Object {Get-SPOSite    -Limit All | Where-Object {$_.LoginName -eq "[email protected]"}}

但是,此命令运行但不会结束或给出错误消息。

预先感谢您的帮助。

powershell sharepoint sharepoint-online
1个回答
1
投票

Get-SPOUser调用-Limit All将返回网站上的每个用户。而不是获得那个(可能是大量的)用户集合,然后过滤它以获得你想要的一个用户,为什么不通过提供-LoginName参数手术检索你想要的一个用户?

Get-SPOUser -Site https://contoso.sharepoint.com -LoginName "[email protected]"

这应该快得多。

要在所有网站集中执行该检查,而不是手动向其提供-Site参数,您可以将结果从Get-SPOSite传递到for-each循环,并通过$_标记访问每个网站。

get-sposite | %{ $user = get-spouser -site $_ -loginName "[email protected]"; if($user.Groups.Count -gt 0){write-output $_.url ":" $user.Groups} } 

(请注意,%{ }ForEach-Object{ }的简写别名。)

上面代码的输出不是最精美的格式。例如,如果用户是多个组的成员(让我们称之为第一组和第二组),它们将显示在同一行上,它们之间没有空格,

例如https://contoso.sharepoint.com/site : Group OneGroupTwo

作为更清洁的替代方案,请考虑将结果存储到PowerShell对象数组中,如下所示:

$arr = @(); get-sposite | %{ $user = get-spouser -site $_ -loginName "[email protected]"; if($user.Groups.Count -gt 0){ $arr += new-object psobject -property @{site=$_.url; groups=$user.Groups} } }; $arr

这应该给你这样的结果:

site                      groups
----                      ------
https://contoso.com       {Site Members}
https://contoso.com/site  {Group One, Group Two}
© www.soinside.com 2019 - 2024. All rights reserved.