Командлет Set-ADUser позволяет изменить значения свойств (атрибутов) пользователя в Active Directory из PowerShell.Традиционно для изменения параметров пользователей AD используется графическая mmc оснастка Active Directory Users and Computers (ADUC). С помощью этой оснастки вы можете отредактировать свойства пользователя или расширенные атрибуты на вкладке Attribute Editor. Однако в консоли ADUC вы не сможете выполнить операцию массового изменения атрибутов у множества пользователя (частично это возможно с помощью сохранённых запросов). В этой статье мы рассмотрим несколько примеров использования командлета Set-ADUser для редактирования свойств пользователей в AD.
Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”
Как изменить свойства пользователя в AD с помощью PowerShell?
У командлета Get-ADUser есть около 50 параметров, привязанных к атрибутам AD (City, Company, Department, Description, EmailAddress, MobilePhone, Organization, UserPrincipalName и т.д.). Список доступных для использования атрибутов можно вывести командой:
Get-Help Set-ADUser -Parameter *|ft
Имя пользователя, свойства которого нужно измененить в AD указывается в обязательном параметре Identity (можно указать в виде sAMAccountName, SID, Distinguished Name или objectGUID).
Например, с помощью командлета Get-ADUser получим значение атрибута Title (должность) у пользователя:
get-aduser -Identity a.novak -properties title|select-object name,title
Теперь изменим его должность в AD:
set-aduser a.novak –title “Системный администратор”
Можно изменить значения сразу нескольких атрибутов. Например, зададим новый email адрес и список компьютеров, на которые разрешен вход пользователю:
Set-ADUser a.novak –EmailAddress [email protected] –LogonWorkstations 'msk-PC213,msk-PC165'
Следующая команда отключит учетную запись пользователя в домене:
Set-ADUser a.novak -Enabled $False
Можно изменить фото пользователя в AD:
Set-ADUser a.novak -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\ps\anovak.jpg" -Encoding byte))}
Значения остальных атрибутов пользователя (в том числе extensionAttribute, и кастомных атрибутов) в AD можно изменить с помощью следующих параметров командлета Get-ADUser:
- Add – добавить значение атрибута;
- Replace – заменить значение атрибута;
- Clear – очистить значение атрибута;
- Remove — удалить одно из значений атрибута.
Например, чтобы изменить телефон пользователя, можно использовать команду:
Set-ADUser a.novak -MobilePhone $NewNumber
Или:
Set-ADUser a.novak -replace @{ 'MobilePhone' = $($Number) }
Добавить новое значение в атрибут extensionAttribute10:
Set-ADUser a.novak -Add @{extensionAttribute10 = "Test1"}
Очистить значение атрибута:
Set-ADUser a.novak -Clear "extensionAttribute10"
Можно изменить значение сразу нескольких атрибутов:
Set-ADUser a.novak -Replace @{title="Программист";company="ОАО Копыта"}
Также с помощью этих параметров можно изменить значения мульти-строковых атрибутов. Например, добавим пользователю сразу несколько ProxyAddresses:
Set-ADUser a.novak -add @{ProxyAddresses="smtp:[email protected], ,SMTP:[email protected]" -split ","}
Массовое изменение атрибутов пользователей в AD
Вы можете изменить атрибуты сразу нескольких пользователей. Например, следующая команда изменит значение атрибута UserAccountControl и заставит всех пользователей из указанной OU изменить пароль при следующем входе:
Get-ADUser -Filter * -SearchBase "OU=Users,OU=MSK,DC=winitpro,DC=ru" | Set-ADUser -ChangePasswordAtLogon $true
Можно массово обновить параметры пользователей в AD значениями из CSV файла. Например, у вас есть CSV файл, который содержит список учетных записей, должностей и телефонов (формат файла: SamAccountName, Title, MobilePhone).
Чтобы внести изменения в свойства пользователей из файла, импортируйте CSV файл и внесите изменения такой PowerShell командой:
Import-Csv "C:\ps\modifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}
Как сохранить имя компьютера в свойствах пользователя в AD?
В одной из предыдущих статей мы показывали, как добавить информацию о пользователе в свойства компьютера в AD с помощью командлета Set-ADComputer. Рассмотрим другой подход – попробуем записать в свойства пользователя информацию о том, на каком компьютере он залогинен.
Для реализации такой схемы достаточно добавить в логон скрипты GPO следующий PowerShell скрипт, который должен выполнятся при входе пользователя в систему (User Configuration -> Policies -> Windows Settings -> Scripts -> Logon):
Set-ADUser -identity $env:UserName –Description $env:computername
Это позволит вам быстро найти имя компьютера, на котором в данный момент работает пользователь.
ExtensionAttribute
).
Добрый день, спасибо за контент.
Есть вопрос, про изменении атрибутов пользователей из файла.
Где прописано «set-ADUser identity $_.SamAccauntName» как определитель того кого выбираем для правки если верно всё понял. Можно ли сделать всё тоже самое, но в таблице без логинов, а с простыми ФИО, у нас атрибут Name(ФИО).
Видел, что для identity только ограниченный набор атрибутов, «Name» среди них нет. Имеются ли способы обхода данной проблемы? Или всё же идентифицировать нужно только по логинам и прочим уникальным идентификаторам?
Из кадров же с логинами они прислать не могут, только с ФИО, а каждый раз сопоставлять ФИО с логинами будет лишнее действие.
Можно конечно присылать им выгрузку где они будут наполнять своими данными, но это всё сложнее.
В каком атрибуте AD у вас хранится ФИО и в каком формате?
Скорее всего придется выбирать сначала выбирать пользователя по ФИО с помощью Get-ADUser, а потом для найденного пользователя править атрибуты:
foreach ...
{
Get-ADUser -Filter {name -like $_.FIO}|Set-ADUser –Title $_.Title -MobilePhone $_.MobilePhone
}
...
Если нужно только выключить/включить аккаунт в АД, имхо правильнее использовать более узконаправленные командлеты как Enable-ADAccount / Disable-ADAccount.
Меньше шанс допустить ошибку при неправильном использовании Set-ADUser
Скажите пожалуйста, как сделать команду, что бы всем пользователям в домене убрать атрибут «Срок действия пароля не ограничен»?
Get-AdUser -Filter * | Set-ADUser -PasswordNeverExpires $false
Поставили такую задачу, заполнить у всех поле Город, Организация — тут всем одно и тоже нужно.
и вот как заполнить отдел — может можно взять название OU в котором пользователь?
Подскажите пожалуйста!
У вас OU как отделы организованы? Как полный DN выглядит?
друзья подскажите, хочу автоматизировать заведение пользователей в AD, но не могу додуматься как искать пользователя через результат переменной.
write-host User
$user = read-host
Get-ADUser -Filter {(userprincipalname -eq $user)}
Здравствуйте, не подскажите полный код для того, что бы он менял значение extensionAttribute1 на то, которое мне нудно (массово) через csv
CSV с двумя полями: SamAccountName и extensionAttributeCSVValue
Import-Csv "C:\ps\modifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName -Add @{extensionAttribute11= $_.extensionAttributeCSVValue}}
Народ, а как массово скопировать один атрибут в другой? У меня есть telephoneNumber, я хочу скопировать его в facsimileTelephoneNumber, после чего очистить telephoneNumber. Такое вообще реально?
Как-то так:
Get-ADUser -Filter * -SearchBase "OU=Users,OU=MSK,DC=winitpro,DC=ru" | foreach
{
Set-ADUser -Identity $_.SamAccountName -replace @{'facsimileTelephoneNumber' = $_.telephoneNumber}
Set-ADUser -Identity $_.SamAccountName -Clear telephoneNumber
}
Как изменить cn (Comman Name) с помощью данного скрипта? Всё меняется, а атрибут CN нет в списке атрибутов.
Добрый день. А то в предыдущем сообщение, даже не поздоровался))
Решил вопрос изменения cn из csv файла.
Может кому пригодится:
$csv_data = Import-Csv -Path C:\ps\rename_users.csv -Delimiter «;»
$csv_data | % {Get-ADUser -Identity $_.SamAccountName | Rename-ADObject -NewName $_.displayName}
Используйте Rename-ADObject. через set-aduser не получится сменить CN
Добрый день. Подскажите как добавить номер к уже имеющемуся. Добавляю следующей командой,
import-csv «C:\temp\telephones.csv» -Delimiter «;» | foreach {Set-ADuser -identity $_.SamAccountName -OfficePhone $_.OfficePhone}
Выглядит нормально. Что вас смущает?
Главное использовать правильный формат CSV файла со столбцами SamAccountName и OfficePhone
Добрый день. Подскажите как можно менять имена пользователей для входа в систему. Мне необходимо изменить поля «Полное имя», «Имя входа пользователя» и «Имя входа пользователя (пред-Windows 2000)», для большого количества пользователей.
В статье есть пример смены атрибута для пользователей из файла. В данном случае вам придется использовать дополнительон Rename-ADObject (через set-aduser не получится сменить CN). получится что-то типа
$userlist=Import-Csv "C:\ps\modify_ad_users.csv"
foreach ($user in$userlist) {
Set-ADUser -Identity $user.SamAccountName –UserPrincipalName $user.UserPrincipalName -SamAccountName $user.SamAccountName
$dn = (Get-ADUser -Identity $user.SamAccountName).DistinguishedName
Rename-ADObject $dn -NewName $user.DisplayName
}
| foreach {Set-ADUser -Identity $_.SamAccountName –UserPrincipalName $_.UserPrincipalName $_.SamAccountName -SamAccountName }
Используйте Rename-ADObject. через set-aduser не получится сменить CN
Пытаюсь понять, как можно реализовать данный замысел.
Сейчас в Active Directory givenName(Поле «Имя») содержит и ИМЯ и ОТЧЕСТВО пользователя через пробел, надо разделить givenName — оставить только ИМЯ, а отчество записать в атрибут middleName
Для одного пользоватля как-то так. Если несколько, то через foreach
$usr= GetAduser -Identity TestUser1
$usrdata=$usr.givenName -split '\s+' -match '\S'
Set-ADUser -Identity $usr -GivenName $usrdata[0] -OtherName $usrdata[1]
Здравствуйте, мне необходимо у всех пользователей в АД убрать в поле адресса почты суфикс, тоесть, у Васи есть почта [email protected], необходимо оставить test а все остальное убрать, у всех пользователей до символа собаки именование почт разное, помогите решить проблемку. Спасибо
Может это на до SMTP адрес менять на Exchange?
PS C:\Windows\system32> Get-Help Set-ADUser -Parameter *|ft
description
-----------
{@{Text=Specifies the expiration date for an account. This parameter sets the AccountExpirationDate property of an a...
{@{Text=Indicates whether the security context of the user is delegated to a service. When this parameter is set to ...
{@{Text=Specifies values to add to an object property. Use this parameter to add one or more values to a property th...
{@{Text=Indicates whether reversible password encryption is allowed for the account. This parameter sets the AllowRe...
{@{Text=Specifies an Active Directory Domain Services authentication policy object. Specify the authentication polic...
{@{Text=Specifies an Active Directory Domain Services authentication policy silo object. Specify the authentication ...
Import-Csv C:\temp\NewFileAD.csv | foreach {Set-ADUser -Identity $_.SamAccountName -Displayname $_.Displayname -Department $_.Department -Title $_.Title}
Возвращает ошибки на каждой шагу:
Set-ADUser : Значение этого атрибута находилось вне допустимых пределов
строка:1 знак:45
+ ... | foreach {Set-ADUser -Identity $_.SamAccountName -Displayname $_.Di ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ivanov:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8322,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Разобрался…длина Title или Department слишком большая и скрипт не мог заменить данные — пропускало с ошибкой.
прошу подсказать. AD. учетка пользователя. вкладка: «Remote Desktop Services Profile», атрибуты: Profile Path и Connect. ни как не могу найти информацию, как с помощью powershell установить значения.
Судя по всему эти атрибуты хранятся в бинарном значении userParameters. как их оттуда извлечь или задать — не знаю… Если разберетесь, поделитесь.