none
PowerShell. Изменение атрибутов пользователей AD RRS feed

  • Вопрос

  • Добрый день! 
    Всем пользователям из определённого OU нужно скопировать значение GivenName в строчку Display Name.

    В пошике не сильно понимаю, но хотелось бы применять этот командлет и к отдельным пользователям,фильтруя их по одному из имён.

    15 октября 2014 г. 6:23

Ответы

  • get-aduser -SearchBase "OU=Accounts,OU=RootOU,DC=ChildDomain,DC=RootDomain,DC=com" -filter * -properties * | foreach {set-aduser $_ -displayname $_.givenname}

    Innovation distinguishes between a leader and a follower - Steve Jobs

    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:03
    15 октября 2014 г. 6:43
  • суть синтаксиса сводится к английскому языку

    найти пользователя который по фильтру (Пользователь 2) выбрыть настройки все

    get-aduser "user 2" -properties * (выдаст несколько больше параметров)

    чем

    get-aduser "user 2"


    как следствие на конвеер вы передадите только часть параметров и нужных среди них не будет, вывод - ошибка
    • Изменено Vector BCOModerator 15 октября 2014 г. 7:49
    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:03
    15 октября 2014 г. 7:48
    Модератор
  • 1) Set-ADUser Пользователь -Clear Атрибут

    Set-ADUser test -Clear Organization

    2) Set-ADUser Пользователь -Add @{Название атрибута = "Значение"}

    Set-ADUser test -Add @{Organization = "Company"}

    3) Csv - заголовки именовать,как значение атрибутов.

    Пример  Csv:

    SamAccountName,Organization,Office,PostalCode
    Test,Company,MyOffice,1111

    Скрипт:

    $csv = Import-Csv my.csv
    $prop = $csv | Get-Member -Type NoteProperty | Where {$_.Name -ne "SamAccountName"} | Foreach {$_.Name}
    $csv | Foreach {
    	$obj = $_
    	$prop | foreach {$attr = @{}} {$attr["$_"] = $obj.$_}
    	Set-ADUser $_.SamAccountName -Add $prop
    }

    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:36
    15 октября 2014 г. 11:28
    Отвечающий
  • PS > Get-Help Set-ADUser -Parameter SmartcardLogonRequired

    -SmartcardLogonRequired <Boolean>
        Specifies whether a smart card is required to logon. This parameter sets the SmartCardLoginRequired property for a
        user. This parameter also sets the ADS_UF_SMARTCARD_REQUIRED flag of the Active Directory User Account Control attr
        ibute. The acceptable values for this parameter are: 

        -- $False or 0
        -- $True or 1

    Set-ADUser testUser -SmartcardLogonRequired $true

    • Помечено в качестве ответа Lester_strange 16 октября 2014 г. 7:58
    16 октября 2014 г. 7:46
    Отвечающий
  • Get-ADUser -Filter * | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText 'P@ssw0rd1' -Force)

    • Предложено в качестве ответа Vector BCOModerator 16 октября 2014 г. 8:32
    • Помечено в качестве ответа Lester_strange 16 октября 2014 г. 10:50
    16 октября 2014 г. 8:26
    Отвечающий

