none
Предоставление группе пользователей доступа к компьютерам нескольких OU RRS feed

  • Вопрос

  • Доброе время суток.

    Возникла не тривиальная задача. И поскольку я в этом совершенно ничего не смыслю вынужден просить вашей помощи. Есть группа пользователей. Необходимо автоматизировать добавление каждому сотруднику этой группы компьютеров из нескольких OU в поле LogonWorkstations. Полагаю для начала надо выгрузить список компьютеров из необходимых OU, после чего в запросе подтягивать загрузку из файла.

Ответы

  • PS C:\Temp> .\LogonWS.ps1
    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser


    $ou1 = 'ou=testou1,dc=yourdomain,dc=com' $ou2 = 'ou=testou2,dc=yourdomain,dc=com' $group = 'users_group' $computers = foreach ($ou in @($ou1, $ou2)){ (get-adcomputer -SearchBase $ou -filter *).DNSHostName }

    $compstr = $computers -join "," get-adgroupmember -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach { Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $compstr }


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

    • Предложено в качестве ответа Vector BCOModerator 22 мая 2018 г. 19:02
    • Помечено в качестве ответа KazunEditor 23 мая 2018 г. 7:32
    Модератор

Все ответы

  • подтвердите или поправьте: вам набору пользователей нужно записать набор компьютеров вида

    ivanow - comp1ou1, comp2ou1, comp3ou1, comp1ou2, comp2ou2, comp3ou2

    sydorov - comp1ou1, comp2ou1, comp3ou1, comp1ou2, comp2ou2, comp3ou2

    Если так, то для этого нет необходимости создавать или читать файлы - в рамках одного скрипта вы можете и получить параметры и записть их же


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

    Модератор
  • Есть n-ое кол-во сотрудников, объединенных в группу по должности. Есть несколько OU с компьютерами. Нужно записать все компьютеры этих OU в Log on to вышеупомянутых пользователей. Запросом Get-ADGroupMember -Identity "BuhgalterKassir" -Recursive | Set-ADUser -LogonWorkstations "TEST1,TEST2,TEST3" я добавляю перечисленные компьютеры. Задача в том, что бы вместо TEST1,TEST2,TEST3 добавить все компьютеры из нескольких OU.

  • Есть n-ое кол-во сотрудников, объединенных в группу по должности. Есть несколько OU с компьютерами. Нужно записать все компьютеры этих OU в Log on to вышеупомянутых пользователей. Запросом Get-ADGroupMember -Identity "BuhgalterKassir" -Recursive | Set-ADUser -LogonWorkstations "TEST1,TEST2,TEST3" я добавляю перечисленные компьютеры. Задача в том, что бы вместо TEST1,TEST2,TEST3 добавить все компьютеры из нескольких OU.


    $ou1 = 'ou=testou1,dc=yourdomain,dc=com'
    $ou2 = 'ou=testou2,dc=yourdomain,dc=com'
    $group = 'users_group'
    
    $computers = foreach ($ou in @($ou1, $ou2)){
        (get-adcomputer -SearchBase $ou -filter *).DNSHostName
    }
    get-adgroupmember -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $omputers
    }


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



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

    Модератор
  • Get-ADComputer : Имя объекта имеет недопустимый синтаксис
    C:\Temp\LogonWS.ps1:6 знак:20
    +     (get-adcomputer <<<<  -SearchBase $ou -filter *).DNSHostName
        + CategoryInfo          : NotSpecified: (:) [Get-ADComputer], ADException
        + FullyQualifiedErrorId : Имя объекта имеет недопустимый синтаксис,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

    Get-ADGroupMember : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".
    C:\Temp\LogonWS.ps1:8 знак:18
    + get-adgroupmember <<<<  -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        + CategoryInfo          : ObjectNotFound: (users_group:ADGroup) [Get-ADGroupMember], ADIdentityNotFoundException
        + FullyQualifiedErrorId : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".,Microsoft.ActiveDirectory.Management.Comman
       ds.GetADGroupMember
  • Get-ADComputer : Имя объекта имеет недопустимый синтаксис
    C:\Temp\LogonWS.ps1:6 знак:20
    +     (get-adcomputer <<<<  -SearchBase $ou -filter *).DNSHostName
        + CategoryInfo          : NotSpecified: (:) [Get-ADComputer], ADException
        + FullyQualifiedErrorId : Имя объекта имеет недопустимый синтаксис,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

    Get-ADGroupMember : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".
    C:\Temp\LogonWS.ps1:8 знак:18
    + get-adgroupmember <<<<  -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        + CategoryInfo          : ObjectNotFound: (users_group:ADGroup) [Get-ADGroupMember], ADIdentityNotFoundException
        + FullyQualifiedErrorId : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".,Microsoft.ActiveDirectory.Management.Comman
       ds.GetADGroupMember

    поправьте первые 3 строки согла своих параметров

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

    Модератор
  • Приношу свои извинения. Исправил на свои. Осталась одна ошибка.

    PS C:\Temp> .\LogonWS.ps1
    Get-ADGroupMember : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".
    C:\Temp\LogonWS.ps1:8 знак:18
    + Get-ADGroupMember <<<<  -Identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        + CategoryInfo          : ObjectNotFound: (users_group:ADGroup) [Get-ADGroupMember], ADIdentityNotFoundException
        + FullyQualifiedErrorId : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".,Microsoft.ActiveDirectory.Management.Comman
       ds.GetADGroupMember

  • Приношу свои извинения. Исправил на свои. Осталась одна ошибка.

    PS C:\Temp> .\LogonWS.ps1
    Get-ADGroupMember : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".
    C:\Temp\LogonWS.ps1:8 знак:18
    + Get-ADGroupMember <<<<  -Identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        + CategoryInfo          : ObjectNotFound: (users_group:ADGroup) [Get-ADGroupMember], ADIdentityNotFoundException
        + FullyQualifiedErrorId : Не удается найти объект с удостоверением: "users_group" в "DC=bksb,DC=ru".,Microsoft.ActiveDirectory.Management.Comman
       ds.GetADGroupMember

    к слову сказать это третья строка...

    напишите в переменную название своей группы


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

    Модератор
  • PS C:\Temp> .\LogonWS.ps1
    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser
  • Попробуйте вот так:

    Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $([string]$computers)

    или так:

    Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $([convert]::ToString($computers))


  • PS C:\Temp> .\LogonWS.ps1
    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Set-ADUser : Не удается преобразовать "System.Object[]" в тип "System.String", необходимый для параметра "LogonWorkstations". Указанный метод не подд
    ерживается.
    C:\Temp\LogonWS.ps1:9 знак:65
    +     Set-ADUser -Identity $_.distinguishedname -LogonWorkstations <<<<  $computers
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser


    $ou1 = 'ou=testou1,dc=yourdomain,dc=com' $ou2 = 'ou=testou2,dc=yourdomain,dc=com' $group = 'users_group' $computers = foreach ($ou in @($ou1, $ou2)){ (get-adcomputer -SearchBase $ou -filter *).DNSHostName }

    $compstr = $computers -join "," get-adgroupmember -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach { Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $compstr }


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

    • Предложено в качестве ответа Vector BCOModerator 22 мая 2018 г. 19:02
    • Помечено в качестве ответа KazunEditor 23 мая 2018 г. 7:32
    Модератор
  • как ваши успехи?

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

    Модератор
  • Этот скрипт отработал без ошибок. Вот только в результате в Log on to доступ на All computers предоставился.
  • Этот скрипт отработал без ошибок. Вот только в результате в Log on to доступ на All computers предоставился.

    покажите вывод скрипта

    $ou1 = 'ou=testou1,dc=yourdomain,dc=com'
    $ou2 = 'ou=testou2,dc=yourdomain,dc=com'
    $group = 'users_group'
    
    $computers = foreach ($ou in @($ou1, $ou2)){
        (get-adcomputer -SearchBase $ou -filter *).DNSHostName
    }
    $compstr = $computers -join ","
    $compstr
    get-adgroupmember -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach {
        Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $compstr
        Get-ADUser -Identity $_.distinguishedname | select samAccountname, LogonWorkstations, memberof
    }


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

    Модератор
  • PS C:\Temp> .\LogonWS.ps1
    ,

    samAccountname                                    LogonWorkstations                                 memberof
    --------------------                                   ----------------------                                ------------
    DirectumTest                                                                                                      {}
    armgrr                                                                                                               {}
  • покажите на скринах содержимое ou1, ou2 (первые 2 строки в скрипте) в консольке aduc

    из той же консольки содержимое группы из строки 3

    и сам скрипт скопируйте сюда пожалуйста.

    судя по выводу ou'шки пустые


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


    Модератор
  • Приношу свои извинения, понял в чем проблема. Я указал в первых двух строках OU, но забыл что в них есть еще разделение на OU. $ou1 = 'OU=DopOffice_Ufa,OU=update,DC=bksb,DC=ru' $ou2 = 'OU=DopOffice_Remote,OU=update,DC=bksb,DC=ru' $group = 'BuhgalterKassir' $computers = foreach ($ou in @($ou1, $ou2)){ (get-adcomputer -SearchBase $ou -filter *).DNSHostName } $compstr = $computers -join "," get-adgroupmember -identity $group -recursive | where {$_.objectclass -eq 'user'} | foreach { Set-ADUser -Identity $_.distinguishedname -LogonWorkstations $compstr }
  • Полагаю со всех OUшек надо тянуть информацию
  • Запрос Get-ADComputer -filter * -SearchBase "OU=DopOffice_Ufa,OU=update,DC=bksb,DC=ru" | Where-Object {$_.enabled -eq $true} | Select-Object -Property Name Выдает результат в виде списка компьютеров. По идее и сам скрипт должен отработать
  • Полагаю со всех OUшек надо тянуть информацию

    Попробуйте

    get-adcomputer -SearchBase $ou -filter *

    заменить на

    get-adcomputer -SearchBase $ou -filter * -SearchScope 2


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

    Модератор
  • Заменил, также-All computers
  • PS C:\Temp> Get-ADUser DirectumTest -Properties LogonWorkstations | Format-List Name, LogonWorkstations


    Name              : DirectumTest
    LogonWorkstations :
  • PS C:\Temp> Get-ADUser DirectumTest -Properties LogonWorkstations | Format-List Name, LogonWorkstations


    Name              : DirectumTest
    LogonWorkstations :

    для дебага удобно искользовтаь Powershell ISE

    в нем можете выполнять как скрипт целиком так и отдельные его части.

    Не знаю почему но у вас список машин из ваших OU пустой. Проверил у себя, у меня все работает на КД и при вложенной структуре я получаю дочерние машинки. По идее searchscope 2 должен принудительно заставлять командлет искать вложенные машинки.

    у меня для тестов есть только 2016 кд с последним powershell, возможно проблема кроестся в этом (в другой версии поша у вас)



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

    Модератор
  • Возникла еще одна сложность, на поле LogonWorkstations существует ограничение - не более 64 элементов. Можно изменить значение атрибута rangeUpper User-Workstations на 8192. Приходилось выполнять расширение схемы подобного вида?
  • Задача упростилась, надо с одной только OUшки тянуть инфу. Попробовал другой скрипт, он отработал, вот только первой строкой добавляет 0 )

    $ws="0"
    Get-ADComputer -filter * -SearchBase "ou=servers,DC=winitpro,DC=loc" | Where-Object {$_.enabled -eq $true} |
    ForEach-Object {
    $ws=$ws + ","+ $_.Name
    }
    Get-ADGroupMember -Identity "UnixAdmin" -Recursive | Set-ADUser -LogonWorkstations $ws

  • Задача упростилась, надо с одной только OUшки тянуть инфу. Попробовал другой скрипт, он отработал, вот только первой строкой добавляет 0 )

    $ws="0"
    Get-ADComputer -filter * -SearchBase "ou=servers,DC=winitpro,DC=loc" | Where-Object {$_.enabled -eq $true} |
    ForEach-Object {
    $ws=$ws + ","+ $_.Name
    }
    Get-ADGroupMember -Identity "UnixAdmin" -Recursive | Set-ADUser -LogonWorkstations $ws

    это не другой скрипт, а такой же с незначительными отличиями

    в первой строке $ws ="0" замените на $ws = ""


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

    Модератор
  • Действительно, не додумался. Вопрос с ограничением тоже снят. Спасибо за консультацию.
  • Точно. Осталось решить вопрос с ограничением.

    изменить то схему можно, но стоит ли.

    Если у вас настолько много машин, возможно есть смысл решать задачу как то иначе?

    Например autologoff по пренадлежности в группе

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

    Модератор
  • Не стал менять. Все компьютеры добавились.