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

用于将通讯组成员与SharePoint组同步的PowerShell脚本,powershell,activerecord,sharepoint-2013,Powershell,Activerecord,Sharepoint 2013,SharePoint环境中的Im,其中: 正在使用通讯组列表而不是安全列表 无法切换到安全列表 通讯组列表是嵌套的 没有用户配置文件同步 因此,为了同步我的新SharePoint组“something”,我考虑定期运行PowerShell脚本,以分层方式获取所有成员并将其放入SharePoint组,包括检查。不幸的是,我不能安装广告加载项,所以我安装了任务广告加载项 更新:我注意到直接同步花了太长时间。因此,我决定拆分解决方案:第一个AD脚本输出所有嵌套的通讯组(Get QADGroupMe

SharePoint环境中的Im,其中:

  • 正在使用通讯组列表而不是安全列表
  • 无法切换到安全列表
  • 通讯组列表是嵌套的
  • 没有用户配置文件同步
因此,为了同步我的新SharePoint组“something”,我考虑定期运行PowerShell脚本,以分层方式获取所有成员并将其放入SharePoint组,包括检查。不幸的是,我不能安装广告加载项,所以我安装了任务广告加载项

更新:我注意到直接同步花了太长时间。因此,我决定拆分解决方案:第一个AD脚本输出所有嵌套的通讯组(Get QADGroupMember-Indirect-Type'group'),尽管这需要与获取所有用户一样长的时间,但这感觉更安全,因为可能不必运行太多。然后脚本2读取组并为每个组创建一个csv文件,这当然不是唯一的,但对于成千上万的用户来说,这是最安全的方法。然后,脚本3(下面)与用户一起读取csv文件,并更新SharePoint用户组。然后脚本4再次读取用户组并删除日期(在notes中)不等于最近日期的所有用户组

<#
.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
    }
}

# --------------------------------------------------------
#要更改/设置的变量:
# --------------------------------------------------------
$site=”http://abc-def-ghi:7777"
$SPgroup=“mycolspgroup”
$ADgroup=“MYADGROUP”
# --------------------------------------------------------
#添加用户:将用户添加到Sharepoint组
# --------------------------------------------------------
函数加法器{
参数([string]$account,
[字符串]$displayname,
[字符串]$email,
[字符串]$sitecollectionurl,
[字符串]$group,
[字符串]$date)
获取SPWeb-Identity$sitecollectionurl | foreach对象{
$identityClaimWindowsNTAccount=“i:0#.w |$account”
[Microsoft.SharePoint.SPUser]$ssUser=
$\u.EnsureUser($identityClaimWindowsNTAccount)
$\.Groups.GetByName($group).AddUser($ssUser)
$\.Groups.GetByName($group.Update())
设置SPUser-Identity$ssUser-Web$\ Url-Group$Group
#更新属性
$ssUser.Email=$Email
$ssUser.Name=$displayname
$ssUser.Notes=“[[$date]]”
$ssUser.Update()
#写入主机$ssUser.Xml
}
}

您现在的代码有什么问题?我看到的唯一奇怪的是一些拼写错误,我不知道你在哪里声明了变量,所以这可能只是表面上的<代码>$\u spdisplayname和上次修改日期
@Matt Well。。。这个脚本可能有很多问题,我会更新我的帖子,提一下我的一些疑问