PowerShell · 27.09.2024

Агент Zabbix’a на связи

Ранее уже был пост про обновление агента Zabbix в домене. Помнится, та ещё была эпопея. Сегодня тема поста про установку агента Zabbix на вновь внедряемые в инфраструктуру рабочие станции.

Данная статья касается только автоматизации установки агента и запуска службы Zabbix Agent в операционной системе Windows с использованием PowerShell. Агента можно забрать здесь (прямая ссылка на архив).

Для работы PS1-скрипта обязательно наличие на сетевом ресурсе подготовленной папки с файлами агента, включая сформированный унифицированный файл конфигурации. Далее скрипт копирует папку из сетевого ресурса на системный диск хоста, корректирует файл конфигурации с учётом полного доменного имени компьютера и запускает службу агента.

Содержимое файла конфигурации zabbix_agentd.win.conf максимально упрощено и сведено до таких параметров:

LogFile=c:\zabbix_agentd.log
Server=192.168.1.100
ServerActive=192.168.1.100
Hostname=namepc
Timeout=30

Код скрипта:

# Заголовок скрипта #
[System.Console]::Title = "Установка ZabbixAgent"

# Функция проверки службы #
function GetService
{
    Param([Parameter(Mandatory=$true)]$Name)
    $getservice = Get-Service -Name $Name -ErrorAction SilentlyContinue
    if ($getservice -eq $null)
    {
        return $false
    } 
    else
    {
        return $true
    }
}

# Пути установки #
$source = "\\server\agent"
$destination = "$env:SystemDrive\zabbix"
$configfile = "$env:SystemDrive\zabbix\zabbix_agentd.win.conf"

# Полное имя хоста #
$hostname = ([System.Net.Dns]::GetHostByName($env:computerName).HostName).ToLower()

# Имя службы #
$service = "Zabbix Agent"

# Данные для замены в конфигурационном файле #
$oldhost = "Hostname=namepc"
$newhost = "Hostname=" + $hostname

# Установка  #
try
{
    # Копирование файлов #
    Write-Host "Копирование файлов $service..." -ForegroundColor Green
    Copy-Item -Path $source -Destination $destination -Force -Recurse -ErrorAction Stop

    # Формирование файла конфигурации #
    Write-Host "Формирование файла конфигурации..." -ForegroundColor Green
    (Get-Content $configfile) -replace $oldhost, $newhost | Out-File $configfile -ErrorAction Stop -Encoding ASCII

    # Установка службы #
    Write-Host "Установка службы $service..." -ForegroundColor Green
    & $env:SystemDrive\zabbix\zabbix_agentd.exe --config $env:SystemDrive\zabbix\zabbix_agentd.win.conf --install

    # Поиск службы и запуск #
    if (GetService -Name $service)
    {
        Write-Host "Настройка и запуск $service..." -ForegroundColor Green
        Set-Service -Name $service -StartupType Automatic -ErrorAction Stop
        Start-Service -Name $service -ErrorAction Stop
    }
    else
    {
        Write-Host "Во время установки службы $service произошла ошибка!" -ForegroundColor Red
    }
}
catch
{
    Write-Host "Ошибка установки Zabbix Agent на $hostname..." -ForegroundColor Red
}

# Спим 10 минут перед закрытием #
Sleep(10)

Требуется только присвоить переменной $source адрес папки с файлами агента.

Разумеется, предполагается запуск от имени администратора.

Скрипт можно скомпилировать в исполняемый файл, используя модуль PS2EXE.