W tym artykule przyjrzymy się konfigurowaniu Agenta Zabbix w celu pobierania danych monitorowania ze skryptów PowerShell. Przyjrzyjmy się dwóm skryptom PowerShell, które pobierają dane do Zabbix. Pierwsza zwraca liczbę aktywnych sesji użytkowników RDP na serwerze Windows RDS, a druga zwraca liczbę dni od ostatniej instalacji aktualizacji systemu Windows na serwerze.
Agent Zabbix posiada dwie funkcje pobierania danych z zewnętrznego skryptu PowerShell:
- TheParametr użytkownikaopcja w pliku konfiguracyjnym agenta pozwala na wykonanie kodu PowerShell. Jeśli użyjesz tej opcji, musisz włączyć opcję UserParameter i skopiować plik skryptu PS1 do każdego hosta Windows.
- Możesz uruchamiać skrypty PowerShell za pomocąsystem.run. Umożliwia to określenie skryptu PowerShell bezpośrednio w interfejsie WWW Zabbix i uruchamianie dowolnych poleceń.
Zacznijmy od przykładu uruchomienia skryptu PowerShell przy użyciu parametru UserParameter. Załóżmy, że masz już zainstalowanego i skonfigurowanego agenta Zabbix na komputerze z systemem Windows.
Poprzednio pokazaliśmy, jak użyć parametru UserParameter do uruchomienia skryptu bash w Zabbix w celu sprawdzenia daty wygaśnięcia domeny.
Utwórz prosty skrypt PowerShell, który zwraca liczbę aktywnych sesji RDP i zapisz go w pliku: C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1
$RDSsessions= qwinsta |ForEach-Object {$_ -replace "s{2,18}",","} | ConvertFrom-Csv
$RDSActiveSessions=@($RDSsessions| where State -eq 'Active').count
Write-Host $RDSActiveSessions
Informacje o aktywnych połączeniach RDS można także uzyskać z dzienników Podglądu zdarzeń.
Teraz edytuj plik konfiguracyjny agenta Zabbix (zabbix_agent2.conf) i dodaj opcję:
UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1"

The-ExecutionPolicy bypassParametr umożliwia uruchomienie skryptu PowerShell bez zmiany ustawień zasad wykonywania PowerShell.
Uruchom ponownie usługę Agenta Zabbix:
Get-Service 'Zabbix Agent 2'| Restart-Service -force
Upewnij się, że agent Zabbix może odebrać dane z nowego parametru. Skorzystaj z wbudowanegozabbix-getnarzędzie wiersza poleceń do testowania agenta:
zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions
W tym przykładzie Zabbix uruchomił skrypt PowerShell i zwrócił informację, że na hoście są aktywne dwie sesje użytkownika RDP.


Kod programu PowerShell zwykle działa dość wolno. Dlatego należy zwiększyć limit czasu w konfiguracji agenta z domyślnych 3 sekund do 20 sekund (ustawLimit czasu = 20), w przeciwnym razie Zabbix zwróci błąd podczas odbierania danych ze skryptu:
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
Podczas uruchamiania polecenia możesz zobaczyć kolejny błąd:
zabbix_get [4292]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host. zabbix_get [4292]: Check access restrictions in Zabbix agent configuration.
Jeśli tak, zezwól na akceptowanie połączeń lokalnych w pliku konfiguracyjnym agenta (zabbix_agent2.conf). Dodaj adres 127.0.0.1.
Server=192.168.10.100,127.0.0.1
Następnie możesz dodać nowy parametr do swojego szablonu. Idź doRzeczyzakładka i ustaw:
Polecana lektura:Generator skryptów AI: Zamień pomysły w skrypty za pomocą sztucznej inteligencji
- Nazwa: Liczba aktywnych sesji RDS
- Typ: Agent Zabbix (aktywny)
- Klucz: ActiveRDSSessions
- Rodzaj informacji: Numeryczny (bez znaku)
- Interwał aktualizacji: 1 m
- Okres przechowywania historii: 90d
- Okres przechowywania trendów: 365 dni


Idź doMonitorowanie->Najnowsze danei sprawdź, czy Zabbix otrzymuje teraz wartość ze skryptu PowerShell.
Teraz zezwólmy na uruchamianie skryptów PowerShell przy użyciusystem.run. Ta metoda jest mniej bezpieczna, ponieważ możesz uruchomić dowolne polecenie na zdalnym hoście poprzez Zabbix. Jest to jednak wygodne, ponieważ pozwala konfigurować skrypty PowerShell bezpośrednio z interfejsu sieciowego Zabbix.
Włącz następujący parametr w pliku konfiguracyjnym agenta:
AllowKey=system.run[*]
Następnie utwórz nowy ZabbixPrzedmiot:
- Nazwa: Dni od ostatniej instalacji Windows Update
- Typ: Agent Zabbix
- Klawisz:
system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"] - Rodzaj informacji: Numeryczny (bez znaku)
- Częstotliwość aktualizacji: 1d
- Historia: 180d
- Trend: 365d
To polecenie zwraca liczbę dni od ostatniej instalacji aktualizacji zabezpieczeń w systemie Windows.
Przyjrzeliśmy się więc, w jaki sposób można pobrać dane do Zabbix ze skryptów PowerShell działających w systemie Windows.











