Смена фамилии. PowerShell в помощь.

В один прекрасный день вновь потребовалось сменить фамилию пользователю женского пола.

А что если это автоматизировать и сделать скрипт для смены фамилии с помощью PowerShell,ведь наверняка уже есть решения в интернете,гугл в помощь.

В рунете я решение данного вопроса не искал. Было интересно погуглить именно в английском варианте,запрос был примерно таким “change last name after marriage active directory”

В итоге вот что получилось.

Первое мы имеем новую фамилию

$newsurname = ‘Сидорова’

Переведем ее в транслит с помощью функции TranslitToLat:

function global:TranslitToLAT {
param([string]$inString)
$Translit_To_LAT= @{
[char]‘а’=”a”
[char]‘А’=”A”
[char]‘б’=”b”
[char]‘Б’=”B”
[char]‘в’=”v”
[char]‘В’=”V”
[char]‘г’=”g”
[char]‘Г’=”G”
[char]‘д’=”d”
[char]‘Д’=”D”
[char]‘е’=”e”
[char]‘Е’=”E”
[char]‘ё’=”yo”
[char]‘Ё’=”Yo”
[char]‘ж’=”zh”
[char]‘Ж’=”Zh”
[char]‘з’=”z”
[char]‘З’=”Z”
[char]‘и’=”i”
[char]‘И’=”I”
[char]‘й’=”y”
[char]‘Й’=”Y”
[char]‘к’=”k”
[char]‘К’=”K”
[char]‘л’=”l”
[char]‘Л’=”L”
[char]‘м’=”m”
[char]‘М’=”M”
[char]‘н’=”n”
[char]‘Н’=”N”
[char]‘о’=”o”
[char]‘О’=”O”
[char]‘п’=”p”
[char]‘П’=”P”
[char]‘р’=”r”
[char]‘Р’=”R”
[char]‘с’=”s”
[char]‘С’=”S”
[char]‘т’=”t”
[char]‘Т’=”T”
[char]‘у’=”u”
[char]‘У’=”U”
[char]‘ф’=”f”
[char]‘Ф’=”F”
[char]‘х’=”kh”
[char]‘Х’=”Kh”
[char]‘ц’=”c”
[char]‘Ц’=”C”
[char]‘ч’=”ch”
[char]‘Ч’=”Ch”
[char]‘ш’=”sh”
[char]‘Ш’=”Sh”
[char]‘щ’=”shch”
[char]‘Щ’=”Shch”
[char]‘ъ’=””# “””
[char]‘Ъ’=””# “””
[char]‘ы’=”y”# “y`”
[char]‘Ы’=”Y”# “Y`”
[char]‘ь’=””# “`”
[char]‘Ь’=””# “`”
[char]‘э’=”e”# “e`”
[char]‘Э’=”E”# “E`”
[char]‘ю’=”yu”
[char]‘Ю’=”Yu”
[char]‘я’=”ya”
[char]‘Я’=”Ya”
}
$outChars=””
foreach ($c in $inChars=$inString.ToCharArray())
{
if ($Translit_To_LAT[$c] -cne $Null )
{
$outChars+=$Translit_To_LAT[$c]
}
else
{
$outChars+=$c
}
}
Write-Output $outChars
}

$engsurname = TranslitToLAT $newsurname

Найдем пользователя в домене,у которого меняем фамилию

$user = Get-ADUser -Filter {displayname -like ‘Иванова Светлана Александровн*’} -Properties *

В AD нам нужно заменить 4 параметра (SamAccountName,Surname,DisplayName,UserPrincipalName) + переименовать объект

Создаем новые переменные с новой фамилией

$engsurname = TranslitToLAT $newsurname #(Sidorova)
$name = $user.name -replace ($user.surname,$newsurname) #(Сидорова Светлана Александровна)

$s = $user.samaccountname.Split(‘.’)[0] + ‘.’ + $engsurname #(Svetlana.Sidorova)
$u = $user.samaccountname.Split(‘.’)[0] + ‘.’ + $engsurname + ‘@’ + $user.userprincipalname.Split(‘@’)[1] #Svetlana.Sidorova@viamonstra.com

Решения конечно не очень элегантные, PowerShell очень гибкий язык и позволяет решить проблему разными способами, у меня способ прямолинейный.=)

Обрабатываем нашего юзера

$user | Set-ADUser -SamAccountName $s -Surname $newsurname -DisplayName $name -UserPrincipalName $u -PassThru | Rename-ADObject -NewName $Name

Так же было бы не плохо изменить почтовый ящик в Exchange для этого на компьюторе должны быть загружены командлеты powershell для работы с  Exchange. У меня они загружаются автоматический через профиль PowerShell

$wc = New-Object System.Net.WebClient
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://excange/powershell
Import-PSSession $s

Командой

Get-Mailbox -Identity $name | Set-Mailbox -Alias $s

Меняем Alias от которого зависит как будет выглядеть почтовый ящик пользователя.

Вот в принципе и все. В идеале отправить письмо с оповещение, о смене логина и почты,потому как при следующем входе в систему потребуется ввести новый логин.

 

 

Advertisements

About alexandrelizarov

SCCM,MDT and Powershell learner.
This entry was posted in Active Directory, powershell and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s