Aktionen

Zabbix Agent für Windows per Skript-automatisch installieren - Musterdatei

Aus znilwiki

Download: InstallZabbixAgent.zip

Important.png
Hinweis: 1: Die Templates für alle Erweiterungen über UserParameter liegen mit im Verzeichnis der Erweiterungen!
Important.png
Hinweis: 2: Das Skript entspricht der Version die ich auch bei Kunden einsetze - minus vieler Erweiterungen des Agenten per UserParameter die nicht von mir stammen

Dieses Installationsskript habe ich geschrieben um (meine) Anforderungen an die Installation zu erfüllen. Das Skript ist auch für Softwareverteilungssysteme geeignet. Ich brauchte etwas "flexibles" und z.B. den vollen DNS-Namen als Hostnamen.


Changelog

  • 06.11.2013: Erste Version
  • 14.11.2013: Erweiterte Version
    • Userparamter für automatische Windows Dienste Erkennung
    • Userparameter für verfügbare Windows Updates Erkennung
    • Öffnen der Firewall-Ports für den Agenten auf Host ab Windows Vista / Server 2008
    • Windows Agenten für 2.2.0 bereits im Zip mit drin
  • 15.11.2013: Erweiterte Version
    • Script prüft nun ob es die benötigten Rechte hat und fordert diese ggf. an (UAC-Kontrolle)
    • Script prüft Rechte am Anfang und startet sich ggf. mit Anforderung der Rechte selbst einmal neu
  • 17.11.2013: Erweiterte Version
    • 'znilTail.exe' wurde mit im tools aufgenommen - siehe: Zabbix Agent Tail Programm für Log-Dateien
    • Es wird zusätzlich eine 'znilTail-with-zabbix_agentd.log.cmd' erstellt welche die 'znilTail.exe'gleich mit der Log-Datei des Zabbix Agents startet
  • 17.03.2014:
    • Aktuelle Version von servdisc.exe Version 3.0.0.1 wurde eingepflegt
    • Dateien des Agenten nun Version 2.4.2
  • 24.03.2014:
    • Neue servdisc.exe Version 3.0.0.2 eingepflegt (Fehler mit servdisc-ignore.txt behoben)
  • 09.04.2014:
    • Geändertes Skript: Konfiguration ist nun vom eigentlichen Installationsskript getrennt. So kann man in Zukunft einfach eine neuere Version über die alte kopieren
    • Dateien und Konfiguration für Zabbix Agent Auto Updater wurde mit aufgenommen
    • Erweiterung für BackupExec 2010 wurde aufgenommen (wenn nicht genutzt wird diese auch nicht aufgerufen): Zabbix:Template BackupExec 2010 Jobs
    • Erweiterung für die automatische Aktualisierung des Zabbix-Agent wurde aufgenommen (ist per Default deaktiviert): Zabbix Agent Auto Updater
    • Erweiterung für Windows Updates Erkennung in aktueller Version: Zabbix:Template Windows Updates
    • Erweiertung die den Lizenzstatus von Windows und die Aktivierung abfragt wurde aufgenommen: Zabbix:Template Windows Lizenzstatus
    • Aktuelle znilTail.exe die immer mit Administratorenrechten läuft, ggf. wird über UAC angefragt (nötig um das Log-Level zu ändern)
    • Firewall-Ports werden nun auch auf Systemen ab Windows XP SP2 / Server 2003 geöffnet (Wenn es den Dienst Windows Firewall gibt)
  • 17.04.2014:
    • Agenten-Dateien in der Version 2.4.3
    • Aktuelle Version von znilTail.exe - Zusätzlicher Button für Agenten-Neustart + Bugfixes. Zusätzlich mit neuerer Compiler-Version erstellt da es einen Fehlalarm durch ein Virenschutzprogramm gab.
    • Fehler im Skript behoben - falls man nur den Computernamen ohne Suffix haben wollte wurde komische Zeichen an den Computernamen angehängt
    • Include Verzeichnis mit Musterdatei. Auf Vorschlag von Marco H. hat man nun die Möglichkeit eigene Dateien mit UserParametern anzulegen. Diese werden im Include Verzeichnis in der Datei zabbix_agentd.win.include.txt aufgeführt. Kopiert man eine neue Version dieses Scripts einfach über das alte wird die Datei nicht überschrieben (wie die config.bat')
    • Neuer Parameter ZABBIXCLEANUP' in der Config.bat: ist dieser auf YES wird das Zabbix-Verzeichnis zuvor geleert, also alle Dateien gelöscht, bevor die neuen Dateien hinein kopiert werden (wieder ein Vorschlag von Marco H.)
    • Die Restart-Zabbix-Agent.cmd wurde umbenannt in zz_Restart-Zabbix-Agent.cmd damit diese immer am Ende steht
  • 13.04.2015:
    • Dateien des Agenten nun Version 2.4.4
    • Alte Firewall-Regeln werden zunächst gelöscht und dann die neuen angelegt - je nach System wurde die Regeln sonst bei jedem Setup ein weiteres mal angelegt (Windows überschreibt an dieser Stelle nicht)
    • Auf Wunsch werden verschiedene Metadaten gesetzt nach dem ein Test durchgeführt wurde. Dadurch können passende Templates zugeordnet werden im Moment gibt es Tests auf
      • Citrix XenApp 6 oder XenApp 7 / Microsoft SQL Server / Microsoft Exchange Server / Active Directory Domänen-Controller
    • Enthält aktuelle Versionen der BackupExec Überwachung / Windows-Dienste-Erkennung / Windows Mountpoints Erkennung / Windows Eventlog-Überwachung / Windows Updates-Überwachung
  • 23.04.2015:
    • Dateien des Agenten nun Version 2.4.5
    • Alle öffentlichen Erweiterungen abgeglichen - siehe nachfolgende Versionsübersicht




Versionen im Paket

Stand 23.04.2014:






Features

  • Wählt automatisch die 32 oder 64 Bit Version des Agenten
  • Installiert in den Programme / Program Files Ordner, je nach Sprache und Version
  • Erstellt dort einen Unterordner Zabbix
  • Trägt den Hostnamen in die Config-Datei ein, entweder
    • Rechnername
    • Rechnername.domain.suffix
  • Ab Zabbix 2.2: Belegt die Variable HostMetadateItem für die Auto-Registrierung
  • Führt - auf Wunsch - Tests aus ob es ein Citrix / SQL / Exchange oder AD-Controller ist und nimmt entsprechend andere Metadaten
  • Trägt den gewünschten Zabbix-Server ein für "Active" als auch "Passiv" Konfiguration - beides funktioniert gleichzeitig!
  • Kann den Agenten auch Updaten auf neue Version - einfach die Dateien im \bin durch die aktuelle Version ersetzen und noch einmal starten
  • Öffnet auf Systemen ab Windows XP / Server 2003 bis Server 2012 R2 automatisch die benötigten Firewall-Ports
  • Umfangreiche Agenterweiterungen:




Vorbereitung

  • Erstellt ein Verzeichnis an zentraler Stelle für die Installationsdateien
  • Wollt Ihr die Funktionen für das automatische Updaten der Agenten nutzen empfehle ich eine Freigabe ohne Kennwortschutz
  • Ich lege die Freigabe immer auf dem Zabbix-Server oder Proxy selbst an: Anleitung siehe hier: Windows Freigabe für Agenten-Dateien einrichten
  • Die Agenten für Version 2.4.4 sind bereits in der .zip enthalten, alternativ
    • Downloaded die aktuellen "Pre-compiled Zabbix x.x.x (stable) agents" für Windows: http://www.zabbix.com/download.php
    • Entpackt das Archiv und kopiert das bin Verzeichnis in das Installationsverzeichnis
    • Alternativ: In den Quellarchiv von Zabbix (z.B. zabbix-2.2.2.tar.gz) sind die Dateien nach dem entpacken auch im Verzeichnis ./bin zu finden
  • Ladet mein Skript herunter: InstallZabbixAgent.zip und entpackt das Archiv
  • Kopiert das Skript ebenfalls in das Installationsverzeichnis
  • Ändert den Namen der Datei Muster-config.bat um in config.bat
  • Wenn Ihr eigene UserParameter zusätzlich nutzen wollt so
    • bennent die Datei Sample-zabbix_agentd.win.include.txt in zabbix_agentd.win.include.txt um
    • Bearbeitet diese Datei und tragt eure weiteren UserParameter gemäß den Beispielen dort ein
    • Falls eure UserParameter weitere Programme oder Skripte brauchen kopiert diese einfach mit in das UserParamter Verzeichnis zu den anderen Programmen


Important.png
Hinweis: Die Agenten für Version 2.4.4 sind bereits im Paket enthalten, ersetzt diese bei Bedarf




Konfiguration

  • Bearbeitet die config.bat mit einem Texteditor und passt mindestens die folgende Zeile am Anfang der Datei an:
REM *** Configure the Agent **************************************************
REM DNS-Name or IP of the Zabbix-Server or Zabbix Proxy
Set ZABBIXSERVER=192.168.178.20
REM Port of Zabbix Server, Default = 10051
Set ZABBIXSERVERPORT=10051

Die IP-Adresse ersetzt Ihr durch die IP oder den DNS-Namen eures Zabbix-Servers oder Zabbix-Proxys
Den Port könnt ihr im Normalfall so lassen (außer ihr habe an eurem Server etwas anderes eingestellt)

  • Die restlichen Parameter nach Bedarf - so nimmt er den Rechnamen als Hostnamen - das bedeutet auf der Zabbix-Server Seite muss der Host ebenfalls mit diesem Namen angelegt werden.
    • Hostname wird - wenn nicht geändert:
    • SERVER.domain.suffix
    • Er nimmt dabei die Domäne des Computers auf dem das Installationsskript ausführt wird. Kann diese nicht ermitteltet werden nimmt er den Wert aus FALLBACKDOMAIN
    • Alternativ ändert die Zeilen im Skript
REM Hostname to use
REM Computername ==> MYSERVER ************************************************
Set ZABBIXHOSTNAME=%COMPUTERNAME%
REM Set next Entry to YES or NO. YES = add Computerdomain like .domain.local to Hostname
Set USEDOMAINSUFFIX=YES
REM If the Computer is in no domain, or the domain can not be determined, use the following suffix
Set FALLBACKDOMAIN=znil.local


Falls Ihr die automatische Registrierung der Host nutzt (Verfügbar seit Zabbix 2.2.0, siehe Zabbix Host mit Agent automatisch auf Server registrieren/einrichten lassen) könnt Ihr in diesen Zeilen die Metadaten angeben:

REM HostMetadata for Autodiscovery *******************************************
REM Set a REM in front of the line if you did not use
REM Only use at Version 2.2 or higher, not for 2.0.x
Set ZABBIXHOSTMETADATA=unbekannt

Ersetzt unbekannt entsprechend - Achtet aber peinlich genau auf Groß- und Kleinschreibung etc.

REM ## Try some alternativ Tests for different Metadata **********************
REM Set METADATATEST to YES if you want the following additional Tests
Set METADATATEST=NO
REM Alternativ Metadata if if this Server is a Citrix Terminalserver with XenApp 6.x or 7.x
Set ZABBIXHOSTMETADATACITRIX=CitrixServer
REM Alternativ Metadata if this Server is an Active Directory Domain Controller
Set ZABBIXHOSTMETADATADC=DomainController
REM Alternativ Metadata if this Server is an Exchange Mail Server
Set ZABBIXHOSTMETADATAEXCHANGE=ExchangeServer
REM Alternativ Metadata if this Server is an Microsoft SQL Server
Set ZABBIXHOSTMETADATAMSSQL=MSSQLServer

Wenn Ihr METADATATEST auf YES setzt wird er weitere Tests durchführen und bei Bedarf andere Daten für das Autodiscovery setzen.
Ihr müsst dann natürlich auch für jede Metadaten eine eigene Action definieren bzw. diese in einer Action aufnehmen.

REM Name of Config-File - Default zabbix_agentd.win.conf
Set ZABBIXHOSTCONFIGFILE=zabbix_agentd.win.conf

Hier könnt Ihr den Namen der Konfigurationsdatei angeben - wenn Ihr keinen guten Grund habt lasst diesen auf den voreingestellten Wert


Mit dem nächsten Eintrag wird alles im Zielverzeichnis gelöscht bevor die neuen Dateien kopiert werden:

REM CleanUp Directory before Installing - delete ALL Files in the Installation
REM Directory before installing new Version
Set ZABBIXCLEANUP=YES

Falls Ihr das nicht wollt setzt den Eintrag auf "NO"

REM Unregister "Zabbix Agent" Service - set to "NO" if you use some Hosts where Zabbix Agent is running
REM as an Windows User instead of SYSTEM (Changed some Host manually)
Set ZABBIXUNREGISTERSERVICE=YES

Wenn Ihr diesen Parameter auf NO setzt so wird bei einer Installation der vorhandene "Zabbix Agent" Dienst NICHT gelöscht. Dieser Parameter ist für den Fall das Ihr auf einigen wenigen Servern den Zabbix Agenten unter einem Windows-Benutzerkonto laufen lasst statt dem SYSTEM-Konto. Eingebaut wurde diese Parameter für meinen faulen Kollegen der seine Zabbix-Userparameter nicht anders ausführen könnte (keine Berechtigung da SYSTEM-Benutzer). Ihr braucht den Parameter regelmäßig NICHT und lasst diesen also auf YES
Die Zeilen am Ende sind für den Agent Auto Updater (Zabbix Agent Auto Updater) der Regelmäßig nachschaut ob es etwas zu tun gibt.
Ein- oder Ausschalten:

REM Use ZabbixAutoUpdater? YES or NO
Set ZABBIXAGENTUPDATER=NO

Der Updater muss natürlich wissen wo die Dateien liegen. Gebt hier die Freigabe, ggf. mit Unterorder an in welcher die Installationsdateien liegen (Verzeichnis in der sich die InstallZabbixAgent.bat befindet):

REM Set Path to the Agent-Files in Network and to the Installation-Script or Program
Set UPDATEFILESHARE=\\zabbixproxy\zabbix-agent

Wenn er Änderungen findet wird er das nachfolgende Programm oder Installationsscript starten und dan sich selbst beenden (damit er selbst auch aktualisiert werden kann):

Set UPDATEINSTALLER=\\zabbixproxy\zabbix-agent\InstallZabbixAgent.bat


Der Updater installiert sich als geplanten Task und schaut regelmäßig in der Freigabe nach ob sich etwas geändert hat, in der nachfolgenden Zeile kann man einstellen wie oft er dies tun soll. Die erste Prüfung wird "Installionszeitpunkt + UPDATEFREQUENCY" sein, danach regelmäßig alle x Minuten Ich nehme hier immer krumme werte damit es sich immer wieder Zeitlich verschiebt.

REM Update Frequency in Minutes
Set UPDATEFREQUENCY=69


Der geplante Task läuft als ein bestimmter Nutzer. Dieser muss auf dem lokalen System über Administratorenrechte verfügen. Er muss aber auch auf die Freigabe zugreifen können um diese auf Änderungen zu prüfen und um das Installationsscript starten zu können.
ICH nehme dazu immer den SYSTEM Benutzer - der ist lokal auf dem System Gott und wird nicht durch eine UAC-Kontrolle behindert, insbesondere unter Server 2012. Jedoch funktioniert das dann nur wenn wir eine Freigabe haben auf die anonym zugegriffen werden kann.
Ein Anleitung für eine solche Freigabe direkt auf dem Zabbix-Server oder dem Zabbix-Proxy findet Ihr hier: Windows Freigabe für Agenten einrichten

REM Set Username and Password for Update-Task. Use DOMAIN\Username or Username@domain.local
REM Thsi will not work with Password with an %. Use if possible a long Passwort with chars and Numbers
REM Or you can run the job as SYSTEM. SYSTEM need no Password. But SYSTEM need anonymous access to the Network-Share
Set UPDATEUSER=SYSTEM
Set UPDATEPASSWORD=
REM Set UPDATEUSER=DOMAIN\Administrator
REM Set UPDATEPASSWORD=passw0rd




Installation!

Loggt euch auf den gewünschten Rechner ein, navigiert zum Installationsverzeichnis und startet das Setup per Doppelklick auf die

InstallZabbixAgent.bat

Ihr müsst über Administratorberechtigungen verfügen, in der aktuellen Version fordert er diese ggf. über die UAC Kontrolle auch an.
Das war es dann. Falls Ihr mit HostMetadata arbeitet und eine entsprechende Action eingerichtet habt (Anleitung siehe hier) füllt sich euer Zabbix-Server fast von ganz allein.



Update!???

Eure Konfiguration sollte sich ja in der Datei Config.bat befinden - im .zip hat die Datei extra einen anderen Namen.
Gleiches gilt für ggf. eigene Includes im gleichnamigen Unterverzeichnis.
Habt das alles so gemacht wie hier beschrieben - dann

  • ladet die aktuelle Version hier herunter: InstallZabbixAgent.zip
  • entpackt das Archiv
  • Kopiert alle Dateien mit allen Unterverzeichnissen einfach über euer bisheriges Installationsverzeichnis

Wenn Ihr meinen Agent Auto Updater genutzt habt müsst Ihr die konfigurierte Zeit warten :-)
Ansonsten startet einfach noch mal das Installationsskript auf jedem Rechner - Ihr könnt beliebig oft "drüberinstallieren".

