Вдохновившись постом @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" echo "***********************************" echo "Процесс MicroSip завершен успешно!" echo "Начиначем обновление конфигурации программы..." echo "***********************************" } else { # Если процесс Microsip не найден, уведомляем пользователя echo "***********************************" echo "Запущениый роцесс Microsip не найден!" echo "Начиначем установку программы MicroSip..." echo "***********************************" }
Проверяем наличие установленного клиента MicroSip:
# Путь до директории с программой $dir_microsip = "$env:APPDATA\MicroSIP" # Проверяем существует ли $dir_microsip if (!(Test-Path -Path $dir_microsip)) { echo "***********************************" echo "Идет установка программы Microsip..." echo "***********************************" # Создаем папку Microsip New-Item -Path "$env:APPDATA\MicroSIP" -ItemType Directory # Копируем программу Microsip из сетевой дириктории в AppData пользователя Copy-Item -Path "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\Microsip\Distr\*" -Destination "$env:APPDATA\MicroSIP" -Force echo "***********************************" echo "Программа Microsip успешно установлена!" echo "***********************************" } else { # Иначе уведомляем пользователя об ранее установленной программе echo "***********************************" echo "Программа Microsip была установлена ранее!" echo "***********************************" }
Если есть необходимость можно разместить ярлык на рабочем столе пользователя:
# Путь до ярлыка $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 успешно добавлен!" } else { # Иначе уведомляем, что он уже есть echo "***********************************" echo "Ярлык для программы был создан ранее!" echo "***********************************" }
Принудительно обновляем файл контактов
# Принудительно обновляем файл контактов $contacts = "\\ИМЯ_СЕРВЕРА\NETLOGON\soft\Microsip\Settings\Contacts.xml" Copy-Item -Path $contacts -Destination "$env:APPDATA\MicroSIP" -Force echo "***********************************" echo "Файл с контактами обновлен успешно!" echo "***********************************"
Если есть необходимость то можно каждый раз удалять файл конфигурации, но тогда потеряется история вызовов — они хранятся именно в нем (пока не разобрался как вынести в отдельный или если есть другие варианты напишите — добавлю в статью)
#Чистим старый файл конфигурации Remove-Item -Path "$env:APPDATA\MicroSIP\microsip.ini"
Далее собираем файл настроек для пользователя:
# Путь до конфигурационного файла $conf_user = "$env:APPDATA\MicroSIP\microsip.ini" # Проверяем существует ли ярлык на рабочем столе if (Test-Path -Path $conf_user) { echo "***********************************" echo "Файл конфигурации уже присутствует в директории!" echo "Дальнейших действий не требуется..." echo "***********************************" } else { # Получаем данные из полей доменной ученой записи пользователя 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 echo "***********************************" echo "Базовая конфигурация успешно скопирована в директорию с программой!" echo "***********************************" # Добавляем пользовательские настройки в файл общих настроек (объединяем файлы - общий + пользовательский) Add-Content -Path "$env:APPDATA\MicroSIP\microsip.ini" -Value (Get-Content -Path "$conf_user") -Force echo "***********************************" echo "Конфигурация пользователя успешно добавлена к базовой!" echo "***********************************" # Запуск MicroSip после внесения изменений Start-Process -FilePath "$env:APPDATA\MicroSIP\microsip.exe" echo "***********************************" echo "Программа Microsip успешно запущена!" echo "Приятного пользоватния!" echo "***********************************" }
Запускаем ранее завершенный процесс MicroSip если изменения не понадобились:
# Запуск MicroSip $process = Get-Process -Name "MicroSip" -ErrorAction SilentlyContinue # Если процесс Microsip не равен 0,то if ($process -ne $null) { echo "***********************************" echo "Процесс MicroSip работает!" echo "Приятного пользования..." echo "***********************************" } else { # Если процесс Microsip не найден, запускаем его Start-Process -FilePath "$env:APPDATA\MicroSIP\microsip.exe" echo "***********************************" echo "Программа microSip успешно запущена!" echo "Приятного пользования..." echo "***********************************" }
Теперь можно создать политику в AD и при запуске системы выполнять данный скрипт под пользователем.
Прошу строго не судить, если есть чем дополнить (исправить) пишите в комментариях — буду рад и обязательно добавлю в статью.
ссылка на оригинал статьи https://habr.com/ru/post/717540/
Добавить комментарий