PowerShell脚本用于将通讯组的成员与SharePoint组同步

时间:2014-09-12 23:58:29

标签: powershell activerecord sharepoint-2013

我在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
    }
}

0 个答案:

没有答案