Warning.png
Warnung: Ja das geht so einfach. Als verantwortungsvoller Administrator lest Ihr vorher aber zumindest vorher einmal das Changelog ganz oben auf dieser Seite durch UND probiert es vorher einmal aus. Wenn Ihr den AgentAutoUpdater benutzt so legt in der Freigabe auch ein Test Verzeichnis an - und 1 oder 2 eurer Hosts haben eben immer dieses Testverzeichnis statt des normalen (Der Pfad in der Config.bat muss natürlich angepasst sein). Ich teste selbst immer - und trotzdem schlüpft mal ein Fehler durch.




Getestete Betriebssysteme

Bisher funktionierte das Script mit

  • Windows XP
  • Windows Server 2003
  • Windows Server 2003 64 Bit
  • Windows Server 2003 R2
  • Windows Server 2003 R2 64 Bit
  • Windows 7
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2




Quellcode des Skriptes

Download: InstallZabbixAgent.zip

Konfigurationsdatei

@echo off
REM *** Configure the Agent **************************************************
REM DNS-Name or IP of the Zabbix-Server or Zabbix Proxy, separate more than one server with ,
Set ZABBIXSERVER=192.168.178.20
REM the same before, only for active checks. If Empty, ZABBIXSERVER will be used
Set ZABBIXSERVERACTIVE=
REM Port of Zabbix Server, Default = 10051
Set ZABBIXSERVERPORT=10051
REM Hostname to use
REM Computername ==> MYSERVER ************************************************
Set ZABBIXHOSTNAME=%COMPUTERNAME%
REM Set next Entry to YES or NO. YES = add Computerdomain like .domain.local to Hostname
Set USEDOMAINSUFFIX=YES
REM If the Computer is in no domain, or the domain can not be determined, use the following suffix
Set FALLBACKDOMAIN=znil.local
REM Zabbix Host ListenPort, Default = 10050 **********************************
Set ZABBIXHOSTLISTENPORT=10050
REM HostMetadata for Autodiscovery *******************************************
REM Set a REM in front of the line if you did not use
REM Only use at Version 2.2 or higher, not for 2.0.x
Set ZABBIXHOSTMETADATA=WindowsServer
REM ## Try some alternativ Tests for different Metadata **********************
REM Set METADATATEST to YES if you want the following additional Tests
Set METADATATEST=NO
REM Alternativ Metadata if if this Server is a Citrix Terminalserver with XenApp 6.x or 7.x
Set ZABBIXHOSTMETADATACITRIX=CitrixServer
REM Alternativ Metadata if this Server is an Active Directory Domain Controller
Set ZABBIXHOSTMETADATADC=DomainController
REM Alternativ Metadata if this Server is an Exchange Mail Server
Set ZABBIXHOSTMETADATAEXCHANGE=ExchangeServer
REM Alternativ Metadata if this Server is an Microsoft SQL Server
Set ZABBIXHOSTMETADATAMSSQL=MSSQLServer
REM *************************************************************************
REM Name of Config-File - Default zabbix_agentd.win.conf
Set ZABBIXHOSTCONFIGFILE=zabbix_agentd.win.conf
REM CleanUp Directory before Installing - delete ALL Files in the Installation
REM Directory before installing new Version
Set ZABBIXCLEANUP=YES
REM Unregister "Zabbix Agent" Service - set to "NO" if you use some Hosts where Zabbix Agent is running
REM as an Windows User instead of SYSTEM (Changed some Host manually)
Set ZABBIXUNREGISTERSERVICE=YES
REM ***********************************************************
REM **                                                       **
REM **   Next Lines are for the ZabbixAutoUpdater only       **
REM **   http://znil.net/index.php?title=Agent_Auto_Updater  **
REM **                                                       **
REM ***********************************************************
REM Use ZabbixAutoUpdater? YES or NO
Set ZABBIXAGENTUPDATER=YES
REM Set Path to the Agent-Files in Network and to the Installation-Script or Program
Set UPDATEFILESHARE=\\192.168.178.20\ZabbixAgent\UpdateCheck
Set UPDATEINSTALLER=\\192.168.178.20\ZabbixAgent\Agent\InstallZabbixAgent.bat
REM Update Frequency in Minutes
Set UPDATEFREQUENCY=30
REM Set Username and Password for Update-Task. Use DOMAIN\Username or Username@domain.local
REM Thsi will not work with Password with an %. Use if possible a long Passwort with chars and Numbers
REM Or you can run the job as SYSTEM. SYSTEM need no Password. But SYSTEM need anonymous access to the Network-Share
Set UPDATEUSER=SYSTEM
Set UPDATEPASSWORD=
REM Set UPDATEUSER=DOMAIN\Administrator
REM Set UPDATEPASSWORD=passw0rd




