Автоматизация создания пользователя с созданием почтового ящика и включения в Lync
24.07.2014 - 21:05
Устал я, как-то, создавать пользователей, лезть на Exchange 2010, загружать Lync 2013 Control Panel и решил "сварганить" скриптец. Сказать "написать" мне стыдно, потому что собирал на коленке.
- Для создания учётной записи, необходимо указать в параметрах Имя, Фамилию, Номер мобильного телефона, Skype. Скриптец пишет какой-то лог в той же директории, в которой находится скрипт (чтобы далеко не ходить). В случае ошибки на каком-то шаге, ошибка пишется в лог и скрипт либо обрывается, либо не выполняет действий, которые могли бы что-нибудь сломать.
- При создании пользователя учитывалось, что Skype - домашний телефон (можно изменить поле или описание). Устанавливается скрипт на логон (-ScriptPath "logon.cmd"), который находится в каталоге NETLOGON на контроллере домена. При создании пользователя, в консоли система попросит ввести пароль, это потому, что пароль должен быть секьюрным (-AsSecureString), а вписать в текст скрипта его нельзя. Также, снял галочку "Сменить пароль при первом входе", потому что профиль пользователя дальше нужно настраивать. Добавляет пользователя в группу "ORG_ALL", в которой указаны все активные пользователи (эта группа меньше, чем AuthenticatedUsers).
- Подключение к Exchange 2010 используется подключение по удалённой сессии. При подключении используется "веб страница" консоли PowerShell-a CAS сервера: http://CAS01.org.local/PowerShell/ , где вместо "CAS01.org.local" нужно указать FQDN сервера, либо FQDN CAS-array. Также, указана БД, в которой создаются ящики, можно убрать. После отработки, сессия удаляется. После создания ящика, в консоль выводится вся информация про ящик (зачем нужна - не знаю, на момент написания, думал, что нужна, убрать лень )
- Касательно Lync-а, соединение тоже по удалённой сессии, но, так как использовать "-Authentication Kerberos" нельзя, то придётся вводить вручную пароль администратора, который имеет права CSAdministrator. С Lync-ом вообще вышло некрасиво, но не было ни времени, ни желания вылизывать. При подключении, в параметре -ConnectionURI “https://FE01.org.local/OcsPowershell” следует указать FQDN Front-End сервера (Standard Edition), либо FQDN Enterprise Edition Pool (Enterprise Edition). При создании УЗ, в параметре "-RegistrarPool FE01.org.local" следует указать FQDN пула регистратора - тоже, что и в предыдущем предложении . Хотел, так же, сделать подробную информацию по созданному пользователю в Lync, но, почему-то информацию не выводит, а выдаёт ошибку, хотя этот пользователь существует, и если ввести эту строку отдельно, то работает . Думаю, это из-за медленной синхронизации информации, хотя, с чем там синхронизироваться, сервер-то один? Не было времени разбираться.
param(
[string]$UserName = $(throw "-User Name is required."),
[string]$UserSurname = $(throw "-User Surname is required."),
[string]$Skype,
[string]$Mobile)
$log = [io.path]::GetDirectoryName($MyInvocation.MyCommand.Path)+ "\" +[io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Path)+".log"
Out-File -FilePath $log -InputObject (Get-Date -Format "dd-MM-yyy") -Encoding utf8 -Append
Out-File -FilePath $log -InputObject ("Add new user: " + $Name + "." + $Surname) -Encoding utf8 -Append
if (!(Get-Module -Name ActiveDirectory))
{
# Включить модуль
import-module ActiveDirectory -ErrorVariable err
if ([string]::IsNullOrEmpty($err))
{
Out-File -FilePath $log -InputObject "Active Directory module imported." -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject "Active Directory module not imported. Program terminated." -Encoding utf8 -Append
Break
}
}
$OUPath = "OU=Active,OU=Users,OU=City,DC=org,DC=local"
$firm = "ООО"
$SAMAccountName = $UserSurname.substring(0,3)+$UserName.substring(0,2)
#Create User
New-ADUser -SamAccountName $SAMAccountName -UserPrincipalName ($SAMAccountName + "@org.local") -Name ($UserName + " " + $UserSurname) -GivenName $UserName -Surname $UserSurname -DisplayName ($UserSurname + " " + $UserName + " " + $firm) -MobilePhone $Mobile -HomePhone $Skype -Company $firm -ScriptPath "logon.cmd" -HomePage "www.org.com" -AccountPassword (Read-Host -AsSecureString "AccountPassword") -ChangePasswordAtLogon $false -Path $OUPath -Enabled $True -ErrorVariable Err
if ([string]::IsNullOrEmpty($err))
{
Add-ADGroupMember -Identity "ORG_All" -Members $SAMAccountName -ErrorVariable GErr
if ([string]::IsNullOrEmpty($GErr))
{
Out-File -FilePath $log -InputObject ("User " + $UserName + "." + $UserSurname + " created and added as a member to ORG_All group successfully.") -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("User " + $UserName + "." + $UserSurname + " was not added to ORG_All. Error: "+$GErr) -Encoding utf8 -Append
}
}
else
{
Out-File -FilePath $log -InputObject ("Program terminated. Error: "+$err) -Encoding utf8 -Append
Break
}
#New session to Exchange server
$SessionEx = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://CAS01.org.local/PowerShell/" -Authentication Kerberos
Import-PSSession $SessionEx -ErrorVariable err
if ([string]::IsNullOrEmpty($err))
{
#Create new mailbox
Get-User -Identity $SAMAccountName | Enable-Mailbox -Database "DB_Mail01" -ErrorVariable ExErr
if ([string]::IsNullOrEmpty($ExErr))
{
Out-File -FilePath $log -InputObject (Get-Mailbox -Identity $SAMAccountName) -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("Mailbox for user " + $UserName + "." + $UserSurname + " was/wasn't created. Error: "+$ExErr) -Encoding utf8 -Append
}
Remove-PSSession $SessionEx
}
else
{
Out-File -FilePath $log -InputObject ("Mailbox for user " + $UserName + "." + $UserSurname + " was not created. Error: "+$err) -Encoding utf8 -Append
}
#New session to Lync Server
$Credentials = Get-Credential
$SessionLync = New-PSSession -ConnectionURI “https://FE01.org.local/OcsPowershell” -Credential $Credentials
Import-PSSession $SessionLync -ErrorVariable Err
if ([string]::IsNullOrEmpty($err))
{
Enable-CsUser -Identity $SAMAccountName -RegistrarPool FE01.org.local -SipAddressType EmailAddress -ErrorVariable LErr
if ([string]::IsNullOrEmpty($LErr))
{
Out-File -FilePath $log -InputObject (Get-CsUser -Identity ("sip:" + $UserName + "." + $UserSurname + "@org.com")) -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("Lync account for user " + $UserName + "." + $UserSurname + " was/wasn't created. Error: "+$LErr) -Encoding utf8 -Append
}
Remove-PSSession $SessionLync
}
else
{
Out-File -FilePath $log -InputObject ("Lync account for user " + $UserName + "." + $UserSurname + " was not created. Error: "+$err) -Encoding utf8 -Append
}
[string]$UserName = $(throw "-User Name is required."),
[string]$UserSurname = $(throw "-User Surname is required."),
[string]$Skype,
[string]$Mobile)
$log = [io.path]::GetDirectoryName($MyInvocation.MyCommand.Path)+ "\" +[io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Path)+".log"
Out-File -FilePath $log -InputObject (Get-Date -Format "dd-MM-yyy") -Encoding utf8 -Append
Out-File -FilePath $log -InputObject ("Add new user: " + $Name + "." + $Surname) -Encoding utf8 -Append
if (!(Get-Module -Name ActiveDirectory))
{
# Включить модуль
import-module ActiveDirectory -ErrorVariable err
if ([string]::IsNullOrEmpty($err))
{
Out-File -FilePath $log -InputObject "Active Directory module imported." -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject "Active Directory module not imported. Program terminated." -Encoding utf8 -Append
Break
}
}
$OUPath = "OU=Active,OU=Users,OU=City,DC=org,DC=local"
$firm = "ООО"
$SAMAccountName = $UserSurname.substring(0,3)+$UserName.substring(0,2)
#Create User
New-ADUser -SamAccountName $SAMAccountName -UserPrincipalName ($SAMAccountName + "@org.local") -Name ($UserName + " " + $UserSurname) -GivenName $UserName -Surname $UserSurname -DisplayName ($UserSurname + " " + $UserName + " " + $firm) -MobilePhone $Mobile -HomePhone $Skype -Company $firm -ScriptPath "logon.cmd" -HomePage "www.org.com" -AccountPassword (Read-Host -AsSecureString "AccountPassword") -ChangePasswordAtLogon $false -Path $OUPath -Enabled $True -ErrorVariable Err
if ([string]::IsNullOrEmpty($err))
{
Add-ADGroupMember -Identity "ORG_All" -Members $SAMAccountName -ErrorVariable GErr
if ([string]::IsNullOrEmpty($GErr))
{
Out-File -FilePath $log -InputObject ("User " + $UserName + "." + $UserSurname + " created and added as a member to ORG_All group successfully.") -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("User " + $UserName + "." + $UserSurname + " was not added to ORG_All. Error: "+$GErr) -Encoding utf8 -Append
}
}
else
{
Out-File -FilePath $log -InputObject ("Program terminated. Error: "+$err) -Encoding utf8 -Append
Break
}
#New session to Exchange server
$SessionEx = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://CAS01.org.local/PowerShell/" -Authentication Kerberos
Import-PSSession $SessionEx -ErrorVariable err
if ([string]::IsNullOrEmpty($err))
{
#Create new mailbox
Get-User -Identity $SAMAccountName | Enable-Mailbox -Database "DB_Mail01" -ErrorVariable ExErr
if ([string]::IsNullOrEmpty($ExErr))
{
Out-File -FilePath $log -InputObject (Get-Mailbox -Identity $SAMAccountName) -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("Mailbox for user " + $UserName + "." + $UserSurname + " was/wasn't created. Error: "+$ExErr) -Encoding utf8 -Append
}
Remove-PSSession $SessionEx
}
else
{
Out-File -FilePath $log -InputObject ("Mailbox for user " + $UserName + "." + $UserSurname + " was not created. Error: "+$err) -Encoding utf8 -Append
}
#New session to Lync Server
$Credentials = Get-Credential
$SessionLync = New-PSSession -ConnectionURI “https://FE01.org.local/OcsPowershell” -Credential $Credentials
Import-PSSession $SessionLync -ErrorVariable Err
if ([string]::IsNullOrEmpty($err))
{
Enable-CsUser -Identity $SAMAccountName -RegistrarPool FE01.org.local -SipAddressType EmailAddress -ErrorVariable LErr
if ([string]::IsNullOrEmpty($LErr))
{
Out-File -FilePath $log -InputObject (Get-CsUser -Identity ("sip:" + $UserName + "." + $UserSurname + "@org.com")) -Encoding utf8 -Append
}
else
{
Out-File -FilePath $log -InputObject ("Lync account for user " + $UserName + "." + $UserSurname + " was/wasn't created. Error: "+$LErr) -Encoding utf8 -Append
}
Remove-PSSession $SessionLync
}
else
{
Out-File -FilePath $log -InputObject ("Lync account for user " + $UserName + "." + $UserSurname + " was not created. Error: "+$err) -Encoding utf8 -Append
}
Прошу прощения за недоработанный скрипт, но, думаю, и такой он пригодится людям :COOL:
- Войдите на сайт для отправки комментариев
- Версия для печати