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

时间:2017-02-02 13:57:34

标签: powershell sharepoint sharepoint-online

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

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

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

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

我觉得cmdlet必须互换,即

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

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

Get-SPOUser -Site https://contoso.sharepoint.com -LoginName "user@contoso.com"

这应该明显加快。

要在所有网站集中执行该检查,而不是手动为其提供-Site参数,您可以将结果从Get-SPOSite传送到for-each循环,并通过{{访问每个网站1}}令牌。

$_

(请注意,get-sposite | %{ $user = get-spouser -site $_ -loginName "user@contoso.com"; if($user.Groups.Count -gt 0){write-output $_.url ":" $user.Groups} } %{ }的简写别名。)

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

e.g。 ForEach-Object{ }

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

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

那会给你这样的结果:

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