Installationsskript

@echo off
REM ##########################################################################
REM # Install or Update Zabbix Agent for Windows - PLUS Version              #
REM # 2013-2015 Bernhard Linz  /  Bernhard.Linz@datagroup.de                 #
REM #                             Bernhard@znil.de                           #
REM # http://znil.net                                                        #
REM #                                                                        #
REM # Download pre-compiled Agent from http://www.zabbix.com/download.php    #
REM # Download the complete sources, not only the agent files                #
REM # Unpack and place the 'bin' Folder in Directory of this Script          #
REM ##########################################################################
REM
REM Description: remove old Agent and install new one
REM              will use the %PROGRAMMFILES%\Zabbix Folder
REM              will use the right Version of Agent (32 or 64 Bit)
REM
REM History
REM V1.0    Simple Script
REM V1.1    with UserParameter servdisc.exe - Windows Service Autodiscover
REM V1.2    + UserParameter windowsupdates - Get the number of available Updates
REM V1.3    + Add Firewall-Rules for Zabbix Agent
REM V1.4    + Add UAC Permission Request if needed
REM V1.5+   + Add some UserParameter
REM V2.0    + Add AutoUpdater
REM V2.1    + Move Config to Config.bat
REM V2.2    + Add Firewall Rules for Windows Server 2003 / XP
REM V2.3    + Add Cleanup-Parameter (delete all files and install new)
REM V2.4    + Add ZABBIXSERVERACTIVE Parameter for people who need this
REM         + Add FALLBACKDOMAIN Parameter if Computer is not in a domain
REM V2.5    + Add UserParameter for Printer-Status and Citrix XenApp 6.x Hosts
REM V2.6    + Add Support for different Metadata for
REM              Citrix XenApp, MSSQL, Exchange, Active Directory Domain Controller
REM V2.7    + Delete old Firewall-Rules first (Windows always add Rules, no overwrite)
REM V2.8    Change all %ERRORLEVEL% Checks to more safe method
REM V2.9    Change Zabbix Agent Service to "Automatic (Delayed Start)"
REM V2.10   + Add Option ZABBIXUNREGISTERSERVICE to prevent Script from unregister service
REM ##########################################################################
REM # Configure Agent#########################################################
REM ##########################################################################
REM The Paremeters to configure are moved to the "Config.bat" in same Directory!
REM
REM
REM ##########################################################################
REM # MAIN PROGRAM ###########################################################
REM ##########################################################################
REM Get the Path of this running Script
Set CURPATH=%~dp0
Set SCRIPTNAME=%~nx0
REM
REM Get Config ...
If EXIST "%CURPATH%Config.bat" (
    CALL "%CURPATH%Config.bat"
) ELSE (
    echo Missing "%CURPATH%Config.bat" !!!!
GoTo END
)

REM Check for Administrator rights - needed for Install!!!
REM Solution found at: http://stackoverflow.com/questions/1894967/how-to-request-administrator-access-inside-a-batch-file
cls
Echo Administrative permissions required. Detecting permissions...
REM Next Command will fail if no admin-rights
net session >nul 2>&1
If NOT ERRORLEVEL 1 (
        REM we have a winner! ok, go on with work
        Echo Success: Administrative permissions confirmed.
        GoTo WITHADMINRIGHTS
    ) else (
        REM Nope, we need to request for the rights
        Echo Failure: Current permissions inadequate.
        Echo Please Re-Run this Script with Administrator Permissions!!!!
        Echo But wait a moment - i try to get the rights ...
        REM we create a .vbs at %TEMP% Folder - the vbs will restart this script with admin rights UAC request
        Echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        Set params = %*:"=""
        Echo UAC.ShellExecute "%~s0", "%params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
        "%temp%\getadmin.vbs"
        Exit /B
)
:WITHADMINRIGHTS
REM ok, we are running as admin, delete the UAC File if needed
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

REM Get the Domain of Computer for Hostname
FOR /F "usebackq tokens=*" %%a IN (`wmic.exe COMPUTERSYSTEM GET DOMAIN /Value`) DO (
	@((ECHO %%a | findstr /i /c:"Domain=") && SET _str=%%a) > NUL 2>&1
)
FOR /F "tokens=2 delims=^=" %%a IN ("%_str%") do SET COMPUTERDOMAIN=%%a
SET COMPUTERDOMAIN=%COMPUTERDOMAIN: =%
If "%COMPUTERDOMAIN%"=="" (
    Echo Error: Cannot read domainname from system, using Fallbackdomain-Parameter
    Set COMPUTERDOMAIN=%FALLBACKDOMAIN%
    If "%COMPUTERDOMAIN%"=="" (
        Echo Error: Fallbackdomain-Parameter is also empty - using NOTHING
        Echo Error: and set USEDOMAINSUFFIX = NO
        Set USEDOMAINSUFFIX=NO
    )
    Echo Set domainname with fallback value: %FALLBACKDOMAIN%
)

