我想知道特定用户所属的网站集。不幸的是,我的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]"}}
但是,此命令运行但不会结束或给出错误消息。
预先感谢您的帮助。
用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}