none
Скрипт Powershell для авто добавления пользователей в группу RRS feed

  • Вопрос

  • Добрый день!Необходимо создать скрипт на шеле, который будет анализировать список пользователей AD, и если этого пользователя нет ни в одной из 3 групп, то включить его в группу users.

    Попытался сделать  это на примере хотя бы одной группы и пользователе, без циклов, и все равно она не отрабатывает корректно, прообовал по разному, пока победить не могу, может быть здесь есть гуру powershell готовые помочь?

    Один из вариантов скрипта: (скрипт отрабатывает без ошибок, но значение всегда выдает FALSE независимо от того есть реально пользователь в этой группе или нет)

    #Укажем группу пользователей
        $group = "CN=vsdeskadmin,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    #Укажем пользователя для поиска
        $user = "ivanov"
        $usrgrp = Get-ADGroupMember $group | ft SamAccountName
        if ((Get-ADUser $user -Properties SamAccountName).SamAccountName -like $usrgrp)
        {
    # Если в группе
        echo «TRUE»
        }
        else
    # Не входит в группу
        {
        echo «FALSE»
        }

    • Перемещено Vector BCOModerator 17 апреля 2018 г. 11:43 Перемещено из Разное
    17 апреля 2018 г. 10:24

Ответы

  • $usr = get-aduser $user -properties memberof
    $usrgroups = $usr.memberof
    if ((! ($usrgroups -contains $group)) -and (! ($usrgroups -contains $group2))){
        Add-AdgroupMember  $group -members $usr
    }



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа Vector BCOModerator 19 апреля 2018 г. 15:25
    17 апреля 2018 г. 11:21
    Модератор
  • В вашем исполнении:

    $group = "CN=group,OU=Distribution groups,OU=Groups,DC=domen,DC=com"
    $user = "user"
    $usrgrp = Get-ADGroupMember $group
    
    Foreach ($ug in $usrgrp) {
        if (($ug).SamAccountName -eq $user) {
            Write-Host $("True " + $ug.SamAccountName)
        } else {
            Write-Host $("False " + $ug.SamAccountName)
        }
    }

    • Помечено в качестве ответа Vector BCOModerator 19 апреля 2018 г. 15:25
    17 апреля 2018 г. 12:45

