Задача: Разобрать, как посредством Zabbixсервиса (Центр единого мониторинга за вверенной инфраструктурой) запускать PowerShell скрипты с Windows системы с целью получения необходимой информации: события, значения, текст.

В роли Windows системы выступит: Windows 7 Pro SP1 x86, где powershell был обновлен с версии 2.0 до версии 5.0.

В роли Zabbix выступит релиз 3.2.1 развернутый и применяемый в повседневности на Ubuntu Trusty Server amd64.

Перво наперво нужно разрешить выполнение ps1 скриптов на системе Windows, т. к. по умолчанию в PowerShell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell. Можно разрешить выполнение PowerShell скриптов если Windows системы объединены в домен соответствующей групповой политикой, либо же единичным запуском вот такого вот bat-файла и обязательно с правами администратора:

%systemroot%\system32\WindowsPowerShell\v1.0\powershell -Command Set-ExecutionPolicy RemoteSigned

После этого запуск ps1 скриптов будет отрабатываться и не прерываться ошибкой.

Скрипт на PowerShell который вычисляет размер свободного места на логическом диске C:

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}" -f [math]::truncate($disk.FreeSpace / 1GB))

Сохраняю его на диске c:\script\diskc_free_space.ps1

Затем на клиентском компьютере в конфигурационном файле агента Zabbix прописываем:

LogFile=c:\zabbix_agentd.log

LogFileSize=10

DebugLevel=2

Server=10.7.8.121

ListenPort=10050

Hostname=W7X86

EnableRemoteCommands=1

LogRemoteCommands=1

Timeout=30

UserParameter=diskcfreespace[*],PowerShell.exe -nologo "C:\script\diskc_free_space.ps1" "diskcfreespace"

После перезапускаю службу агента:

C:\Windows\system32>net stop "Zabbix Agent" && net start "Zabbix Agent"

После перехожу в домашний каталог где установлен Zabbix агент и проверяю, получает ли агент информацию через параметр:

C:\Program Files\zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k diskcfreespace

zabbix_get.exe [624]: Get value error: ZBX_TCP_WRITE() failed: [0x00002745] ╨Я╤А

╨╛╨│╤А╨░╨╝╨╝╨░ ╨╜╨░ ╨▓╨░╤И╨╡╨╝ ╤Е╨╛╤Б╤В-╨║╨╛╨╝╨┐╤М╤О╤В╨╡╤А╨╡ ╤А╨░╨╖╨╛╤А╨▓╨░╨╗╨░

╤Г╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜╨╜╨╛╨╡ ╨┐╨╛╨┤╨║╨╗╤О╤З╨╡╨╜╨╕╨╡.

А если просто запустить и cmd.exe то строка отрабатывает:

C:\Program Files\zabbix>PowerShell.exe -nologo "C:\script\diskc_free_space.ps1"

15

Ладно, переключаюсь на сервер Zabbix и проверяю обращение к агенту с целью получение информации со скрипта на PowerShell. Создаю элемент данных в шаблоне Template OS Windows

Name: diskcfreespace

Type: Zabbix agent

Key: diskcfreespace

Host interface: 10.7.8.97:10050

Type of information: Numeric (unsigned)

Data type: Decimal

Units: Gb

Update interval (in sec): 60

History storage period (in days): 7

Trend storage period (in days): 365

После нажимаю Update и через некоторое время перейдя: Monitoring — Latest Data — отсортировав по хосту на котором я проверяю работоспособность извлечения информации через powershell скрипт, а именно:

  • Hosts = W7X86
  • Name = diskcfreespace

и нажимаю кнопку Apply, вот что я вижу, есть последняя временная проверка, последнее значение и возможность перейти щелкнув на Graph к графику где будут представлены изменения с учетом времени постановления на мониторинг

Элемент данных PowerShell успешно добавлен в ZabbixПерехожу по гиперссылке Graph и наблюдаю, как возвращаются значения от выполнения скрипта на рабочей станции:

График изменения по параметру скрипта PowerShell успешно строится

Представленный скачок изменения количества свободного места был сымитирован командой создания на рабочей станции W7X86 файл на один гигабайт:

C:\Windows\system32>fsutil file createnew c:\file.txt 1000000000

Файл c:\file.txt создан

Итого, я для себя в первую очередь разобрал, как задействовать powershell на рабочих станциях и серверных системах, а не как ранее bat скрипты. Хотя можно и комбинировать, главное решить поставленную задачу, а инструмент может быть любым. На этом я пока прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru