# -----------------------------------------------
# Группа безопасности
# -----------------------------------------------
function New-SecurityGroupInfo()
{
  param ($SecurityGroupInfoXml)

  $securityGroupInfo = new-object PSObject

  # Наименование группы
  $securityGroupInfo | add-member -type NoteProperty -Name Name -Value $SecurityGroupInfoXml.Name

  # Описание группы
  $securityGroupInfo | add-member -type NoteProperty -Name Description -Value $SecurityGroupInfoXml.Description

  # Признак того, что группа должна существовать
  $shouldExist = ($SecurityGroupInfoXml.ShouldExist -and [System.Convert]::ToBoolean($SecurityGroupInfoXml.ShouldExist))  
  $securityGroupInfo | add-member -type NoteProperty -Name ShouldExist -Value $shouldExist
  #---------------------------------

  # Пользователи
  $users = @()  
  if($SecurityGroupInfoXml.Users)
  {
    foreach($userXml in  $SecurityGroupInfoXml.Users.User) { $users += $userXml }   
  }
  $securityGroupInfo | add-member -type NoteProperty -Name Users -Value $users 

  return $securityGroupInfo

}

# -----------------------------------------------
# -----------------------------------------------
# -----------------------------------------------
function ConfigurateSecurityGroupBySecurityGroupInfo()
{
    param ($SPWeb, $SecurityGroupInfo) 

    $group = $SPWeb.SiteGroups[$SecurityGroupInfo.Name];    

    if($SecurityGroupInfo.ShouldExist -and ($group -eq $null))
    {
        throw "Не существует группы: " + $SecurityGroupInfo.Name   
    }
    else
    {
       if($group -eq $null) 
       {
         # Создаем группу
         $group = AddGroupToSite -web: $SPWeb -groupName: $SecurityGroupInfo.Name -description: $SecurityGroupInfo.Description
       }
       else
       {
         Write-Host "Группа существует"
       }

    }   
    
    foreach($login in $SecurityGroupInfo.Users)   
    {     
        Write-Host $login
        try{
            $user = $SPWeb.EnsureUser($login)
            $group.AddUser($user)
          }
        catch{
            Write-Host "Не удалось добавить пользователя $login" -ForegroundColor Red
        }
    }
}