Auto Provisioning клиента «MicroSip» скриптом на Power Shell

—

от автора

Вдохновившись постом @StuxForce решил написать свой вариант автоматической установки и конфигурирования клиента MicroSIp на компьютеры доменной сети. Получился вполне рабочий вариант, который при необходимости можно настроить под свою компанию.

Для реализации данной затеи нам понадобится:

  1. Сам клиент MicroSip (качаем с официального сайта)

  2. В папке MicroSip будут:

    1. Distr — в ней хранится неизменяемая часть программы;

    2. Settings — туда мы кладем файлы Contacts.xml и microsip.ini;

    3. Users — в нее мы будем генерировать файл личных настроек пользователя.

  3. Русификация программы выполняется путем добавления в папку Distr файла langpack_russian.txt.

  4. Размещаем папку 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *