Задать вопрос

Как поменять Имя которое отображается в AD через PowerShell?

Есть скрипт на добовление,удаление и изменение пользователей (да возможно он кривой, так как пережил он многое)
при обновлении данных, он обновляет всё нормально, кроме самого имени в AD (DisplayName).

Код
import-module activedirectory
$pathToCSV="C:\script\1.csv"
$OU='ou=проверка2,ou=проверка,DC=tester,DC=local'
$domain="@tester.local"
#импортируем csv файл в переменную
$csv=import-Csv $pathToCSV -Encoding OEM -Delimiter ';'
#разбираем переменную 
foreach ($user in $csv)
	{
		#заносим в переменные значения из csv файла
		$surname="$($user.фамилия)"
		$name="$($user.имя)"
		$sname="$($user.отчество)"
		$displayname="$($user.'выводимое имя')"
		$defpass="$($user.пароль)"
		$dolzhnost="$($user.должность)"
		$depart="$($user.отдел)"
		$description="$($user.описание)"
		$room="$($user.'номер комнаты')"
		$phone="$($user.'номер телефона')"
		$mail="$($user.'электронная почта')"
		$id=$($user.'идентификатор')
		#########

		#########
		for ($i=1; $i -lt $name.length; $i++) 
		{
			#заносим логин из csv файла
			$userName="$($user.логин)"
			try 
			{
				#проеряем, есть ли пользователь
				$user=Get-ADUser "$userName"
			}
			catch 
			{
				$user=$false
			}
			#если пользователь существует
			if ($user)
			{
				#получаем id из AD
				$IDinAD=Get-ADUser $userName -Properties comment | select comment | ft -HideTableHeaders | out-string
				#если номер id из AD совпал с номером из csv
				if ($IDinAD -match $id)
				{
					#если запутили скрипт без аргументов
					if ($args[0] -eq "" -or !$args[0] )
					{
						#обновляем данные пользователя
						Set-ADUser -Identity "$userName" -Surname "$surname" -DisplayName "$displayname" `
						-OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" -Title "$dolzhnost" `
						-UserPrincipalName "$userName$domain" -GivenName "$name $sname" -Description "$description" -Office "$room" -enabled $true -SamAccountName "$userName" 
						#прерываем цикл
						break
					}
					#если запустили скрипт с аргументом -del
					if ($args[0] -eq "-del")
					{
						#удаляем пользователя
						 Remove-ADUser -Identity $userName -Confirm:$false
					}
				}
				#если id не совпадают, и найдено имя пользователя, идем к следующему шагу цикла
				else
				{
					
				}
			}
			#если пользователя не существует
			else
			{
				#и запустили без аргументов
				if ($args[0] -eq "" -or !$args[0])
				{
					try 
					{
						$users=get-aduser -Filter "*" -Properties comment | select comment, name 
					}
					catch
					{
						$users=$false
					}
					if ($users)
					{
						foreach ($user in $users)
						{
							#если у какого то пользователя есть id из csv, обновляем его
							if ($user.comment -match $id)
							{
								$uname=$user.name.toString()
								$distName=Get-ADObject -Filter 'name -eq $uname'
								Set-ADUser -Identity "$uname" -Surname "$surname" -DisplayName "$displayname" `
								-OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" -Title "$dolzhnost" `
								-UserPrincipalName "$userName$domain" -GivenName "$name $sname" -Description "$description" -Office "$room" -enabled $true `
								-SamAccountName "$userName"
								Rename-ADObject $distName.DistinguishedName -NewName $displayname
							}
						}
					} 
						try
						{
						#добавляем пользователя и прерываем цикл
						New-ADUser `
						-Confirm:$false `
						-Path $OU `
						-Name "$displayname" -Surname "$surname" -DisplayName "$displayname" `
						-OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" -Title "$dolzhnost" `
						-UserPrincipalName "$userName$domain" -GivenName "$name $sname" -Description "$description" -Office "$room" -OtherAttributes @{comment="$id"} `
						-AccountPassword (ConvertTo-SecureString -AsPlainText "$defpass" -force) -enabled $true `
						-ChangePasswordAtLogon $true -SamAccountName "$userName" -erroraction 'silentlycontinue'
						}
						catch 
						{
						}
						break
				}
			}
		}
	}


Rename-ADObject $distName.DistinguishedName -NewName $displayname Вроде так должно сработать не?
Подскажите пожалуйста, в каком моменте я допустил ошибку?
  • Вопрос задан
  • 1901 просмотр
Подписаться 3 Простой Комментировать
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Rename-ADObject меняет атрибут CN - то есть то, что отображается в списке
Соответственно и DistinguishedName
а DisplayName (Выводимое имя) ставится Set-ADUser -DisplayName
Если же нужно просто Имя, то это GivenName

DistinguishedName : CN=Чебуракин Геннадий Шапоклякович,OU=SOME_OU,DC=forma,DC=com
CN : Чебуракин Геннадий Шапоклякович
DisplayName : Чебуракин Геннадий Шапоклякович
Name : Чебуракин Геннадий Шапоклякович
Surname : Чебуракин
GivenName : Геннадий
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@azarij
В меру опытный никто
прямо сейчас мне не на чем проверить, но я пока не вижу смысла в строке Rename-ADObject $distName.DistinguishedName -NewName $displayname в этом скрипте. этот командлет явно не предназначен для присвоения displayname юзеру. set-aduser должен это сделать, но я так понимаю не делает. каким именно образом не делает? ошибки?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы