În acest articol, ne vom uita la configurarea agentului Zabbix pentru a prelua datele de monitorizare din scripturile PowerShell. Să ne uităm la două scripturi PowerShell pentru a obține câteva date în Zabbix. Primul returnează numărul de sesiuni de utilizator RDP active pe un server Windows RDS, iar al doilea returnează numărul de zile de când actualizările Windows au fost instalate ultima dată pe server.
Agentul Zabbix are două caracteristici pentru preluarea datelor dintr-un script PowerShell extern:
- TheUserParameteropțiunea din fișierul de configurare al agentului vă permite să executați codul PowerShell. Dacă utilizați această opțiune, trebuie să activați opțiunea UserParameter și să copiați fișierul script PS1 în fiecare gazdă Windows.
- Puteți rula scripturi PowerShell folosindsistem.rulare. Acest lucru vă permite să specificați scriptul PowerShell direct în interfața web Zabbix și puteți rula comenzi arbitrare.
Să începem cu un exemplu de rulare a unui script PowerShell folosind UserParameter. Să presupunem că aveți deja un agent Zabbix instalat și configurat pe computerul dvs. Windows.
Anterior, v-am arătat cum să utilizați UserParameter pentru a rula un script bash în Zabbix pentru a verifica data de expirare a unui domeniu.
Află mai multe:Monitorizarea expirării certificatului SSL/TLS al site-ului web cu Zabbix
Creați un script PowerShell simplu care returnează numărul de sesiuni RDP active și salvați-l într-un fișier: 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
De asemenea, puteți obține informații despre conexiunile RDS active din jurnalele de vizualizare a evenimentelor.
Acum editați fișierul de configurare a agentului Zabbix (zabbix_agent2.conf) și adăugați opțiunea:
UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1"

The-ExecutionPolicy bypassparametrul vă permite să rulați un script PowerShell fără a modifica setările politicii de execuție PowerShell.
Reporniți serviciul Zabbix Agent:
Get-Service 'Zabbix Agent 2'| Restart-Service -force
Asigurați-vă că agentul Zabbix poate primi datele de la noul parametru. Utilizați sistemul încorporatzabbix-getinstrument de linie de comandă pentru a testa agentul:
zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions
În acest exemplu, Zabbix a rulat un script PowerShell și a returnat că există două sesiuni de utilizator RDP active pe gazdă.


Codul PowerShell rulează de obicei destul de lent. Prin urmare, trebuie să măriți timpul de expirare în configurația agentului de la 3 secunde implicite la 20 de secunde (setatTimeout=20), în caz contrar, Zabbix va returna o eroare la primirea datelor dintr-un script:
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
Când rulați comanda, puteți vedea o altă eroare:
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.
Dacă da, permiteți acceptarea conexiunilor locale în fișierul de configurare a agentului (zabbix_agent2.conf). Adăugați adresa 127.0.0.1.
Server=192.168.10.100,127.0.0.1
Apoi puteți adăuga un nou parametru șablonului. Du-te laArticoletab și setați:
- Nume: numărul de sesiuni RDS active
- Tip: Agent Zabbix (activ)
- Cheie: ActiveRDSSessions
- Tip de informații: numerice (nesemnate)
- Interval de actualizare: 1m
- Perioada de stocare a istoricului: 90d
- Perioada de stocare a tendințelor: 365d


Du-te laMonitorizare->Ultimele dateși verificați dacă Zabbix primește acum valoarea din scriptul PowerShell.
Acum, să permitem rularea scripturilor PowerShell folosindsistem.rulare. Această metodă este mai puțin sigură, deoarece puteți rula orice comandă pe gazda la distanță prin Zabbix. Cu toate acestea, este convenabil deoarece permite configurarea scripturilor PowerShell direct din interfața web Zabbix.
Activați următorul parametru în fișierul de configurare al agentului:
AllowKey=system.run[*]
Apoi creați un nou ZabbixArticol:
- Nume: Zile de la ultima instalare Windows Update
- Tip: Agent Zabbix
- Cheie:
system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"] - Tip de informații: numerice (nesemnate)
- Interval de actualizare: 1d
- Istorie: 180d
- Trenfd: 365d
Această comandă returnează numărul de zile de la ultima instalare a unei actualizări de securitate pe Windows.
Așa că ne-am uitat la modul în care puteți obține date în Zabbix din scripturile PowerShell care rulează pe Windows.












