Loading

Автоматизация создания пользователя с созданием почтового ящика и включения в 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. Также, указана БД, в которой создаются ящики, можно убрать. После отработки, сессия удаляется. После создания ящика, в консоль выводится вся информация про ящик (зачем нужна - не знаю, на момент написания, думал, что нужна, убрать лень Laughing)
  • Касательно 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 пула регистратора - тоже, что и в предыдущем предложении Happy. Хотел, так же, сделать подробную информацию по созданному пользователю в Lync, но, почему-то информацию не выводит, а выдаёт ошибку, хотя этот пользователь существует, и если ввести эту строку отдельно, то работает Confused. Думаю, это из-за медленной синхронизации информации, хотя, с чем там синхронизироваться, сервер-то один? Don''t Understand Не было времени разбираться.

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
}

Прошу прощения за недоработанный скрипт, но, думаю, и такой он пригодится людям :COOL:

Голосов пока нет