REM Test again if WMI have any errors
wmic.exe COMPUTERSYSTEM GET DOMAIN /Value > NUL 2>&1
If %ERRORLEVEL% NEQ 0 (
	Echo WMI-Error: Cannot get Domainname
    Set COMPUTERDOMAIN=%FALLBACKDOMAIN%
    If "%COMPUTERDOMAIN%"=="" (
        Echo Error: Fallbackdomain-Parameter is also empty - using NOTHING
        Echo Error: and set USEDOMAINSUFFIX = NO
        Set USEDOMAINSUFFIX=NO
    )
    Echo WMI-Error: Set domainname with fallback value: %FALLBACKDOMAIN%
)
REM Set ZABBIXHOSTNAMESUFFIX=.%COMPUTERDOMAIN%

If "%USEDOMAINSUFFIX%" == "YES" Set ZABBIXHOSTNAMESUFFIX=.%COMPUTERDOMAIN%
Echo %ZABBIXHOSTNAMESUFFIX%

REM Stop Agent if already Installed (=prepare for Update)
Echo Try to stop running Zabbix Agent - ignore Error-Messages
net stop "Zabbix Agent"
choice /N /C 123 /T 5 /D 1 /M "Wait a few Seconds after stopping Agent ...."

REM Only remove Service if wanted (we have Systems where the Zabbix Agent Service is running as an user account)
If "%ZABBIXUNREGISTERSERVICE%" == "" (
    SET ZABBIXUNREGISTERSERVICE=YES
)

If "%ZABBIXUNREGISTERSERVICE%" == "YES" (
    Echo Remove Zabbix-Service - ignore Error-Messages
    "%PROGRAMFILES%\zabbix\zabbix_agentd.exe" -c "%PROGRAMFILES%\zabbix\zabbix_agentd.win.conf" --uninstall
) Else (
    Echo "Zabbix Service will NOT removed / unregister -- Option ZABBIXUNREGISTERSERVICE=NO in config.bat
)
REM Cleanup Folder if wished
If "%ZABBIXCLEANUP%" == "YES" (
    Echo Deleting old files - ignore Error-Messages
    DEL "%PROGRAMFILES%\zabbix\*.*" /Q
)
Echo -------------------------------------------------------------------------
REM
REM Create Zabbix Folder if not exist ########################################
Echo.
Echo Create Folder '%PROGRAMFILES%\Zabbix'"
mkdir "%PROGRAMFILES%\Zabbix"
REM
REM
REM Mark the 32 and 64 Bit files with a File 32 or 64 Bit ####################
Echo 32Bit! > bin\win32\32Bit-Version!.txt
Echo 64Bit! > bin\win64\64Bit-Version!.txt
REM Testing for 32 or 64 Bit Version #########################################
Echo Check this Computer - %COMPUTERNAME% - for 32 or 64 Bit Architecture
If %PROCESSOR_ARCHITECTURE%==x86 (
    REM 32 Bit Windows!
    Echo This is a 32 Bit System, using bin\win32
    Echo Copy Files:
    Copy "%CURPATH%bin\win32\*" "%PROGRAMFILES%\Zabbix\" /Y
) else (
    REM 64 Bit Windows!
    Echo This is a 64 Bit System, using bin\win64
    Copy "%CURPATH%bin\win64\*" "%PROGRAMFILES%\Zabbix\" /Y
)
Echo -------------------------------------------------------------------------
REM Copy UserParameter Files
mkdir "%PROGRAMFILES%\Zabbix\UserParameter"
Echo Copy UserParameter Files ...
Copy "%CURPATH%UserParameter\*" "%PROGRAMFILES%\Zabbix\UserParameter\" /Y
Echo -------------------------------------------------------------------------
REM Copy Tool Files
mkdir "%PROGRAMFILES%\Zabbix\Tools"
Echo Copy Tools ...
Copy "%CURPATH%Tools\*" "%PROGRAMFILES%\Zabbix\Tools\" /Y
Echo -------------------------------------------------------------------------
REM
REM
echo Convert Domainsuffix to lowercase ...
REM Convert ZABBIXHOSTNAMESUFFIX to Lowercase:
setlocal enabledelayedexpansion
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:A=a!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:B=b!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:C=c!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:D=d!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:E=e!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:F=f!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:G=g!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:H=h!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:I=i!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:J=j!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:K=k!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:L=l!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:M=m!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:N=n!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:O=o!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:P=p!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:Q=q!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:R=r!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:S=s!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:T=t!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:U=u!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:V=v!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:W=w!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:X=x!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:Y=y!
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:Z=z!
REM and Spaces to Underline
set ZABBIXHOSTNAMESUFFIX=!ZABBIXHOSTNAMESUFFIX:^ =_!
setlocal disabledelayedexpansion
Echo Hostname-suffix is: %ZABBIXHOSTNAMESUFFIX%
REM
REM Create Config-file #######################################################
Echo Creating the File: "%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo Existing File will be Override!!
REM The File!
REM ### Writing Header #######################################################
Echo # This is a config file for the Zabbix agent daemon (Windows) >"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # To get more information about Zabbix, go to http://www.zabbix.com >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Description of Parameters: >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Version 2.2.x: https://www.zabbix.com/documentation/2.2/manual/appendix/install/windows_agent >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #                https://www.zabbix.com/documentation/2.2/manual/appendix/config/zabbix_agentd_win >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Version 2.4.x: https://www.zabbix.com/documentation/2.4/manual/appendix/install/windows_agent >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #                https://www.zabbix.com/documentation/2.4/manual/appendix/config/zabbix_agentd_win >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ####################################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###   ######   #######   ###  ###  ###  ###  ###   ########  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ########  ########  #### ###  ###  #### ###  #########  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ###  ###  ###  ###  ########  ###  ########  ###        >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ###  ###  ###  ###  ########  ###  ########  ###        >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ########  #######   ### ####  ###  ### ####  ### #####  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ########  ######    ###  ###  ###  ###  ###  ### #####  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ###  ###  ### ###   ###  ###  ###  ###  ###  ###   ###  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ###  ###  ###  ###  ###  ###  ###  ###  ###  ###  ###  ###  ###   ###  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo  #### ## ###   ##   ###  ##   ###   ##   ##   ##   ##   ##   ### ####  >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo   ## #  # #     #   # #   #   # #  ##    #   #    ##    #    ## ## #   >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ####################################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # THIS FILE WAS CREATED BY AUTOMATED SETUP! SETTINGS MAYBE OVERWRITE AT >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # NEXT UPDATE! >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # The Setupfile is: %CURPATH%%SCRIPTNAME% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ####################################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM ### Writing Parameter ####################################################
Echo ############ GENERAL PARAMETERS ######################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo LogFile=%SYSTEMDRIVE%\zabbix_agentd.log >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo LogFileSize=5 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	Specifies debug level ################################################ >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	0 - no debug >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	1 - critical information >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	2 - error information >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	3 - warnings >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #	4 - for debugging (produces lots of information) >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo DebugLevel=3 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo EnableRemoteCommands=1 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo LogRemoteCommands=1 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo Server=%ZABBIXSERVER% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ListenPort=%ZABBIXHOSTLISTENPORT% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # ListenIP=0.0.0.0 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # StartAgents=3 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
If "%ZABBIXSERVERACTIVE%"=="" (
    Echo ServerActive=%ZABBIXSERVER%:%ZABBIXSERVERPORT% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
) Else (
    Echo ServerActive=%ZABBIXSERVERACTIVE%:%ZABBIXSERVERPORT% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
)
If "%USEDOMAINSUFFIX%" == "YES" (
    Echo Hostname=%ZABBIXHOSTNAME%%ZABBIXHOSTNAMESUFFIX% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
) Else (
    Echo Hostname=%ZABBIXHOSTNAME% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
)
Echo RefreshActiveChecks=120 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # BufferSend=5 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # BufferSize=100 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # MaxLinesPerSecond=100 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo Timeout=30 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"

Echo # Set UnsafeUserParameter to 1 for ###################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # using special chars in Parameters and performance counters ############ >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo UnsafeUserParameters=1 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM ### HostMetadata #########################################################
REM # Check if this Server is a Terminalserver with Citrix XenApp 6.x or 7.x



REM Write HostMetadata if there anyone ***************************************
If "%ZABBIXHOSTMETADATA%" == "" GoTo NOZABBIXMETADATA
REM ## Tests for HostMetadata ########################################################
Echo Try some Test for HostMetadata String for Zabbix Autoregistration
REM ## Test for Citrix XenApp 6.x
Echo Check for Citrix XenApp 6.x
reg query HKLM\SOFTWARE\Citrix\Roles\XenApp\XenAppServerFeature 2>NUL >NUL
If NOT ERRORLEVEL 1 (
    If "%METADATATEST%" == "YES" (
        Set ZABBIXHOSTMETADATA=%ZABBIXHOSTMETADATACITRIX%
        Set METADATATEST=NO
        Echo We have a winner! XenApp 6.x is installed! Skipping all other Test
    )
)
REM ## Test for Citrix XenApp 7.x
Echo Check for Citrix XenApp 7.x
reg query HKLM\SOFTWARE\Citrix\VirtualDesktopAgent 2>NUL >NUL
If NOT ERRORLEVEL 1 (
    If "%METADATATEST%" == "YES" (
        Set ZABBIXHOSTMETADATA=%ZABBIXHOSTMETADATACITRIX%
        Set METADATATEST=NO
        Echo We have a winner! XenApp 7.x is installed! Skipping all other Test
    )
)
REM ## Test for Microsoft SQL Server
Echo Check for Microsoft SQL
REM reg query HKLM\SYSTEM\CurrentControlSet\services | findstr "MSSQL" 2>NUL >NUL
reg query "HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL" 2>NUL >NUL
If NOT ERRORLEVEL 1 (
    If "%METADATATEST%" == "YES" (
        Set ZABBIXHOSTMETADATA=%ZABBIXHOSTMETADATAMSSQL%
        Set METADATATEST=NO
        Echo We have a winner! Microsoft SQL Server is installed! Skipping all other Test
    )
)

REM ## Test for Microsoft Exchange Server
Echo Check for Microsoft Exchange
REM reg query HKLM\SYSTEM\CurrentControlSet\services | findstr "MSExchange" 2>NUL >NUL
If "%ExchangeInstallPath%" NEQ "" (
    If "%METADATATEST%" == "YES" (
        Set ZABBIXHOSTMETADATA=%ZABBIXHOSTMETADATAEXCHANGE%
        REM Set METADATATEST=NO
        Echo We have a winner! Microsoft Exchange Server is installed! Skipping all other Test
    )
)

REM ## Test for Microsoft Exchange Server
Echo Check for Active Directory Domain Controller
reg query HKLM\SYSTEM\CurrentControlSet\services\NTDS | findstr "Parameters" 2>NUL >NUL
If NOT ERRORLEVEL 1 (
    If "%METADATATEST%" == "YES" (
        Set ZABBIXHOSTMETADATA=%ZABBIXHOSTMETADATADC%
        Set METADATATEST=NO
        Echo We have a winner! This Server is an Active Directory Domain Controller! Skipping all other Test
    )
)


REM All Tests are done
Echo Hostmetadata is: %ZABBIXHOSTMETADATA%
Echo # For AutoRegistration ################################################## >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo HostMetadata=%ZABBIXHOSTMETADATA% >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
:NOZABBIXMETADATA
REM
REM
REM ### Writing UserParameter ################################################
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # UserParamter: ######################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"

REM For Windows Service Discovery:
Echo UserParameter=service.discovery,"%PROGRAMFILES%\Zabbix\UserParameter\servdisc.exe" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For Windows Volume Mountpoints without Driveletter but mounted at NTFS-Folder
Echo UserParameter=vfs.fs.znil.windowsmountpoints.discovery,"%PROGRAMFILES%\Zabbix\UserParameter\WindowsMountPoints.exe" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For AgentAutoUpdate - Check last time of Updates
Echo UserParameter=znil.agentautoupdate[*],"%PROGRAMFILES%\Zabbix\UserParameter\AgentAutoUpdate.exe" $1 >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For Check Windows Updates
Echo UserParameter=znil.windowsupdates,"%PROGRAMFILES%\Zabbix\UserParameter\windowsupdates.exe" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For Check Windows License Status (german and englisch Windows Versions)
Echo UserParameter=znil.LicenseStatus,cscript.exe //Nologo %WINDIR%\system32\slmgr.vbs /dli ^| find "License Status:" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo UserParameter=znil.LizenzStatus,cscript.exe //Nologo %WINDIR%\system32\slmgr.vbs /dli ^| find "Lizenzstatus:" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For Check BackupExec2010 Jobs
Echo UserParameter=znil.BackupExec2010[*],"%PROGRAMFILES%\Zabbix\UserParameter\BackupExec2010.exe" $1 "$2" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo UserParameter=znil.BackupExec2012[*],"%PROGRAMFILES%\Zabbix\UserParameter\BackupExec2012.exe" $1 "$2" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM For more File and Folder Checks
Echo UserParameter=znil.fileandfolder[*],"%PROGRAMFILES%\Zabbix\UserParameter\fileandfolder.exe" "$1" "$2" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Citrix XenDesktop
Echo UserParameter=znil.CitrixDesktopsNotRegistered,powershell asnp Citrix.* ; $iNotRegistered = 0 ; "Get-BrokerDesktop -Filter { RegistrationState -ne 'Registered' } -PowerState On | ForEach-Object { $iNotRegistered = $iNotRegistered + 1} ; Write-Output $iNotRegistered" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo UserParameter=znil.CitrixDesktopsRegistered,powershell asnp Citrix.* ; $iRegistered = 0 ; "Get-BrokerDesktop -RegistrationState 'Registered' -PowerState On | ForEach-Object { $iRegistered = $iRegistered + 1} ; Write-Output $iRegistered" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM VMwareTools
Echo UserParameter=tfoo.vmwaretools,"%PROGRAMFILES%\Vmware\Vmware Tools\VMwareToolboxCmd.exe" upgrade status >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Exchange Statistics
Echo UserParameter=znil.ExchangeStatistics[*],"%PROGRAMFILES%\Zabbix\UserParameter\ExchangeStatistics.exe" $1 "$2" "$3" "$4" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Windows Eventlog with Filter
Echo UserParameter=znil.ZabbixEventlog[*],"%PROGRAMFILES%\Zabbix\UserParameter\Zabbix_Eventlog.exe" "$1" "$2" "$3" "$4" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Task Scheduler Monitoring
Echo UserParameter=znil.TaskSchedulerMonitoring[*],"%PROGRAMFILES%\Zabbix\UserParameter\TaskSchedulerMonitoring.exe" "$1" "$2" "$3" "$4" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Local Administrators Group monitoring
Echo UserParameter=znil.LocalAdministrators,"%PROGRAMFILES%\Zabbix\UserParameter\LocalAdministrators.exe" >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
REM Next line: Load the Citrix Extension one time - maybe the first time - to prevent 30 Seconds Problem


REM ###########################################################################
REM ###########################################################################
REM ###########################################################################
REM ###########################################################################
REM ### Check Include-File ####################################################
If EXIST "%CURPATH%Include\zabbix_agentd.win.include.txt" (
Copy "%CURPATH%Include\zabbix_agentd.win.include.txt" "%PROGRAMFILES%\Zabbix\zabbix_agentd.win.include.txt" /Y
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Include additional File with UserParameter: ############################ >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo Include=%PROGRAMFILES%\Zabbix\zabbix_agentd.win.include.txt>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"

) ELSE (
echo No Include File found: %CURPATH%Include\zabbix_agentd.win.include.txt
echo Skip Including File!
)

