вторник, 10 июня 2014 г.

Копирование пользователей из одной группы в другую средствами PowerShell

Сегодня у меня появилась задача создать группу пользователей SP аналогичную существующей за исключением 10 пользователей. В существующей группе порядка 500 пользователей и сами понимаете переносить руками достаточно трудоемкая работа, при этом нужно быть внимательным, не добавить лишних.
Решил прибегнуть к старому доброму PowerShell и скопировать пользователей
Вот сам код:
$web = Get-SPweb http://serser/site #Ваш сайт
$oldUserGroup = $web.SiteGroups['Участники'] #Группа откуда копируем
$newUserGroup = $web.SiteGroups['Группа для оповещений'] #Группа куда копируем
Foreach ($user in $oldUserGroup.Users)
{
    $user.UserLogin
    $newUserGroup.Users.Add($user.UserLogin, "", "", "")   
}
$web.Dispose()



Появилась немного свободного времени, и я доработал скрипт.
решил в скрипте реализовать проверку пользователей, нужно их добавлять или нет.
Думал, как лучше поступить, писать много условий (с каждым исключенным пользователем) или циклом проверять. Решил загнать все фамилии пользователей в массив и сравнивать пользователей с массивом исключений. Получилось много циклов. Как мне показалось, что так проще будет корректировать перечень исключений, если нужно повторно запускать скрипт.

Первое что делает скрипт, он удаляет всех пользователей из новой группы.
Второе начинает перебирать всех пользователей исходной группы и и проверять, находится или нет в списке исключенных.
Третье добавляет пользователя.
$web = Get-SPweb http://serser/site #Ваш сайт
$oldUserGroup = $web.SiteGroups['Участники'] #Группа откуда копируем
$newUserGroup = $web.SiteGroups['Группа для оповещений'] #Группа куда копируем
$ignoreUsers =      #перечень исключаемых сотрудников
"Иванов Иван Иванович",
"Петров Петр Петрович"


function ChekUsers ($oldGroup)
{
    $count = 0
    Foreach ($user in $oldGroup.Users)
        {      
        $addUserGroup = $true
        foreach ($ignoreUser in $ignoreUsers)
        {
            #$ignoreUser
            if ($ignoreUser -eq $user.DisplayName)
            {
              $addUserGroup = $false          
            }
        }
        if ($addUserGroup -eq $true)
        {
            $user.DisplayName
            AddUsers $user
            $count = $count + 1          
        }      
    }
   Write-Host "Добавлено пользователей - "$count
}
function AddUsers($addUser)
{

        $addUser.UserLogin
        $newUserGroup.Users.Add($addUser.UserLogin, "", "", "")  

 
}
function DeletUsers($delGroup)
    {
            foreach ($delUser in $delGroup.Users)
        {
            $delGroup.RemoveUser($delUser);
        }
    }
DeletUsers $newUserGroup
ChekUsers $oldUserGroup
$web.Dispose()




Надеюсь, информация будет Вам полезна.