我在SharePoint环境中:
因此,为了同步我的新SharePoint组“某些东西”,我正在考虑定期运行PowerShell脚本以分层次地获取所有成员并将它们放入SharePoint组中,包括检查。不幸的是我无法安装AD加载项,因此我安装了Quest AD加载项。
更新:我注意到直接同步花了太长时间。所以我决定拆分解决方案:第一个AD脚本输出所有嵌套的通讯组(Get-QADGroupMember -Indirect -Type'group'),虽然这需要所有用户,这感觉更安全,因为这可能没有跑了那么多。然后脚本2读取组并为每个组创建一个csv文件,这当然不是唯一的,但是有成千上万的用户,这是最安全的方法。然后脚本3(下面)与用户一起读取csv文件并更新SharePoint用户组。然后脚本4再次读取用户组并删除所有日期(在注释中)不等于最近日期的那个。
<#
.SYNOPSIS
Syncs All Users in AD distribution Group To SharePoint group:
- Adds new Users
- Updates display name, email when changed
- Deleted Users no longer present
#>
# --------------------------------------------------------
# Variables to Change / Set:
# --------------------------------------------------------
$site = "http://abc-def-ghi:7777"
$SPgroup = "MYCOOLSPGROUP"
$ADgroup = "MYADGROUP"
# --------------------------------------------------------
# Add-SSuser : adds a user to Sharepoint Group
# --------------------------------------------------------
function Add-SSUser {
Param( [string]$account,
[string]$displayname,
[string]$email,
[string]$sitecollectionurl,
[string]$group,
[string]$date)
Get-SPWeb -Identity $sitecollectionurl | foreach-object {
$identityClaimWindowsNTAccount = "i:0#.w|$account"
[Microsoft.SharePoint.SPUser] $ssUser =
$_.EnsureUser($identityClaimWindowsNTAccount)
$_.Groups.GetByName($group).AddUser($ssUser)
$_.Groups.GetByName($group).Update()
Set-SPUser -Identity $ssUser -Web $_.Url -Group $group
# Update properties
$ssUser.Email = $email
$ssUser.Name = $displayname
$ssUser.Notes = "[[$date]]"
$ssUser.Update()
#Write-Host $ssUser.Xml
}
}