REM
REM
REM ### Writing Who did this #################################################
Echo. >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ####################################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # This File was created with Zabbix-Agent-Installer Script>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # 2014/2015 by Bernhard Linz -- Bernhard.Linz@datagroup.de>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #                               Bernhard@znil.net>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Website:                      http://znil.net>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo # Latest Version at http://znil.net/index.php?title=Zabbix>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #>>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #    ######## ##    ## #### ##             ##    ## ######## ######## >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #         ##  ###   ##  ##  ##             ###   ## ##          ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #        ##   ####  ##  ##  ##             ####  ## ##          ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #       ##    ## ## ##  ##  ##             ## ## ## ######      ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #      ##     ##  ####  ##  ##             ##  #### ##          ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #     ##      ##   ###  ##  ##        ###  ##   ### ##          ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #    ######## ##    ## #### ########  ###  ##    ## ########    ##    >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo #                                                                   >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo ####################################################################### >>"%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%"
Echo Writing File Complete!
Echo -------------------------------------------------------------------------
REM
REM
REM Create Zabbix-Agent-Restart-Script
Echo Create Zabbix-Agent-Restart-Script ...
Echo @Echo off>"%PROGRAMFILES%\Zabbix\zz_Restart-Zabbix-Agent.cmd"
Echo net stop "zabbix agent">>"%PROGRAMFILES%\Zabbix\zz_Restart-Zabbix-Agent.cmd"
Echo net start "zabbix agent">>"%PROGRAMFILES%\Zabbix\zz_Restart-Zabbix-Agent.cmd"
Echo Exit 0>>"%PROGRAMFILES%\Zabbix\zz_Restart-Zabbix-Agent.cmd"
Echo -------------------------------------------------------------------------
REM Create znilTail.exe Script
Echo Create znilTail.exe call with the Zabbix Agent Logfile:
Echo @Echo off>"%PROGRAMFILES%\Zabbix\znilTail-with-zabbix_agentd.log.cmd"
Echo start "" /B "%PROGRAMFILES%\Zabbix\Tools\znilTail.exe" "%SYSTEMDRIVE%\zabbix_agentd.log">>"%PROGRAMFILES%\Zabbix\znilTail-with-zabbix_agentd.log.cmd"
Echo Exit 0>>"%PROGRAMFILES%\Zabbix\znilTail-with-zabbix_agentd.log.cmd"
Echo -------------------------------------------------------------------------
REM
REM Create Firewall Rules
Echo Delete existing Firewall-Rules for Zabbix Agent
Echo Ignore Errors !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
netsh advfirewall firewall delete rule name="Zabbix agentd port %ZABBIXHOSTLISTENPORT% inbound" dir=in
netsh advfirewall firewall delete rule name="Zabbix agentd port %ZABBIXHOSTLISTENPORT% outbound" dir=out
netsh advfirewall firewall delete rule name="Zabbix to Server port %ZABBIXSERVERPORT% inbound" dir=in
netsh advfirewall firewall delete rule name="Zabbix to Server port %ZABBIXSERVERPORT% outbound" dir=out
Echo Create Firewall-Rules for Zabbix Agent
Echo Ignore Errors on Windows XP / 2003 or lower!
REM we would get Errors at Windows XP and maybe at Windows 2003 and lower (no advfirewall context) - but no matter
netsh advfirewall firewall add rule name="Zabbix agentd port %ZABBIXHOSTLISTENPORT% inbound" dir=in action=allow protocol=TCP localport=%ZABBIXHOSTLISTENPORT%
netsh advfirewall firewall add rule name="Zabbix agentd port %ZABBIXHOSTLISTENPORT% outbound" dir=out action=allow protocol=TCP localport=%ZABBIXHOSTLISTENPORT%
netsh advfirewall firewall add rule name="Zabbix to Server port %ZABBIXSERVERPORT% inbound" dir=in action=allow protocol=TCP localport=%ZABBIXSERVERPORT%
netsh advfirewall firewall add rule name="Zabbix to Server port %ZABBIXSERVERPORT% outbound" dir=out action=allow protocol=TCP localport=%ZABBIXSERVERPORT%
if errorlevel 1 (
    Echo There were Errors while adding the Firewall-Rules, ok then we try the Windows Server 2003 and XP way ...
    netsh firewall delete portopening TCP %ZABBIXHOSTLISTENPORT%
    netsh firewall delete portopening TCP %ZABBIXSERVERPORT%
    netsh firewall add portopening TCP %ZABBIXHOSTLISTENPORT% ZabbixAgentPort
    netsh firewall add portopening TCP %ZABBIXSERVERPORT% ZabbixServerPort
)
Echo -------------------------------------------------------------------------
REM Install Zabbix Service and Start Agent
Echo Install Zabbix-Service ...
"%PROGRAMFILES%\Zabbix\zabbix_agentd.exe" -c "%PROGRAMFILES%\Zabbix\%ZABBIXHOSTCONFIGFILE%" --install
Echo Starting the Zabbix Service ...
net start "zabbix agent"
Echo.
If "%ZABBIXAGENTUPDATER%" == "YES" (
  Echo Install ZabbixAgentAutoUpdate Task ...
  If "%UPDATEUSER%" == "SYSTEM" (
    Echo ... Installing Task as SYSTEM User ...
    "%WINDIR%\system32\schtasks.exe" /create /SC MINUTE /MO %UPDATEFREQUENCY% /F /TN ZabbixAgentAutoUpdater /RU SYSTEM /TR "\"%PROGRAMFILES%\Zabbix\UserParameter\AgentAutoUpdate.exe\" \"%UPDATEFILESHARE%\" \"%UPDATEINSTALLER%\""
  ) Else (
    Echo ... Installing Task as user %UPDATEUSER%
    "%WINDIR%\system32\schtasks.exe" /create /SC MINUTE /MO %UPDATEFREQUENCY% /F /TN ZabbixAgentAutoUpdater /RU %UPDATEUSER% /RP %UPDATEPASSWORD% /TR "\"%PROGRAMFILES%\Zabbix\UserParameterAgentAutoUpdate.exe\" \"%UPDATEFILESHARE%\" \"%UPDATEINSTALLER%\""
  )
)
REM Set Zabbix Agent Service to "Automatic (Delayed Start)", will work after next reboot
Echo Set Zabbix Agent Service to "Automatic (Delayed Start)"
reg add "HKLM\SYSTEM\CurrentControlSet\services\Zabbix Agent" /v DelayedAutostart /t REG_DWORD /d 1 /f

REM Write Installation Date and Time to Registry for Zabbix Agent Auto Update to Registry
"%PROGRAMFILES%\Zabbix\UserParameter\AgentAutoUpdate.exe" settime
REM Disable the next Time Update, write only Hash Values to Registry
REM "%PROGRAMFILES%\Zabbix\AgentAutoUpdate.exe" NextTimeOnlyHashUpdate

REM #########################################################################################################
:END
Echo -------------------------------------------------------------------------
Echo ALL ACTION COMPLETED ! Bye Bye!
Echo -------------------------------------------------------------------------
REM remove next REM to read Messages if you run this Script with Doubleclick
REM Pause
REM choice /N /C 123 /T 10 /D 1 /M "Wait 10 Seconds ..."
REM Next Line with Exit is needed for AgentAutoUpdate - CMD Windows will not close without it
Exit 0




--Bernhard Linz 12:35, 23. Apr. 2015 (CEST)


Kommentare

<comments>