Распространение агентов на большое количество Windows-станций средствами PowerShell

Недавно передо мной встала задача — быстро установить большое количество Zabbix-агентов на Windows-компьютеры. Я решил, что это можно и нужно решать с помощью скриптов. В качестве «языка» я выбрал Powershell.

Powershell v2.0+ предлагает очень удобные средства удаленного запуска (Powershell Remoting) и я бы с удовольствием использовал бы их, но в моем случае имелась одна проблема — на «пути» могли попадаться сервера с Windows Server 2003 (без необходимых апдейтов), поэтому я принял решение использовать psexec.exe

Мне нужно было максимально автоматизированное решение, поэтому я писал такой скрипт, в который я загружаю список DNS-имен серверов из файла, а на выходе получаю XML-файл для импорта в Zabbix.

Первое, что нам надо сделать, это положить на общий ресурс папку (\\server\share\DeployZabbix), в которой будут:

  • Файл агента для x86-систем (zabbix_agentd86.exe)
  • Файл агента для x64-систем (zabbix_agentd64.exe)
  • Файл конфигурации zabbix_agentd.conf (в котором нужно указать хотя бы адрес/DNS-имя Zabbix-сервера)
  • 2 батника, Install86.bat и Install64.bat со следующим содержанием:
    Install86.bat
    "C:\Program Files\Zabbix\zabbix_agentd86.exe" --config "C:\Program Files\Zabbix\zabbix_agentd.conf" --install
    net start "Zabbix Agent"
    Install64.bat
    "C:\Program Files\Zabbix\zabbix_agentd64.exe" --config "C:\Program Files\Zabbix\zabbix_agentd.conf" --install
    net start "Zabbix Agent"

Второе, что нам потребуется, это папка, в которой будет лежать скрипт для разворачивания агентов, и все необходимое для его работы:

  • Собственно, сам скрипт
    DeployZabbix.ps1
    Remove-Item .\out.txt #уберем старые файлы
    Remove-Item .\out.xml #уберем старые файлы
    copy .\Source1.txt .\out.txt #скопируем первую часть xml в новый файл
    #импортируем список компьютеров
    Import-CSV ".\computers.csv" -header("ComputerName") | ForEach {
    $ComputerName = $_.ComputerName #чуть-чуть упростим, мне так удобнее :)
    New-Item "\\$ComputerName\c$\Program Files\Zabbix" -Type Directory
    $path = "\\$ComputerName\c$\Program Files\Zabbix"
    Copy-Item \\server\share\DeployZabbix\* $path
    $bit = Get-WmiObject Win32_Processor -computername $ComputerName | where {$_.DeviceID -eq "CPU0"} | Select AddressWidth
    if ($bit -like '*64*') {
    .\psexec.exe \\$ComputerName "C:\\Program Files\Zabbix\Install64.bat" -h
    }
    else {
    .\psexec.exe \\$ComputerName "C:\\Program Files\Zabbix\Install86.bat" -h
    }
    Add-Content .\out.txt ('<host>')
    Add-Content .\out.txt ('<host>' + $_.ComputerName + '</host>')
    Add-Content .\out.txt ('<name>' + $_.ComputerName + '</name>')
    gc Source2.txt | Out-File .\out.txt -Append -Encoding default
    Add-Content .\out.txt ('<dns>' + $_.ComputerName + '</dns>')
    gc Source3.txt | Out-File .\out.txt -Append -Encoding default
    }
    Add-Content .\out.txt ('</hosts>')
    Add-Content .\out.txt ('</zabbix_export>')
    Rename-Item .\out.txt "out.xml"
  • Три .txt-файла (Source1.txt, Source2.txt, Source3.txt) — это «куски» .xml файла, который получится на выходе. Не забудьте заменить группу «Default» на нужную Вам в тексте.
    source1.txt
    <?xml version="1.0" encoding="UTF-8"?>
    <zabbix_export>
        <version>2.0</version>
        <date>2012-11-21T09:18:17Z</date>
        <groups>
            <group>
                <name>Default</name>
            </group>
        </groups>
        <hosts>
    source2.txt
    <proxy/>
                <status>0</status>
                <ipmi_authtype>-1</ipmi_authtype>
                <ipmi_privilege>2</ipmi_privilege>
                <ipmi_username/>
                <ipmi_password/>
                <templates>
                    <template>
                        <name>Template OS Windows</name>
                    </template>
                </templates>
                <groups>
                    <group>
                        <name>Default</name>
                    </group>
                </groups>
                <interfaces>
                    <interface>
                        <default>1</default>
                        <type>1</type>
                        <useip>0</useip>
                        <ip/>
    source3.txt
    <port>10050</port>
                        <interface_ref>if1</interface_ref>
                    </interface>
                </interfaces>
                <applications/>
                <items/>
                <discovery_rules/>
                <macros/>
                <inventory/>
            </host>
  • Собственно, сам psexec.exe (взять его можно отсюда). Не забудьте положить распакованный psexec.exe в папку со скриптом
  • Файл computers.csv, в котором FQDN-имена серверов идут каждый с новой строчки.

Затем, получившийся .xml-файл (который будет лежать в каталоге со скриптом) импортируем в список хостов в Zabbix.

rasprostranenie_agentov_na_bolshoe_kolichestvo_windows-stancij_sredstvami_powershell.txt · Последние изменения: 2013/11/21 13:23 (внешнее изменение)
GNU Free Documentation License 1.3
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Яндекс.Метрика