Как добавить / удалить пользователей в несколько групп SharePoint из PowerShell

В живом портале SharePoint обычно создано много групп. Когда наступает необходимость добавить пользователя в несколько групп, то это уже не очень нравится администратору. А когда точное количество групп неизвестно (например, добавить во все группы, содержащие слово «Владельцы»), то в пору схватиться за голову. А еще лучше за консоль SharePoint.

Поскольку одной строкой тут не обойтись, то для удобства я взялся за PowerShell ISE (как добавить PowerShell ISE – читай на странице https://markimarta.ru/2013/08/kak-dobavit-powershell-ise-iz-powershell/)

Для начала подключим при необходимости SharePoint-овский cmd-let.

if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Write-Host "Connect Sharepoint cmd-Let" 
    Add-PSSnapin Microsoft.SharePoint.PowerShell 
}

 

Указываем адрес коллекции сайтов и имя пользователя и собираем массив групп, в название которых входит слово "владельцы"

$url = "http://alexey-pc7"
$userName = "Alexey-PC7\testuser1"
$site = new-object Microsoft.SharePoint.SPSite($url) 
$web = $site.OpenWeb() 
$groups = $web.sitegroups 

write-host "------Собираем массив  групп, в название которых входит заведомое слово-----" 
$myGroups = @(); 
foreach($group in $groups) { 
  if($group -match "владельцы") { 
        $myGroups += $group 
    } 
}

 

Проходим по массиву групп и добавляем пользователя

foreach ($gr in $myGroups) { 
#add user to SP Group
    Set-SPUser -Identity $userName -web $url -Group $gr 
    write-host "User " $userName   "added to " $gr 
}

 

А вот так можно удалить пользователя из групп

foreach ($gr in $myGroups) { 
    $theGroup = $web.SiteGroups[$gr]     
    $theUser = $web.AllUsers.Item($userName) 
#Remove user from SP Group
    $theGroup.RemoveUser($theUser); 
    write-host "User " $userName   " removed from  " $gr
}

 

Чтоб не собирать скрипт по кусочкам, ниже полный скрипт для добавления пользователей в группы SharePoint с закомментированной строкой удаления

if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Write-Host "Connect Sharepoint cmd-Let" 
    Add-PSSnapin Microsoft.SharePoint.PowerShell 
}
$url = "http://alexey-pc7"
$site = new-object Microsoft.SharePoint.SPSite($url) 
$web = $site.OpenWeb() 
$groups = $web.sitegroups 

$userName = "Alexey-PC7\testuser1" 
write-host "--------------" 
$i = 0; 
$myGroups = @(); 
foreach($group in $groups) { 
  if($group -match "владельцы") { 
        $myGroups += $group 
    } 
} 

foreach ($gr in $myGroups) { 
    write-host $gr 
#add user to SP Group
    Set-SPUser -Identity $userName -web $url -Group $gr 
    $theGroup = $web.SiteGroups[$gr]     
    $theUser = $web.AllUsers.Item($userName) 

#Remove user from SP Group
#   $theGroup.RemoveUser($theUser); 
    write-host "User " $userName   "added to " $gr 
}

 


1 комментарий »

  1. Спасибо за статью! Для меня оказалась актуальной.

    Только заменил строку:
    $site = new-object Microsoft.SharePoint.SPSite($url)
    на:
    $site = Get-SPSite $url
    А вместо двух foreach поиска нужных групп и перебора их предлагаю использовать:
    $groups | ?{$group -match «владельцы»} | %{здесь действия из последнего foreach по добавлению и удалению}

    Комментарий by Иван — 05.03.2016 @ 8:57

RSS feed for comments on this post. TrackBack URL

Leave a comment






MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика