В живом портале 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 }
Спасибо за статью! Для меня оказалась актуальной.
Только заменил строку:
$site = new-object Microsoft.SharePoint.SPSite($url)
на:
$site = Get-SPSite $url
А вместо двух foreach поиска нужных групп и перебора их предлагаю использовать:
$groups | ?{$group -match «владельцы»} | %{здесь действия из последнего foreach по добавлению и удалению}
Комментарий by Иван — 05.03.2016 @ 8:57