Все ответы

  • get-aduser -SearchBase "OU=Accounts,OU=RootOU,DC=ChildDomain,DC=RootDomain,DC=com" -filter * -properties * | foreach {set-aduser $_ -displayname $_.givenname}

    Innovation distinguishes between a leader and a follower - Steve Jobs

    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:03
    15 октября 2014 г. 6:43
  • get-aduser -SearchBase "OU=Accounts,OU=RootOU,DC=ChildDomain,DC=RootDomain,DC=com" -filter * -properties * | foreach {set-aduser $_ -displayname $_.givenname}

    Innovation distinguishes between a leader and a follower - Steve Jobs

    Get-AdUser -SearchBase "OU=Shops,DC=contoso,DC=local" -Filter {DisplayName -like 'user 2'} | foreach {Set-ADUser $_-DisplayName $_.GivenName}

    Set-ADUser : Не удается найти позиционный параметр, принимающий аргумент "User 2".
    строка:1 знак:107
    | foreach {Set-ADUser $_-DysplayName $_.GivenName}
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    15 октября 2014 г. 6:53
  • Параметр Properties забыли

    Также использование like предполагает использовать wildcard-символы, например, -like '*User 2*'


    Innovation distinguishes between a leader and a follower - Steve Jobs

    15 октября 2014 г. 6:59
  • Что необходимо указать в параметре -properties?
    по прежнему не работает. 
    Если выполнять всё что до конвеера | то выводит необходимую учётку. 
    15 октября 2014 г. 7:03
  •  -properties *

    15 октября 2014 г. 7:17
    Модератор
  • Так и добавил -properties* перед условием фильтра, ничего не изменилась, ошибка та  же.
    Я повторюсь: я не сильно разбираюсь в синтаксисе Power Shell по этому туплю. 
    15 октября 2014 г. 7:25
  • суть синтаксиса сводится к английскому языку

    найти пользователя который по фильтру (Пользователь 2) выбрыть настройки все

    get-aduser "user 2" -properties * (выдаст несколько больше параметров)

    чем

    get-aduser "user 2"


    как следствие на конвеер вы передадите только часть параметров и нужных среди них не будет, вывод - ошибка
    • Изменено Vector BCOModerator 15 октября 2014 г. 7:49
    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:03
    15 октября 2014 г. 7:48
    Модератор
  • суть синтаксиса сводится к английскому языку

    найти пользователя который по фильтру (Пользователь 2) выбрыть настройки все

    get-aduser "user 2" -properties * (выдаст несколько больше параметров)

    чем

    get-aduser "user 2"


    как следствие на конвеер вы передадите только часть параметров и нужных среди них не будет, вывод - ошибка

    Понятно. Я подставил - properties * 
    та же ошибка:

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties * | foreach {Set-ADUser $_-DisplayName $_.GivenName}
    Set-ADUser : Не удается найти позиционный параметр, принимающий аргумент "Воронеж".
    строка:1 знак:121
    + ... s * | foreach {Set-ADUser $_-DisplayName $_.GivenName}
    +                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    • Предложено в качестве ответа Vector BCOModerator 15 октября 2014 г. 8:37
    • Отменено предложение в качестве ответа Vector BCOModerator 15 октября 2014 г. 8:37
    15 октября 2014 г. 8:15
  • вы принципиально вопрос меняете каждый раз?

    у вас в OU=Shops,DC=easystep,DC=Local есть пользователь "Воронеж 6"?

    что выдаст

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties *
    15 октября 2014 г. 8:45
    Модератор
  • вы принципиально вопрос меняете каждый раз?

    у вас в OU=Shops,DC=easystep,DC=Local есть пользователь "Воронеж 6"?

    что выдаст

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties *
    DistinguishedName : CN=Воронеж 6,OU=shops,DC=easystep,DC=local
    Enabled           : True
    GivenName         : Воронеж
    Name              : Воронеж 6
    ObjectClass       : user
    ObjectGUID        : 7cd87946-6b77-4fae-8a22-62f381008596
    SamAccountName    : vrn6
    SID               : S-1-5-21-3097518947-483215594-2323343350-1258
    Surname           : 
    UserPrincipalName : vrn6@easystep.local
    15 октября 2014 г. 9:00
  • Проблема в невнимательности, надо добавить пробел перед -DisplayName у командлета Set-ADUser:

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties * | foreach {Set-ADUser $_ -DisplayName $_.GivenName}

    • Изменено KazunEditor 15 октября 2014 г. 9:09
    15 октября 2014 г. 9:09
    Отвечающий
  • Поправил, командлет выполняется, но поле GivenName не меняет своего содержимого. 
    Кстати, поменял местами
    Set-ADUser $_ -DisplayName $_.GivenName
    15 октября 2014 г. 9:24
  • Поправил, командлет выполняется, но поле GivenName не меняет своего содержимого. 
    Кстати, поменял местами
    Set-ADUser $_ -DisplayName $_.GivenName

    Вы понимаете что делаете?

    Всем пользователям из определённого OU нужно скопировать значение GivenName в строчку Display Name. - Причем тут поле GivenName,когда меняется DisplayName?

    15 октября 2014 г. 9:26
    Отвечающий
  • Поправил, командлет выполняется, но поле GivenName не меняет своего содержимого. 
    Кстати, поменял местами

    Set-ADUser $_ -DisplayName $_.GivenName

    Вы понимаете что делаете?

    Всем пользователям из определённого OU нужно скопировать значение GivenName в строчку Display Name. - Причем тут поле GivenName,когда меняется DisplayName?

    Нужно скопировать значение из DisplayName в GivenName. изначально я перепутал эти параметры, командлет мне это показал. Я поменял местами названия параметров, но результата не добился. 
    Нужно из выводимого имени скопировать в поле имя. 
    15 октября 2014 г. 9:54
  • Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}

    15 октября 2014 г. 10:00
    Отвечающий
  • Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}
    Именно так я и поменял местами эти переменные, но изменений не произошло 
    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}

    15 октября 2014 г. 10:07
  • Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 6'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}

    Именно так я и поменял местами эти переменные, но изменений не произошло 
    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}

    Результат вывода:

    Get-AdUser "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | Format-List Name,GivenName,DisplayName,SamAccountName

    15 октября 2014 г. 10:14
    Отвечающий

  • Get-ADUser : Не удается найти позиционный параметр, принимающий аргумент "OU=Shops,DC=easystep,DC=local".

    15 октября 2014 г. 10:34
  • Да,пропустил -SearchBase:

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | Format-List Name,GivenName,DisplayName,SamAccountName

    15 октября 2014 г. 10:35
    Отвечающий
  • Name           : Воронеж 7
    GivenName      : Воронеж.
    DisplayName    : Воронеж 7
    SamAccountName : vrn7

    Нужно что бы в GivenName было тоже что и в DisplayName
    15 октября 2014 г. 10:48
  • А теперь скрин консоли PowerShell с выполнением обоих команд в последовательности:

    1) Сначала выполняем:

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | foreach {Set-ADUser $_ -GivenName $_.DisplayName}
                    

    2) Затем:

    Get-AdUser -SearchBase "OU=Shops,DC=easystep,DC=local" -Filter {DisplayName -like 'воронеж 7'} -Properties * | Format-List Name,GivenName,DisplayName,SamAccountName


    • Изменено KazunEditor 15 октября 2014 г. 10:54
    15 октября 2014 г. 10:54
    Отвечающий
  • Сейчас всё сработало. Спасибо большое!
    15 октября 2014 г. 11:02
  • Сразу подскажите на будущее, что бы темы не плодить:

    1) Как очищать произвольное поле у пользователя

    2) Как в произвольное поле вносить однотипные данные? 
    3) Как автоматизированно заполнять поля пользователей из файла  csv или txt? 

    15 октября 2014 г. 11:06
  • 1) Set-ADUser Пользователь -Clear Атрибут

    Set-ADUser test -Clear Organization

    2) Set-ADUser Пользователь -Add @{Название атрибута = "Значение"}

    Set-ADUser test -Add @{Organization = "Company"}

    3) Csv - заголовки именовать,как значение атрибутов.

    Пример  Csv:

    SamAccountName,Organization,Office,PostalCode
    Test,Company,MyOffice,1111

    Скрипт:

    $csv = Import-Csv my.csv
    $prop = $csv | Get-Member -Type NoteProperty | Where {$_.Name -ne "SamAccountName"} | Foreach {$_.Name}
    $csv | Foreach {
    	$obj = $_
    	$prop | foreach {$attr = @{}} {$attr["$_"] = $obj.$_}
    	Set-ADUser $_.SamAccountName -Add $prop
    }

    • Помечено в качестве ответа Lester_strange 15 октября 2014 г. 11:36
    15 октября 2014 г. 11:28
    Отвечающий
  • Спасибо! Буду применять на практике.
    15 октября 2014 г. 11:37
  • А как менять значение бинарных параметров учёток, например "для интерактивного входа в систему используется смарт-карта"?

    Верно я понимаю что:

    Get-ADUser -SearchBase "OU=Unit,DC=contoso,DC=com" -Filter -Properties * | Set-ADUser -Add @{SmartcardLogonReguired = "TRUE/False"} 

    для того что бы поменять параметр всем пользователям из определённого OU?

    16 октября 2014 г. 7:06
  • 1)  "для интерактивного входа в систему используется смарт-карта" -

    Set-ADUser -SmartcardLogonRequired

    2) И где можно найти Ldap значения всех параметров и атрибутов пользователя которые можно менять с помощью PS? - В библиотеке разработчика - http://msdn.microsoft.com/en-us/library/ee663273(v=vs.85).aspx

    3) В редакторе атрибутов оснастки пользователи и компьютера далеко не всё. - Есть более низкоуровневые утилиты, типа LDP.exe, ADSIEDIT.msc

    16 октября 2014 г. 7:21
    Отвечающий
  • 1)  "для интерактивного входа в систему используется смарт-карта" -

    Set-ADUser -SmartcardLogonRequired

    2) И где можно найти Ldap значения всех параметров и атрибутов пользователя которые можно менять с помощью PS? - В библиотеке разработчика - http://msdn.microsoft.com/en-us/library/ee663273(v=vs.85).aspx

    3) В редакторе атрибутов оснастки пользователи и компьютера далеко не всё. - Есть более низкоуровневые утилиты, типа LDP.exe, ADSIEDIT.msc

    А как записать в SmartcardLogonRequired булево значение? Не совсем понимаю синтаксис
    16 октября 2014 г. 7:44
  • PS > Get-Help Set-ADUser -Parameter SmartcardLogonRequired

    -SmartcardLogonRequired <Boolean>
        Specifies whether a smart card is required to logon. This parameter sets the SmartCardLoginRequired property for a
        user. This parameter also sets the ADS_UF_SMARTCARD_REQUIRED flag of the Active Directory User Account Control attr
        ibute. The acceptable values for this parameter are: 

        -- $False or 0
        -- $True or 1

    Set-ADUser testUser -SmartcardLogonRequired $true

    • Помечено в качестве ответа Lester_strange 16 октября 2014 г. 7:58
    16 октября 2014 г. 7:46
    Отвечающий
  • PS > Get-Help Set-ADUser -Parameter SmartcardLogonRequired

    -SmartcardLogonRequired <Boolean>
        Specifies whether a smart card is required to logon. This parameter sets the SmartCardLoginRequired property for a
        user. This parameter also sets the ADS_UF_SMARTCARD_REQUIRED flag of the Active Directory User Account Control attr
        ibute. The acceptable values for this parameter are: 

        -- $False or 0
        -- $True or 1

    Set-ADUser testUser -SmartcardLogonRequired $true

    Спасибо! разобрался! 
    16 октября 2014 г. 7:59
  • А как можно массово сменить пароль на одно значение для всех? 
    16 октября 2014 г. 8:21
  • Get-ADUser -Filter * | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText 'P@ssw0rd1' -Force)

    • Предложено в качестве ответа Vector BCOModerator 16 октября 2014 г. 8:32
    • Помечено в качестве ответа Lester_strange 16 октября 2014 г. 10:50
    16 октября 2014 г. 8:26
    Отвечающий
  • Доброго дня,

    правильно ли я понял что если сделать так

    get-aduser -SearchBase "OU=Accounts,OU=RootOU,DC=ChildDomain,DC=RootDomain,DC=com" -filter * -properties * | foreach {set-aduser $_ -email $_.proxyAdreses}

    То поле заполнится, но мне надо что бы в поле proxyAdreses в атрибуте появилась запись SMTP:мыло, а если уже заполнено то игнорить подскажите как можно реализовать?


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.


    • Изменено PuCtoy 2 апреля 2018 г. 11:59
    2 апреля 2018 г. 11:58
  • Доброго дня,

    правильно ли я понял что если сделать так

    get-aduser -SearchBase "OU=Accounts,OU=RootOU,DC=ChildDomain,DC=RootDomain,DC=com" -filter * -properties * | foreach {set-aduser $_ -email $_.proxyAdreses}

    То поле заполнится, но мне надо что бы в поле proxyAdreses в атрибуте появилась запись SMTP:мыло, а если уже заполнено то игнорить подскажите как можно реализовать?


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.


    создайте вопрос в новой теме

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

    2 апреля 2018 г. 13:39
    Модератор