none
Требуется переместить пользователей в Disable users RRS feed

  • Вопрос

  • Здравствуйте!

    Есть частично разработанный скрипт для отключения пользователей без активности более 45 дней:

    $date_with_offset= (Get-Date).AddDays(-45)
    #$Users = Get-ADUser -Properties LastLogonDate -Filter * | Where-Object ($_.LastLogonDate -lt $date_with_offset) | Out-File c:\Script\users2.txt
    $users = Get-ADUser -Properties LastLogonDate,DistinguishedName -Filter * | Where-Object {(($_.DistinguishedName -Like "*,OU=Users,*") -or ($_.DistinguishedName -Like "*,OU=Users Disabled,*")) -and ($_.LastLogonDate -lt $date_with_offset)} | Out-File c:\Script\users.txt
    $computers = Get-ADComputer -Properties LastLogonDate,DistinguishedName -Filter * | Where-Object {($_.DistinguishedName -Like "*,OU=Computers,*") -and ($_.LastLogonDate -lt $date_with_offset)} | Out-File c:\Script\computers.txt
    # Отключаем компьютеры  
    #$computers | Set-ADComputer -Enabled $false
    # Отключаем пользователей   
    #$users | Set-ADUser -Enabled $false
    #перемещаем пользователей в OU Users Disables в соответсвующую дочернюю OU (HBR01 например) 
    #foreach ($user in $users) {move-adobject -identity $user -targetpath "OU=Users Disabled"}


    Требуется найденного пользователя просто перенести в папку "Disabled users" его папки.
    Папка "Disabled users" есть в каждой папке.  Отключенного пользователя нужно перенести в локальную папку "Users Disabled"  Подскажите как такое сделать?

    Структура актив директории выглядит так:
    DC=DOMAIN, DC=Firma, DC=COM
             |

             +---- OU = My Firm

                    +--------------OU = Locl01

                     |                   +------ OU = Users

                     |                   +------ OU = Users Disabled

                    +--------------OU = Locl02 

                     |                   +------ OU = Users

                     |                   +------ OU = Users Disabled

                     .......

                    +--------------OU = LoclNN 

                     |                   +------ OU = Users

                     |                   +------ OU = Users Disabled

          

Ответы

  • если под папками вы подразумеваете OU то используя параметр distinguishedname (dn) вы знаете точный путь пользователяв котором остается убрать последний ^cn=[^=]+, после чего заменить ^OU=Users, на OU=Disabled Users (вы в вопросе пишите последние 2 слова в обеих комбинациях поэтому хз как правильно)

    foreach ($user in $users) {move-adobject -identity $user -targetpath  $($User.DistinguishedName -replace "^cn=[^,]+," -replace "^OU=Users,", "OU=Users Disabled,"}


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

    Модератор

Все ответы

  • если под папками вы подразумеваете OU то используя параметр distinguishedname (dn) вы знаете точный путь пользователяв котором остается убрать последний ^cn=[^=]+, после чего заменить ^OU=Users, на OU=Disabled Users (вы в вопросе пишите последние 2 слова в обеих комбинациях поэтому хз как правильно)

    foreach ($user in $users) {move-adobject -identity $user -targetpath  $($User.DistinguishedName -replace "^cn=[^,]+," -replace "^OU=Users,", "OU=Users Disabled,"}


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

    Модератор
  • Пожалуйста, расшифруйте запись -replace "cn=[^=]+^" -replace "OU=Users^",
    Совсем не понятны ^ такие символы, пытались найти описание, не получилось
    17 июля 2019 г. 2:36
  • Пожалуйста, расшифруйте запись -replace "cn=[^=]+^" -replace "OU=Users^",
    Совсем не понятны ^ такие символы, пытались найти описание, не получилось

    Немного промахнулся с написанием regex'ов. Уже поправил. Почитать общую справку можно тут и тут

    Констункция "^cn=[^,]+," дословно означает следующее: '^' - найти вначале строки символы 'CN=' после которых выбрать '[^,]+,' - все 'не запятые' вплоть до запятой. 

    Так как в -replace мы подаем только 1 аргумент, то то что будет найдено - будет удалено. В нашем случае это будит имя пользователя, так как нам нужна только ou где пользователь находится.

    Во втором replace мы подаем 2 аргумента через запятую, поэтому то что попадет под фильтр из первого будет заменено на то что содержится во втором аргументе. 

    "^OU=Users," :  "^" - начинается с, после чего должно следовать 'OU=Users,'

    важно что последний искомый символ должен быть запятой


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


    17 июля 2019 г. 6:32
    Модератор