zabbix_export:
  version: '7.0'
  template_groups:
    - uuid: 0773062d7c6249fe84ea5e8c300d7bfb
      name: ITB_Skripte
  templates:
    - uuid: 31de4ad218a746ae9c379b84b1501bb7
      template: 'InstalledHotFix - ITBWindows'
      name: 'InstalledHotFix - ITBWindows'
      description: |
        Es wird die eingesetzte Betriebssystemversion erkannt (Grundlage hierfür sind div. UserMacros, in denen die jeweilige OS-Version definiert ist) und aufgrundlage dessen das richtige UserMacro angezogen und div. Items ausgerollt.
        Ein Item bezieht sämtliche installeirten KB-Patches (werden nicht gespeichert) und das andere Item prüft diese gegen die Items aus dem jeweiligen Macro.
        
        Die Aktualisierung der im UserMacro hinterlegten KB Liste im Item kann etwas dauern (Interne Updatemechanismen Zabbix).
      groups:
        - name: ITB_Skripte
      discovery_rules:
        - uuid: 916de745c0ff4a588fbd3c497179674d
          name: 'Get installed Operatingsystem'
          key: 'wmi.get[root\cimv2,"SELECT Version FROM Win32_OperatingSystem"]'
          description: |
            Es wird die eingesetzte Betriebssystemversion erkannt (Grundlage hierfür sind div. UserMacros, in denen die jeweilige OS-Version definiert ist) und aufgrundlage dessen das richtige UserMacro angezogen und div. Items ausgerollt.
            Ein Item bezieht sämtliche installierten KB-Patches (werden nicht gespeichert) und das andere Item prüft diese gegen die Items aus dem jeweiligen Macro.
            
            Die Aktualisierung der im UserMacro hinterlegten KB Liste im Item kann etwas dauern (Interne Updatemechanismen Zabbix).
          item_prototypes:
            - uuid: 5e1196f4cbcb4e8593ab54063244b49f
              name: 'Get status code for hotfix installation state'
              type: DEPENDENT
              key: 'get.hotfix.state[{#WIN_HOTFIX}]'
              delay: '0'
              value_type: TEXT
              trends: '0'
              description: |
                Es wird die eingesetzte Betriebssystemversion erkannt (Grundlage hierfür sind div. UserMacros, in denen die jeweilige OS-Version definiert ist) und aufgrundlage dessen das richtige UserMacro angezogen und div. Items ausgerollt.
                Ein Item bezieht sämtliche installeirten KB-Patches (werden nicht gespeichert) und das andere Item prüft diese gegen die Items aus dem jeweiligen Macro.
              preprocessing:
                - type: CHECK_NOT_SUPPORTED
                  parameters:
                    - '-1'
                  error_handler: CUSTOM_VALUE
                  error_handler_params: '2100'
                - type: JAVASCRIPT
                  parameters:
                    - |
                      var Hotfixes2Compare = '{#WIN_KBSHOULDBEINSTALLED}';
                      var installedHotfixes = '';
                      var TxtOutputPrep = "Missing Hotfixes:";
                      var TxtOutput = TxtOutputPrep;
                      var isFound = false;
                      return Hotfixes2Compare;
                      comparedHotfixes = JSON.stringify(Hotfixes2Compare);
                      return comparedHotfixes;
                      // if ((Array.isArray(comparedHotfixes))){ return 1} else {return 0}
                      
                      installedHotfixes = JSON.parse(value)
                      // äußere Schleife durchläuft alle KBs, die eingegeben wurden
                      return JSON.stringify(comparedHotfixes), comparedHotfixes.length
                      for (var i = 0; i < comparedHotfixes.length; i++) {
                      	isFound = false;
                      	// console.log(`comparedHotfixes: ${comparedHotfixes[i]}`);
                      	// innere Schleife durchläuft alle installierten Hotfixes
                      	// und vergleicht, ob ein eingegebenes Hotfix enthalten ist
                      	for (l = 0; l < installedHotfixes.length; l++) { 
                      		//console.log(`installed Hotfixes: ${JSON.stringify((installedHotfixes[l]).HotfixId)}`);
                      		if(comparedHotfixes[i] == installedHotfixes[l].HotfixId ){
                      			//console.log(comparedHotfixes[i],JSON.stringify((installedHotfixes[l]).HotfixId))
                      			isFound = true
                      		};
                      	}
                      	if(isFound == false){ TxtOutput = TxtOutput + ' ' + comparedHotfixes[i] };
                      
                      };
                      if(TxtOutput == TxtOutputPrep){TxtOutput = 0};
                      // console.log(TxtOutput);
                      return TxtOutput;
                      } else {
                      // console.log("Keine Hotfixes gefunden oder ein Fehler ist aufgetreten.");
                      return 9999;
                      }
              master_item:
                key: 'wmi.getall["root\cimv2","SELECT {#WIN_HOTFIX} FROM Win32_QuickFixEngineering"]'
              trigger_prototypes:
                - uuid: dd38078afb994f5795f34d85b69c19fd
                  expression: 'last(/InstalledHotFix - ITBWindows/get.hotfix.state[{#WIN_HOTFIX}])=2000'
                  name: 'Error: Requested patches are not installed on {HOST.NAME} - {#WIN_NAME}'
                  priority: AVERAGE
                - uuid: ad12b9775652450c8dd14ada6d7ccaba
                  expression: 'last(/InstalledHotFix - ITBWindows/get.hotfix.state[{#WIN_HOTFIX}])=2100'
                  name: 'Unkown: Patches can not be queried on {HOST.NAME} - {#WIN_NAME}'
                  priority: AVERAGE
                - uuid: 4bdff3fb2a33459bb54d5920a19dcd29
                  expression: 'last(/InstalledHotFix - ITBWindows/get.hotfix.state[{#WIN_HOTFIX}])=1900'
                  name: 'Warning: Not all patches are installed on {HOST.NAME} - {#WIN_NAME}'
                  priority: WARNING
            - uuid: a3a366ea3e1049d489489b53baaa7146
              name: 'fro test KB {#WIN_KBSHOULDBEINSTALLED}'
              type: DEPENDENT
              key: 'get.hotfix[{#WIN_HOTFIX}]'
              delay: '0'
              value_type: TEXT
              trends: '0'
              master_item:
                key: 'wmi.getall["root\cimv2","SELECT {#WIN_HOTFIX} FROM Win32_QuickFixEngineering"]'
            - uuid: a8b2a7e7606146c88611e8951a16490d
              name: 'Get installed hotfixes'
              key: 'wmi.getall["root\cimv2","SELECT {#WIN_HOTFIX} FROM Win32_QuickFixEngineering"]'
              history: '0'
              value_type: TEXT
              trends: '0'
          preprocessing:
            - type: JAVASCRIPT
              parameters:
                - |
                  var supported_winver = ['{$WINVER_2K8R2}','{$WINVER_2K8R2SP1}','{$WINVER_2K12}','{$WINVER_2K12R2}',
                  	'{$WINVER_2K16V1}','{$WINVER_2K16V2}','{$WINVER_2K19}','{$WINVER_2K22}','{$WINVER_2K24}'];
                  switch (value) 
                  {
                  	case '{$WINVER_2K8R2}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2008 R2", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K8R2_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K8R2SP1}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2008 R2 SP1", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K8R2SP1_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K12}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2012", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K12_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K12R2}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2012 R2", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K12R2_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K16V1}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2016 (Build 10.0.14393)", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K16V1_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K16V2}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2016 (Build 10.0.16299)", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K16V2_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K19}':
                      return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2019", "{#WIN_KBSHOULDBEINSTALLED}":{$WINVER_2K19_KB}, "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K22}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2022", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K22_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	case '{$WINVER_2K24}':
                  	return JSON.stringify([{"{#WIN_NAME}":"Windows Server 2024", "{#WIN_KBSHOULDBEINSTALLED}":"{$WINVER_2K24_KB}", "{#WIN_VERS}":value, "{#WIN_HOTFIX}":"HotFixID"}]);
                  	default:
                  	return JSON.stringify([{}]);
                  }
      macros:
        - macro: '{$WINVER_2K8R2}'
          value: 6.1.7600
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K8R2SP1}'
          value: 6.1.7601
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K8R2SP1_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K8R2_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K12}'
          value: 6.2.9200
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K12R2}'
          value: 6.2.9600
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K12R2_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K12_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K16V1}'
          value: 10.0.14393
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K16V1_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K16V2}'
          value: 10.0.16299
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K16V2_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K19}'
          value: 10.0.17763
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K19_KB}'
          value: '[''KB4486153'',''KB4512577'']'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K22}'
          value: 10.0.20348
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K22_KB}'
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
        - macro: '{$WINVER_2K24}'
          value: PLACEHOLDER
          description: 'Komplette Buildnummer der Windowsversion, wird für Abgleich in der Discovery benötigt.'
        - macro: '{$WINVER_2K24_KB}'
          value: PLACEHOLDER
          description: 'Die KBs, die geprüft werden sollen. In Listenform [''KB1'',''KB2'',''KB3'']'
