Вдохновившись постом @StuxForce решил написать упрощённый вариант автоматической установки и конфигурирования клиента MicroSIp на компьютеры доменной сети. Получился вполне рабочий вариант, который легко можно настроить под свою компанию.
Для реализации данной затеи нам понадобится:
Сам клиент MicroSip (качаем с официального сайта)
В папке MicroSip будут:
Distr — в ней хранится неизменяемая часть программы;
Settings — туда мы кладем файлы Contacts.xml и microsip.ini;
Users — в нее мы будем генерировать файл личных настроек пользователя.
Русификация программы выполняется путем добавления в папку Distr файла langpack_russian.txt.
Размещаем папку MicroSip сетевой директории (например:Netlogon).
Итак вот сам скрипт, постарался детально прокомментировать. Возможно кому-то будет данный материал полезен.
Получаем статус процесса с именем MicroSip и завершаем его если таковой имеется:
# Получаем статус процесса с именем MicroSip $process = Get-Process -Name "MicroSip" -ErrorAction SilentlyContinue # Если процесс Microsip не равен 0,то if ($process -ne $null) { # Принудительно завершаем процесс Microsip Stop-Process -Name "MicroSip" }
Проверяем наличие установленного клиента MicroSip:
# Путь до директории с программой $dir_microsip = "$env:APPDATA\MicroSIP" # Проверяем существует ли $dir_microsip if (!(Test-Path -Path $dir_microsip)) { # Создаем папку Microsip New-Item -Path "$env:APPDATA\MicroSIP" -ItemType Directory # Копируем программу Microsip из сетевой дириктории в AppData пользователя Copy-Item -Path "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\Microsip\Distr\*" -Destination "$env:APPDATA\MicroSIP" -Force }
Если есть необходимость можно разместить ярлык на рабочем столе пользователя:
# Путь до ярлыка $link_microsip = "$env:USERPROFILE\Desktop\Microsip.lnk" # Проверяем существует ли ярлык на рабочем столе if (!(Test-Path -Path $link_microsip)) { # Создяем ярлык на рабочем столе пользователя если он не существует $target = "$env:APPDATA\MicroSIP\microsip.exe" $file = "$env:USERPROFILE\Desktop\Microsip.lnk" $shell = New-Object -comObject Wscript.Shell $shortcut = $shell.CreateShortcut($file) $shortcut.TargetPath = $target $shortcut.Save() echo "Ярлык Microsip успешно добавлен!" }
Принудительно обновляем файл контактов
# Принудительно обновляем файл контактов $contacts = "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\Microsip\Settings\Contacts.xml" Copy-Item -Path $contacts -Destination "$env:APPDATA\MicroSIP" -Force
Если есть необходимость то можно каждый раз удалять файл конфигурации, но тогда потеряется история вызовов — они хранятся именно в нем (пока не разобрался как вынести в отдельный или если есть другие варианты напишите — добавлю в статью)
#Чистим старый файл конфигурации Remove-Item -Path "$env:APPDATA\MicroSIP\microsip.ini"
Далее собираем файл настроек для пользователя:
# Путь до конфигурационного файла $conf_user = "$env:APPDATA\MicroSIP\microsip.ini" # Проверяем существует ли ярлык на рабочем столе if (!(Test-Path -Path $conf_user)) { # Получаем данные из полей доменной ученой записи пользователя ActiveDirectiry $UserName = $env:username $Filter = "(&(objectCategory=User)(samAccountName=$UserName))" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.Filter = $Filter $ADUserPath = $Searcher.FindOne() $ADUser = $ADUserPath.GetDirectoryEntry() $ADDisplayName = $ADUser.DisplayName $ADipPhone = $ADUser.ipPhone # Выбираем пароль для отдела # В конфигурационном файле пароль будет зашифрован if (($ADipPhone -ge 100) -eq ($ADipPhone -le 199)) { $pass = пароль } elseif (($ADipPhone -ge 200) -eq ($ADipPhone -le 299)) { $pass = пароль } elseif (($ADipPhone -ge 300) -eq ($ADipPhone -le 399)) { $pass = пароль } elseif (($ADipPhone -ge 400) -eq ($ADipPhone -le 499)) { $pass = пароль } elseif (($ADipPhone -ge 500) -eq ($ADipPhone -le 599)) { $pass = пароль } elseif (($ADipPhone -ge 600) -eq ($ADipPhone -le 699)) { $pass = пароль } elseif (($ADipPhone -ge 700) -eq ($ADipPhone -le 799)) { $pass = пароль } # Создаем пустой файл конфигурации пользователя $conf_user = New-Item -Path "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\Microsip\Users\$env:UserName.ini" -ItemType File -Force # Заполняем данными из ActiveDirectory переменную $txt $txt = "[Account1] label = $ADipPhone AuthID = $ADipPhone Username = $ADipPhone DisplayName = $ADDisplayName Password = $pass Server = ИМЯ_СЕРВЕРА_PBX Domain = ИМЯ_СЕРВЕРА_PBX [Settings] accountId = 1" # Перенаправляем вывод $txt в $conf_user echo $txt | out-file $conf_user -encoding UTF8 # Пусть до файла с общими настройками программы MicroSip $conf_simple = "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\MicroSip\Settings\microsip.ini" # Копируем из из сетевой директории файл общих настроек в профиль пользователя Copy-Item -Path $contacts -Destination "$env:APPDATA\MicroSIP" -Force # Добавляем пользовательские настройки в файл общих настроек (объединяем файлы - общий + пользовательский) Add-Content -Path "$env:APPDATA\MicroSIP\microsip.ini" -Value (Get-Content -Path "$conf_user") -Force # Запуск MicroSip после внесения изменений Start-Process -FilePath "$env:APPDATA\MicroSIP\microsip.exe" }
Запускаем ранее завершенный процесс MicroSip если изменения не понадобились:
# Запуск MicroSip $process = Get-Process -Name "MicroSip" -ErrorAction SilentlyContinue # Перезапускаем MicroSip if (!($process -ne $null)) { # Если процесс Microsip не найден, запускаем его Start-Process -FilePath "$env:APPDATA\MicroSIP\microsip.exe" }
Теперь можно создать политику в AD и при запуске системы выполнять данный скрипт под пользователем.
Прошу строго не судить, если есть чем дополнить (исправить) пишите в комментариях — буду рад и обязательно добавлю в статью.