Все ответы

  • $usr = get-aduser $user -properties memberof
    $usrgroups = $usr.memberof
    if ((! ($usrgroups -contains $group)) -and (! ($usrgroups -contains $group2))){
        Add-AdgroupMember  $group -members $usr
    }



    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа Vector BCOModerator 19 апреля 2018 г. 15:25
    17 апреля 2018 г. 11:21
    Модератор
  • В вашем исполнении:

    $group = "CN=group,OU=Distribution groups,OU=Groups,DC=domen,DC=com"
    $user = "user"
    $usrgrp = Get-ADGroupMember $group
    
    Foreach ($ug in $usrgrp) {
        if (($ug).SamAccountName -eq $user) {
            Write-Host $("True " + $ug.SamAccountName)
        } else {
            Write-Host $("False " + $ug.SamAccountName)
        }
    }

    • Помечено в качестве ответа Vector BCOModerator 19 апреля 2018 г. 15:25
    17 апреля 2018 г. 12:45
  • Спасибо за ответ, по вашему варианту почему то выходит ошибка, скрипт немного изменил под себя:

    $usr = get-aduser vsdesk_test -properties memberof
    $usrgroups = $usr.memberof
    $group = "CN=vsdeskadmin,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    $group2 = "CN=vsdeskmanager,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    $group3 = "CN=vsdeskuser,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    if ((! ($usrgroups -contains $group)) -and (! ($usrgroups -contains $group2))){
        Add-AdgroupMember  $group3 -members $usr
    } 
    else 
    { 
    echo ITS ADMIN OR MANAGER! 
    }

    И вот ошибку выдает такую:

    Add-AdgroupMember : Insufficient access rights to perform the operation
    At line:7 char:5
    +     Add-AdgroupMember  $group3 -members $usr
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (CN=vsdeskuser,O...DC=none,DC=local:ADGroup) [Add-ADGroupMember], ADException
        + FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember


    • Изменено Art Tom 20 апреля 2018 г. 2:59 про
    20 апреля 2018 г. 2:58
  • И вам спасибо за ответ!

    Но в вашем скрипте я не смог понять переменную $ug ? К чему ее привязать?

    И надо завязать ее на 3 группы получается :)

    20 апреля 2018 г. 3:01
  • И вот ошибку выдает такую:

    Add-AdgroupMember : Insufficient access rights to perform the operation
    At line:7 char:5
    +     Add-AdgroupMember  $group3 -members $usr
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (CN=vsdeskuser,O...DC=none,DC=local:ADGroup) [Add-ADGroupMember], ADException
        + FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
    powershell запустите от имени администратора

    The opinion expressed by me is not an official position of Microsoft

    20 апреля 2018 г. 5:16
    Модератор
  • И вот ошибку выдает такую:

    Add-AdgroupMember : Insufficient access rights to perform the operation
    At line:7 char:5
    +     Add-AdgroupMember  $group3 -members $usr
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (CN=vsdeskuser,O...DC=none,DC=local:ADGroup) [Add-ADGroupMember], ADException
        + FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

    powershell запустите от имени администратора

    The opinion expressed by me is not an official position of Microsoft

    Мда, какая глупая ошибка, сам PS щапустил от админа, а ISE забыл . Спасибо большое! Работает!
    20 апреля 2018 г. 6:22
  • Сюда же задам еще вопрос по поводу скрипта этого, Как сделать рекурсивный роиск пользователя по всем OU?

    Сейчас ищет только там куда указывает путь. Вглубь не идет.

    $usr = Get-ADUser -Filter * -SearchBase "OU=Company,DC=none,DC=local" -properties memberof
    $usrgroups = $usr.memberof
    $group = "CN=vsdeskadmin,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    $group2 = "CN=vsdeskmanager,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    $group3 = "CN=vsdeskuser,OU=VsDesk,OU=Accounts System Folder,DC=none,DC=local"
    if ((! ($usrgroups -contains $group)) -and (! ($usrgroups -contains $group2))){
        Add-AdgroupMember  $group3 -members $usr
    } 
    else 
    { 
    echo ITS ADMIN OR MANAGER! 
    }

    у меня корневая OU с пользователями

    "OU=Company,DC=none,DC=local"

    Дальше идет куча вложенных, по отделам. В итоге он никого не видит, как заставить его смотреть рекурсивно по всем ou ?

    Спасибо заранее.

  • Добрый день!

    Он и так ищет во всех вложенных OU

    Проверьте отдельно вывод команды:

    Get-ADUser -Filter * -SearchBase "OU=Company,DC=none,DC=local" | ft

  • Действительно выдает список, хм, а сам скрпит не отрабатывает в своей полной форме. Пользователи не добавляются в группу необходимую. Хотя если натравить его на конкретную конечную OU, то срабатывает.

    Есть у меня подозрение одно, при попытки выполнить ее, он практически сразу дает вывод:

    PS C:\Windows\system32> C:\Scripts\VsDesk_Add_UsersToGroupAD_vsdeskuser.ps1
    ITS
    ADMIN
    OR
    MANAGER!

    Возможно он натыкается на пользователя состоящего в одной из групп и прекращает выполнение скрипта?

  • Скорее всего у вас проблема с условием

    Напишите, что должно быть в условии (своими словами)

  • Скрипт должен сканировать всех пользователь в указанной OU, и сверять их нахождение в двух группах, если его нет ни в одной из групп, добавить его в третию.

    На деле это 2 группы системы VsDesk, в которой есть 3 группы, юзеры, исполнители и админы.

    Если пользователь не админ, и не исполнитель, добавить его в юзеры. Примерно такая схема.

    Если скрипту указать конечную OU где допустим 5 пользователей, он переберет всех, если никто из них не состоит в двух группах, то добавит всех в юзеры.

    А вот если начинать с корневой OU то не работает.

  • Скрипт должен сканировать всех пользователь в указанной OU, и сверять их нахождение в двух группах, если его нет ни в одной из групп, добавить его в третию.

    На деле это 2 группы системы VsDesk, в которой есть 3 группы, юзеры, исполнители и админы.

    Если пользователь не админ, и не исполнитель, добавить его в юзеры. Примерно такая схема.

    Если скрипту указать конечную OU где допустим 5 пользователей, он переберет всех, если никто из них не состоит в двух группах, то добавит всех в юзеры.

    А вот если начинать с корневой OU то не работает.

    Попробуйте использовать searchscope

    https://social.technet.microsoft.com/Forums/ru-RU/d087cc13-f017-4dfb-86b3-dd9c356fe5e3/-ou?forum=scrlangru


    The opinion expressed by me is not an official position of Microsoft

    Модератор