В живом портале 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