https://znil.net/api.php?action=feedcontributions&user=BLinz2&feedformat=atomznilwiki - Benutzerbeiträge [de]2024-03-29T05:32:44ZBenutzerbeiträgeMediaWiki 1.39.6https://znil.net/index.php?title=Zabbix:Template_Windows_Updates&diff=9530Zabbix:Template Windows Updates2017-08-06T18:52:11Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 20.03.2014: Neue Version! Den Fehler mit "ZBX_NOTSUPPORTED" gibt es nicht mehr! Zudem wird die Abfrage nun mit niedriger Pozessorpriorität gestartetue <br />
* 11.08.2014: Fehlerbehebung: Auf 32 Bit Windows XP und Windows 2003 Systeme wurde ein fehlerhafter Eintrag in die geplanten Task vorgenommen. Dadurch wurde die Aufgabe nie ausgeführt.<br />
* 23.04.2015: Version 2 - Auf Systemen mit Windows XP oder Server 2003 gab es immer wieder Probleme mit der Prozessorlast. Der Check wird deshalb nicht mehr produktiv eingesetzt. Damit dies beim zuweisen von Templates nicht gesondert beachtet werden muss wird auf solchen Systemen die "ZBX_NOTSUPPORTED"-Meldung zurück gegeben.<br />
<br><br />
<big>Download: '''[[Media:Zabbix-Windowsupdates.zip|Zabbix-Windowsupdates.zip]]'''</big> Version 1.0.0.35 noch mit Windows XP / Windows Server 2003 Unterstützung<br><br />
<big>Download: '''[[Media:Zabbix-Windowsupdates-V2.zip|Zabbix-Windowsupdates-V2.zip]]'''</big> Version 2.0.0.1 gibt auf Windows XP / 2003 immer '''ZBX_NOTSUPPORTED''' zurück<br><br />
----<br />
Im Zabbix-Wiki gibt es einen älteren Tipp wie man per VB-Script die Anzahl der verfügbaren Windows-Updates eines Host prüft.<br><br />
Leider - oder wie immer - funktioniert das nicht so wie gewünscht bzw. lief bei mir gar nicht.<br><br />
Also habe ich die Idee aufgegriffen und neu umgesetzt.<br><br />
{{Hinweis| Unter Windows Server 2003 kann die Abfrage dazu führen das der Prozess ''''svchost.exe'''' eine hohe CPU-Last erzeugt - dauerhaft. Es liegt dann am Dienst für die automatischen Updates. Eigentlich sollte das Problem mit einem Patch von Microsoft behoben sein - klappt aber wohl nicht. Nutzt dieses Template also für Windows Server 2003 auf eigene Gefahr (Version 1.x.x.x).}}<br />
----<br />
<u>'''Wie funktioniert es?'''</u><br><br />
Die <code>windowsupdate.exe</code> wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.<br><br />
Die .exe fragt dann über die Betriebsystemfunktionen nach den Updates<br><br />
Berücktsichtigt werden Updates die<br><br />
* noch nicht installiert sind<br />
* die nicht ausgeblendet wurden<br />
<br><br />
Da diese Prüfung zumindest in meiner Umgebung zu lange dauert (kommt über das 30 Sekunden-Limit von Zabbix) schummelt das Programm:<br><br />
* Beim ersten Aufruf meldet es pauschal eine ''''0'''' zurück<br />
** Erzeugt einen geplanten Task/Aufgabenplanung in es sich selbst ca. 5 Minten später mit dem Parameter ''''CHEAT'''' aufruft<br />
** und beendet sich gleich wieder<br />
* Die ''''CHEAT'''' Version wird ca. 5 Minuten später gestartet und wartet auf das Ergebnis der Update-Prüfung und schreibt diese im gleichen Pfad in die <code>zabbix-windowsupdates.txt</code><br><br />
* Danach wird der geplante Task wieder aus der Aufgabenplanung gelöscht<br />
* Beim nächsten Aufruf durch Zabbix findet das Programm die Textdatei,<br />
** gibt den Wert aus der Datei zurück<br />
** und plant wieder einen Task mit sich selbst und dem Parameter ''''CHEAT''''<br />
* so geht es bis in alle Zeit :-)<br />
<br><br />
Das mit der Aufgabenplanung musste ich leider so machen - Ich habe es mit Unterprozessen etc. versucht - aber der Zabbix-Agent lässt sich davon nicht beirren und wartet bis alle diese beendet sind - und bricht diese ggf. nach 30 Sekunden auch ab.<br><br />
<br><br />
Im Zip-Archiv findet Ihr neben der <code>windowsupdate.exe</code> das Template in Deutsch.<br><br />
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe ''''Templates znil.net'''' mit den Namen<br />
znil Template Windows Updates<br />
znil Template Windows Updates ACTIVE AGENT<br />
Also eine passive und eine Active Agent Version.<br><br />
<br><br />
----<br />
<big>Download: '''[[Media:Zabbix-Windowsupdates.zip|Zabbix-Windowsupdates.zip]]'''</big><br><br />
----<br />
<br><br />
<u>'''Zur Installation müsst Ihr folgendes tun:'''</u><br><br />
* Kopiert die <code>windowsupdates.exe</code> in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.<br />
C:\Program Files\Zabbix<br />
* Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeile<br />
UserParameter=znil.windowsupdates,"C:Program Files\Zabbix\windowsupdates.exe"<br />
ein - Pfad natürlich ggf. anpassen<br><br />
* Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
*Import eine der <code>.XML</code> Dateien in Zabbix und verknüpft diese mit dem Host.<br />
* Warten! Alle 21.600 Sekunden = 6 Stunden wird die Abfrage gestartet. Die erste wird immer 0 bringen, danach kommt die korrekte Anzahl<br><br />
* Zum Testen könnt Ihr den Wert natürlich auch runterschrauben<br><br />
<br><br />
<br><br />
Hier noch für Interessierte der Quellcode der <code>windowsupdates.exe</code>:<br><br />
<source lang="AutoIt"><br />
#NoTrayIcon<br />
#Region ;************ Includes ************<br />
#Include <Constants.au3><br />
#EndRegion ;************ Includes ************<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates<br />
#AutoIt3Wrapper_Res_Fileversion=1.0.0.36<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2013 Bernhard Linz<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_Windows_Updates<br />
#AutoIt3Wrapper_Res_Field=See You|znil.net<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
Opt('MustDeclareVars', 1)<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # windowsupdates.exe --> Tool for Check Count of Windowsupdates Zabbix #<br />
; # 2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # Idea and Original at Zabbix Wiki #<br />
; # #<br />
; # Latest Version of this Program and Template in German: #<br />
; # http://znil.net/index.php?title=Zabbix:Template_Windows_Updates #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
; Catch all Error while using the WMI-Interface with own Error-Function<br />
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"), $f_COMError = False<br />
; And the Error-Function itself<br />
Func MyErrFunc()<br />
Local $HexNumber=hex($oMyError.number,8)<br />
ConsoleWriteError("We intercepted a COM Error !" & @CRLF & _<br />
"Number is: " & $HexNumber & @CRLF & _<br />
"WinDescription is: " & $oMyError.windescription & @CRLF & _<br />
"Source is: " & $oMyError.source & @CRLF & _<br />
"ScriptLine is: " & $oMyError.scriptline & @CRLF)<br />
Exit 1<br />
Endfunc<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Other needed Variables<br />
Dim $o_WMI<br />
Dim $updatesearcher<br />
Dim $Result<br />
Dim $searchResult<br />
Dim $sStartTime<br />
<br />
; The Check for Windows Updates normaly takes too long (more than 30 Seconds), so we cheat:<br />
; We use a memory file in TEMP folder with the result of last run<br />
; If the file not exit (first run or after reboot) we send back 0 (zero) Updates<br />
; and we start this .exe again with the parameter CHEAT - then it will run in background and write the result in memory-file<br />
<br />
;Dim $zabbixmemoryfile = @TempDir & "\zabbix-windowsupdates.txt"<br />
Dim $zabbixmemoryfile<br />
Dim $zabbixfilehandle<br />
<br />
If @UserName <> "SYSTEM" Then<br />
$zabbixmemoryfile = @ScriptDir & "\windowsupdates-helper.txt"<br />
;~ FileWriteLine($zabbixmemoryfile, "Kein SySTEM" & @ScriptFullPath)<br />
Else<br />
$zabbixmemoryfile = @ScriptDir & "\windowsupdates-helper.txt"<br />
;~ FileWriteLine($zabbixmemoryfile, "SYSTEM! " & @ScriptFullPath)<br />
EndIf<br />
<br />
<br />
If StringInStr($CmdLineRaw, "CHEAT") = 0 Then<br />
If FileExists($zabbixmemoryfile) = 1 Then<br />
$Result = FileReadLine($zabbixmemoryfile)<br />
;Run(@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & '"' & @ScriptFullPath & '" CHEAT', "", @SW_HIDE)<br />
;MsgBox(0,"",@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & "%WINDIR%\system32\schtasks.exe /create /SC MINUTE /F /MO 5 /TN ZabbixWindowsUpdateCheck /TR " & '"' & "'" & @ScriptFullPath & "' CHEAT" & '"' & " /ST 00:00 /RU SYSTEM")<br />
Run(@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & "%WINDIR%\system32\schtasks.exe /create /SC MINUTE /MO 15 /F /TN ZabbixWindowsUpdateCheck /TR " & '"\"' & @ScriptFullPath & '\" CHEAT"' & " /ST 00:00 /RU SYSTEM", "", @SW_HIDE)<br />
<br />
;ShellExecute('"' & @ScriptFullPath & '"', "CHEAT")<br />
Sleep(2000)<br />
ConsoleWrite($Result & @CRLF)<br />
Exit 0<br />
Else<br />
;Run(@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & '"' & @ScriptFullPath & '" CHEAT', "", @SW_HIDE)<br />
Run(@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & "%WINDIR%\system32\schtasks.exe /create /SC MINUTE /MO 15 /F /TN ZabbixWindowsUpdateCheck /TR " & '"\"' & @ScriptFullPath & '\" CHEAT"' & " /ST 00:00 /RU SYSTEM", "", @SW_HIDE)<br />
;ShellExecute('"' & @ScriptFullPath & '"', "CHEAT")<br />
Sleep(2000)<br />
ConsoleWrite("0" & @CRLF)<br />
Exit 0<br />
EndIf<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ok, CHEAT mode!<br />
<br />
; Get the WMI-Interface at local Computer (= .)<br />
;FileWriteLine(@ScriptDir & "\windowsupdate.log", "Befinde mich im Cheat modus")<br />
$o_WMI = ObjCreate("Microsoft.Update.Session", @ComputerName)<br />
<br />
; Test whether it worked and go on<br />
If IsObj($o_WMI) Then<br />
$updatesearcher = $o_WMI.CreateupdateSearcher<br />
$searchResult = $updateSearcher.Search("IsInstalled=0 and IsHidden=0 and Type='Software'")<br />
$Result = $searchResult.Updates.Count<br />
$zabbixfilehandle = FileOpen($zabbixmemoryfile, 2)<br />
FileWriteLine($zabbixfilehandle, $Result)<br />
FileClose($zabbixmemoryfile)<br />
Run(@ComSpec & ' /c start "Zabbix" /MIN /LOW ' & "%WINDIR%\system32\schtasks.exe /delete /F /TN ZabbixWindowsUpdateCheck", "", @SW_HIDE)<br />
;ConsoleWrite($searchResult.Updates.Count & @CRLF)<br />
;MsgBox(0,"","->" & $searchResult.Updates.Count & "<-")<br />
;Sleep (30000)<br />
Exit 0<br />
EndIf<br />
Exit 0<br />
</source><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 14:57, 22. Mär. 2014 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Service_Auto-Discover_-_Windows_Dienste_automatisch_entdecken&diff=9529Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
{{Hinweis| Ab Zabbix 3.x ist diese Funktion nativ in Zabbix eingebaut. Siehe [[Zabbix:Template Windows Service Auto-Discover Zabbix 3.x - Windows Dienste Service Discovery mit Bordmitteln]]}}<br><br />
Aktuelle Version der '''''servdisc.exe''''' ist 4.0.1.1<br><br />
<big>Download: '''[[Media:Zabbix-Service-Discovery.zip|Zabbix-Service-Discovery.zip]]'''</big><br><br />
<br><br />
<u>'''History:'''</u><br><br />
* 10.11.2013 V1: first Version<br />
* 13.11.2013 V1.1: add a Routine for german Special Chars (replace 'ä' by 'ae' and so on)<br />
* 02.12.2013 V2: add a file ''''servdisc-ignore.txt'''' - add names of services that are irritating, they will not be add<br />
* 17.03.2014 V3: you can use the long or short Service-Name in the '''''servdisc.ignore.txt''''' (It's a "Text in Text" Test)<br />
* 17.03.2014 V3.0.0.1: '''''servdisc.exe''''' ignore all "Trigger Start" Services<br />
* 25.03.2014 V3.0.0.2: Fixed Error with '''''servdisc-ignore.txt'''''<br />
* 08.04.2015 V4: You can set Trigger for the services to Information and Critical if you like<br />
* 08.04.2015 V4: You can include Services (Running Status will be ignored)<br />
* 11.05.2015 V4.0.1.1: Filter Special Chars from Display Name (for Service-Names with Paths)<br />
<br><br />
----<br />
==Vorwort==<br />
Auf der Suche nach einer Idee wie man die laufenden Windows-Dienste in Zabbix automatisch erfassen kann fand ich das hier im Internet:<br><br />
https://github.com/q1x/zabbix-templates/tree/master/service-discovery<br />
<br><br />
Ein PowerShell Script mit passenden Template welches Automatisch alle Windows-Dienste findet die auf automatischen Start stehen - perfekt!<br><br />
Ok, das PowerShell Skript hätte eine Anpassung der Sicherheitseinstellungen benötigt - aber auf der Seite gibt es auch ein VBS-Skript das genau das gleiche kann.<br><br />
<br><br />
Leider kam nach einen ersten Test die Ernüchterung - das klappt nicht so wie geplant, es gab dauernd eine Fehlermeldung "No JSON Object" etc..<br><br />
<br><br />
Nach einigen Experimenten kam ich darauf das die Rückmeldung schlicht zu groß war. Auf meinem Testserver kommt eine Rückmeldung von ca. 28.000 Zeichen, in irgendwelchen Foren fand ich den Hinweis das Zabbix bei bestimmten Datenbanken nur maximal 4.000 Zeichen auf einmal in einer JSON-Rückmeldung unterstützt.<br><br />
<br><br />
Nach einem kurzen Test im welchen ich die Zahl der zurückgegeben Dienste beschränkte hatte ich Erfolg!<br><br />
<br><br />
Erfasst werden wie beim Original nur Dienste die auf ''''Automatisch'''' oder auf ''''Automatisch (Verzögerter Start)'''' stehen.<br />
<br><br />
Im Zip-Archiv findet Ihr neben der <code>servdisc.exe</code> das Template in Englisch.<br><br />
Das Template findet Ihr nach dem Import in der Hostgruppe ''''Templates'''' mit den Namen<br />
znil Template Windows Dienste Service Discovery ACTIVE AGENT<br />
Also nur eine Active Agent Version.<br><br />
<br><br />
Achtung, er sucht nur alle 60 Minuten / einmal die Stunde in meiner gewählten Vorseinstellung!<br><br />
Es wird also eine Weile dauern bis er alle Dienste hat.<br><br />
<br><br />
Da ich den Zabbix-Agenten nicht überreden konnte die deutschen Umlaute korrekt zu übernehmen hab ich zum zweitbesten gegriffen was mir einfiel:<br><br />
Alle Umlaute in den Dienstnamen werden durch alternative Schreibweisen ersetzt, also ein ''''ä'''' wird zu ''''ae'''' usw. - So wird es lesbarer<br><br />
<br><br />
----<br />
<br />
==Features==<br />
Die neue Version V4 hat folgende Features:<br><br />
* Im Standard findet er nur alle Dienste die auf "Automatisch" stehen und zum Zeitpunkt der Erkennung auch laufen UND in der Registry nicht als "Bei Bedarf" gekennzeichnet sind<br />
* <code>servdisc-ignore.txt</code>: Alle Dienste die hier drin stehen werden ignoriert - Pro Zeile ein Dienstname. Es findet ein "Text in Text" Vergleich statt, er prüft also ob die Zeichenfolge aus der Datei im Dienstnamen oder im Anzeigenamen vorkommt. Den Dienst "Designs" könnte man also Filtern indem man den Anzeigenamen "Designs" angibt oder den Dienstnamen "Themes"<br><br />
* <code>servdisc-include.txt</code>: Alle Dienste die hier drin stehen werden unabhängig von Ihrem Status aufgenommen, also auch wenn diese deaktiviert sind oder auf manuell stehen. Der Vergleich funktioniert genauso wie bei der Ignorieren Datei<br><br />
* <code>servdisc-InfoOnly.txt</code>: Im Normalfall werden die Trigger zu den Items mit der Stufe "Average" erzeugt. Steht der Name des Dienstes in dieser Datei hier wird der Trigger dazu mit der Stufe "Information" angelegt. Die Datei hat keinen Einfluss auf die Erkennung der Dienste, nur auf den Trigger dazu.<br />
* code>servdisc-Critical.txt</code>: Wie zuvor, jedoch werden die Trigger für diese Dienste mit der Stufe "Critical" angelegt. Auch diese Datei hat keinen Einfluss auf die Erkennung der Dienste.<br><br />
<br><br />
----<br />
==Download==<br />
Aktuelle Version der '''''servdisc.exe''''' ist 4.0.0.5<br><br />
Download: <big>'''[[Media:Zabbix-Service-Discovery.zip|Zabbix-Service-Discovery.zip]]'''</big><br><br />
<br><br />
<br><br />
----<br />
==Installation==<br />
<br><br />
<u>'''Zur Installation müsst Ihr folgendes tun:'''</u><br><br />
* Kopiert die <code>servdisc.exe</code> und die <code>servdisc-ignore.txt</code> in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.<br />
C:\Program Files\Zabbix<br />
* Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeile<br />
UserParameter=service.discovery,"C:\Program Files\Zabbix\servdisc.exe"<br />
ein - Pfad natürlich ggf. anpassen<br><br />
* Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
* Import eine der <code>.XML</code> Dateien in Zabbix und verknüpft diese mit dem Host.<br />
* Warten! Alle 60 Minuten sollten nun Dienste gefunden werden und der Liste hinzugefügt werden. Wenn es klappt könnte es eine gute Idee sein den Wert im Template unter Discovery von den 900 Sekunden weitaus höher zu setzen, z.B. nur noch alle 12h.<br><br />
* Dienste die nicht automatisch gefundern werden sollen obwohl diese auf Automatisch stehen tragt ihr in die '''''servdisc-ignore.txt''''' ein. Am besten nehmt Ihr den Dienstnamen - also den Kurznamen den man ganz oben in den Eigenschaften eines Dienstes sehen kann, nicht den langen Anzeigenamen.<br><br />
'''ACHTUNG!''' Die '''''servdisc-ignore.txt''''' enthält beriets Einträge - Prüft die einmal vorher.<br><br />
<br><br />
<br><br />
----<br />
==Screenshots==<br />
Die gefundenen Items (Auzug):<br><br />
:[[Datei:ZabbixServiceDiscovery-001.png]]<br><br />
<br><br />
Und die Trigger dazu (Auszug):<br><br />
:[[Datei:ZabbixServiceDiscovery-002.png]]<br><br />
<br><br />
<br><br />
----<br />
==Quellcode==<br />
Hier noch für Interessierte der Quellcode der <code>servdisc.exe</code>:<br><br />
<source lang="AutoIt"><br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_Outfile=servdisc.exe<br />
#AutoIt3Wrapper_UseUpx=y<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Service Auto-Discovery<br />
#AutoIt3Wrapper_Res_Fileversion=4.0.1.2<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2013 Bernhard Linz<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_Windows_Service_Auto-Discover_-_Windows_Dienste_automatisch_entdecken<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#include <Array.au3><br />
Opt('MustDeclareVars', 1)<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # servdisc.exe --> Tool for Auto-Discovery Windows Services in Zabbix #<br />
; # 2013/2014/2015 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # Idea and Original Powershell Script by Raymond Kuiper #<br />
; # Use with Template of Raymond Kuiper at https://github.com/q1x/zabbix-templates/tree/master/service-discovery #<br />
; # #<br />
; # Latest Version of this Program and Template in German: #<br />
; # http://znil.net/index.php?title=Zabbix:Template_Windows_Service_Auto-Discover_-_Windows_Dienste_automatisch_entdecken #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
; Catch all Error while using the WMI-Interface with own Error-Function<br />
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"), $f_COMError = False<br />
; And the Error-Function itself<br />
Func MyErrFunc()<br />
Local $HexNumber=hex($oMyError.number,8)<br />
ConsoleWriteError("We intercepted a COM Error !" & @CRLF & _<br />
"Number is: " & $HexNumber & @CRLF & _<br />
"WinDescription is: " & $oMyError.windescription & @CRLF & _<br />
"Source is: " & $oMyError.source & @CRLF & _<br />
"ScriptLine is: " & $oMyError.scriptline & @CRLF)<br />
Exit 1<br />
Endfunc<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Function for catching the special characters - hey we using the old DOS-Console and the Console did'nt like them<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
EndFunc ;==>_ANSI2OEM<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Other needed Variables<br />
Dim $o_WMI<br />
Dim $o_colListOfServices<br />
Dim $s_JSONOutput<br />
Dim $s_Service2IgnoreFile = @ScriptDir & "\servdisc-ignore.txt"<br />
Dim $h_Service2IgnoreFile<br />
Dim $a_Service2Ignore[1] = [ 0 ]<br />
Dim $b_IgnoreService = False<br />
<br />
Dim $s_Service2IncludeFile = @ScriptDir & "\servdisc-include.txt"<br />
Dim $h_Service2IncludeFile<br />
Dim $a_Service2Include[1] = [ 0 ]<br />
Dim $b_IncludeService = False<br />
<br />
Dim $s_Service2InfoOnlyFile = @ScriptDir & "\servdisc-InfoOnly.txt"<br />
Dim $h_Service2InfoOnlyFile<br />
Dim $a_Service2InfoOnly[1] = [ 0 ]<br />
Dim $b_InfoOnlyService = False<br />
<br />
Dim $s_Service2CriticalFile = @ScriptDir & "\servdisc-Critical.txt"<br />
Dim $h_Service2CriticalFile<br />
Dim $a_Service2Critical[1] = [ 0 ]<br />
Dim $b_CriticalService = False<br />
<br />
Dim $s_AllServices = ":"<br />
<br />
Dim $i_ServiceType<br />
Dim $s_temp<br />
Dim $i<br />
Dim $s_spaces = ' ' ; 5 Spaces<br />
<br />
Dim $s_DisplayName_cleaned<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Some of the services are irritating, just ignore them - read items from a file<br />
If FileExists($s_Service2IgnoreFile) = 1 Then<br />
$h_Service2IgnoreFile = FileOpen($s_Service2IgnoreFile, 0)<br />
While 1<br />
$s_temp = FileReadLine($h_Service2IgnoreFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp) > 2 Then ; at least 3 or more chars<br />
$a_Service2Ignore[0] = $a_Service2Ignore[0] + 1<br />
ReDim $a_Service2Ignore[$a_Service2Ignore[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Service2Ignore[$a_Service2Ignore[0]] = $s_temp<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Include Services independently of Running Status / Autostart status<br />
If FileExists($s_Service2IncludeFile) = 1 Then<br />
$h_Service2IncludeFile = FileOpen($s_Service2IncludeFile, 0)<br />
While 1<br />
$s_temp = FileReadLine($h_Service2IncludeFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp) > 2 Then ; at least 3 or more chars<br />
$a_Service2Include[0] = $a_Service2Include[0] + 1<br />
ReDim $a_Service2Include[$a_Service2Include[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Service2Include[$a_Service2Include[0]] = $s_temp<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Set Trigger of some services to "Information" instead of "Average"<br />
If FileExists($s_Service2IncludeFile) = 1 Then<br />
$h_Service2InfoOnlyFile = FileOpen($s_Service2InfoOnlyFile, 0)<br />
While 1<br />
$s_temp = FileReadLine($h_Service2InfoOnlyFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp) > 2 Then ; at least 3 or more chars<br />
$a_Service2InfoOnly[0] = $a_Service2InfoOnly[0] + 1<br />
ReDim $a_Service2InfoOnly[$a_Service2InfoOnly[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Service2InfoOnly[$a_Service2InfoOnly[0]] = $s_temp<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Set Trigger of some services to "Critical" instead of "Average"<br />
If FileExists($s_Service2CriticalFile) = 1 Then<br />
$h_Service2CriticalFile = FileOpen($s_Service2CriticalFile, 0)<br />
While 1<br />
$s_temp = FileReadLine($h_Service2CriticalFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp) > 2 Then ; at least 3 or more chars<br />
$a_Service2Critical[0] = $a_Service2Critical[0] + 1<br />
ReDim $a_Service2Critical[$a_Service2Critical[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Service2Critical[$a_Service2Critical[0]] = $s_temp<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Get the WMI-Interface at local Computer (= .)<br />
$o_WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")<br />
; Test whether it worked and go on<br />
If IsObj($o_WMI) Then<br />
; Get List of all Autostart-Services<br />
$o_colListOfServices = $o_WMI.ExecQuery("Select * from Win32_Service where Startmode='Auto'")<br />
; Ok, we have the List, now look if we were interrupted last Time<br />
; Start creating the JSON Output:<br />
$s_JSONOutput = '{"data":[' & '@CRLF'<br />
; Loop: Add the Services to JSON Output String Line for Line but nor more than 4000 Chars<br />
For $objService In $o_colListOfServices<br />
$b_IgnoreService = False<br />
$b_InfoOnlyService = False<br />
$b_CriticalService = False<br />
; Do nothing until we found the Service of last Run<br />
; Will start after the first Part found the Service of last Time or will run from beginning if there was no last time<br />
; Test 1: But first check if the service is one of the bad one we wanna ignore<br />
If $a_Service2Ignore[0] > 0 Then<br />
For $i = 1 To $a_Service2Ignore[0]<br />
;ConsoleWrite($objService.DisplayName & "<--->" & $a_Service2Ignore[$i] & @CRLF)<br />
If StringInStr($objService.DisplayName, $a_Service2Ignore[$i]) > 0 Then<br />
$b_IgnoreService = True<br />
EndIf<br />
If StringInStr($objService.Name, $a_Service2Ignore[$i]) > 0 Then<br />
$b_IgnoreService = True<br />
EndIf<br />
Next<br />
EndIf<br />
If $a_Service2InfoOnly[0] > 0 Then<br />
For $i = 1 To $a_Service2InfoOnly[0]<br />
;ConsoleWrite($objService.DisplayName & "<--->" & $a_Service2Ignore[$i] & @CRLF)<br />
If StringInStr($objService.DisplayName, $a_Service2InfoOnly[$i]) > 0 Then<br />
$b_InfoOnlyService = True<br />
EndIf<br />
If StringInStr($objService.Name, $a_Service2InfoOnly[$i]) > 0 Then<br />
$b_InfoOnlyService = True<br />
EndIf<br />
Next<br />
EndIf<br />
If $a_Service2Critical[0] > 0 Then<br />
For $i = 1 To $a_Service2Critical[0]<br />
If StringInStr($objService.DisplayName, $a_Service2Critical[$i]) > 0 Then<br />
$b_CriticalService = True<br />
EndIf<br />
If StringInStr($objService.Name, $a_Service2Critical[$i]) > 0 Then<br />
$b_CriticalService = True<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
; Test 2: Just another Test - we don't want "Trigger Start" Services<br />
$i_ServiceType = RegRead("HKLM\SYSTEM\CurrentControlSet\Services\" & $objService.Name & "\TriggerInfo\0", "Action")<br />
If $i_ServiceType <> "" Then<br />
$b_IgnoreService = True<br />
EndIf<br />
; Test 3: Only "Running" Services<br />
If $objService.State <> "Running" Then<br />
$b_IgnoreService = True<br />
EndIf<br />
; Ok, all Tests processed, now add the service to list (if we don't wanna ignore this service)<br />
If $b_IgnoreService = False Then<br />
If ($b_InfoOnlyService = False) And ($b_CriticalService = False) Then<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICEDISPLAY}":"' & $objService.DisplayName & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICENAME}":"' & $objService.Name & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICESTATE}":"' & $objService.State & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICEDESC}":"-"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
ElseIf $b_CriticalService = True Then<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#CRITICALSERVICEDISPLAY}":"' & $objService.DisplayName & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#CRITICALSERVICENAME}":"' & $objService.Name & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#CRITICALSERVICESTATE}":"' & $objService.State & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#CRITICALSERVICEDESC}":"-"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
ElseIf $b_InfoOnlyService = True Then<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICEDISPLAY}":"' & $objService.DisplayName & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICENAME}":"' & $objService.Name & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICESTATE}":"' & $objService.State & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICEDESC}":"-"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
EndIf<br />
$s_AllServices = $s_AllServices & $objService.Name & ":"<br />
EndIf<br />
Next<br />
; And now all again for finding Included Services<br />
$o_colListOfServices = $o_WMI.ExecQuery("Select * from Win32_Service")<br />
<br />
For $objService In $o_colListOfServices<br />
$b_IncludeService = False<br />
$b_InfoOnlyService = False<br />
If $a_Service2Include[0] > 0 Then<br />
For $i = 1 To $a_Service2Include[0]<br />
If StringInStr($objService.DisplayName, $a_Service2Include[$i]) > 0 Then<br />
$b_IncludeService = True<br />
EndIf<br />
If StringInStr($objService.Name, $a_Service2Include[$i]) > 0 Then<br />
$b_IncludeService = True<br />
EndIf<br />
Next<br />
EndIf<br />
If StringInStr($s_AllServices, ":" & $objService.Name & ":") > 0 Then<br />
;Service is already in List!!!<br />
$b_IncludeService = False<br />
EndIf<br />
If ($a_Service2InfoOnly[0] > 0) And ($b_IncludeService = True) Then<br />
For $i = 1 To $a_Service2InfoOnly[0]<br />
;ConsoleWrite($objService.DisplayName & "<--->" & $a_Service2Ignore[$i] & @CRLF)<br />
If StringInStr($objService.DisplayName, $a_Service2InfoOnly[$i]) > 0 Then<br />
$b_InfoOnlyService = True<br />
EndIf<br />
If StringInStr($objService.Name, $a_Service2InfoOnly[$i]) > 0 Then<br />
$b_InfoOnlyService = True<br />
EndIf<br />
Next<br />
EndIf<br />
If $b_IncludeService = True Then<br />
If $b_InfoOnlyService = False Then<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICEDISPLAY}":"' & StringRegExpReplace($objService.DisplayName,"\W","") & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICENAME}":"' & $objService.Name & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICESTATE}":"' & $objService.State & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#SERVICEDESC}":"-"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
Else<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICEDISPLAY}":"' & StringRegExpReplace($objService.DisplayName,"\W","") & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICENAME}":"' & $objService.Name & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICESTATE}":"' & $objService.State & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#INFOSERVICEDESC}":"-"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
EndIf<br />
$s_AllServices = $s_AllServices & $objService.Name & ":"<br />
EndIf<br />
Next<br />
<br />
; Ok, just a Test if someone muck around us - let us stop the last time at a service and than, before next run<br />
; they have deleted this service so we can never find it. Or someone manipulate our Memory File<br />
; Delete the last -> , <-<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen(',' & '@CRLF'))<br />
$s_JSONOutput = $s_JSONOutput & ']}'<br />
; SpecialChars replace<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "ä", "ae", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "Ä", "Ae", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "ö", "oe", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "Ö", "Oe", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "ü", "ue", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "Ü", "Ue", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "ß", "ss", 0, 1)<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF, 0, 1)<br />
ConsoleWrite(_ANSI2OEM($s_JSONOutput))<br />
<br />
EndIf<br />
Exit 0<br />
</source><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Robocopy&diff=9528Zabbix:Template Windows Robocopy2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
==Vorschau==<br />
Hier die Ansicht "'''''Latest Data'''''" mit den Rückgabecodes<br><br />
[[Datei:Zabbix_Template_Robocopy-001.png]]<br />
<br><br />
<br><br />
----<br />
==Value Mapping==<br />
Eigentlich ist es ganz einfach die Ausführung von {{Key|Robocopy}} zu überwachen.<br><br />
Denn das Programm nutzt die Möglichkeit beim Beenden einen Fehlercode zu übergeben recht ausführlich.<br><br />
Nachzuschlagen zum Beispiel unter:<br><br />
* https://support.microsoft.com/en-us/kb/954404<br />
* http://ss64.com/nt/robocopy-exit.html<br />
Generell lässt sich sagen das jeder Exit-Code ab 8 einen Fehler bedeutet!<br><br />
<br><br />
Ich habe mir dazu in Zabbix mein persönliches Value-Mapping zusammengestellt (was Ihr mit dem Template für Zabbix 3.0.x importieren könnt):<br><br />
0 ⇒ No Change<br />
1 ⇒ Copy OK<br />
2 ⇒ Extra Files (deleted)<br />
3 ⇒ Copy OK + Extra Files (deleted)<br />
4 ⇒ Some Files can not be overwritten<br />
5 ⇒ New files copied + some Files can not be overwritten<br />
6 ⇒ Extra Files (deleted) + some Files can not be overwritten<br />
7 ⇒ New files copied + Extra File + Files can not be overwritten<br />
8 ⇒ FAILED<br />
9 ⇒ FAILED (Copy OK)<br />
10 ⇒ FAILED (Extra Files)<br />
11 ⇒ FAILED (Copy OK + Extra Files)<br />
12 ⇒ FAILED (Overwrite Problems)<br />
13 ⇒ FAILED (Copy OK + Overwrite Problems)<br />
14 ⇒ FAILED (Extra Files + Overwrite Probs)<br />
15 ⇒ FAILED (Copy OK, Extra Files + Overwrite Probs)<br />
16 ⇒ FATAL ERROR<br />
<br><br />
Nun müssen wir nur noch diesen Exit-Code von Robocopy zu Zabbix bekommen.<br />
<br><br />
<br><br />
----<br />
==Vorbereitung auf dem Host==<br />
<u><big>'''Variante 1:'''</big></u> Installierter Zabbix-Agent<br><br />
Also in meinen Umgebungen ist auf den Servern immer der Zabbix-Agent installiert.<br><br />
Es gibt also ein Verzeichnis im welchen der Zabbix-Agent und dessen Konfigurationsdatei liegt, in meinen Umgebungen sind das in der Regel folgende Pfade:<br />
Agent: "C:\Program Files\Zabbix\zabbix_agentd.exe"<br />
Konfiguration: "C:\Program Files\Zabbix\zabbix_agentd.win.conf"<br />
Das wichtige ist aber das ich auch die {{Key|zabbix_sender.exe}} dort mit ablege!<br><br />
Sender: "C:\Program Files\Zabbix\zabbix_sender.exe"<br />
<br><br />
Mit dem {{Key|zabbix_sender.exe}} kann man nämlich ganz hervorragend aus eigenen Skripten und Programmen heraus Daten an den Zabbix-Server senden.<br><br />
Und in der Konfigurationsdatei steht drin für welchen Host wir uns melden - und an welchen Server wir die Daten senden müssen.<br><br />
Deshalb rufen wir die {{Key|zabbix_sender.exe}} einfach wie folgt auf:<br><br />
"C:\Program Files\Zabbix\zabbix_sender.exe" -c "C:\Program Files\Zabbix\zabbix_agentd.win.conf" -k Name.des.Keys -o Wert<br />
<br><br />
Damit das funktioniert muss in der Konfigurationsdatei zwingend der <code>ServerActive=</code> Eintrag gesetzt sein:<br />
ServerActive=192.168.50.253:10051<br />
Der Vorteil ist das dies auch nach einem Update des Agenten, Ändern des Host-Namen oder Wechsel des Zabbix-Server weiter funktioniert ohne das ich in meinem Batch-Skript etwas ändern muss.<br><br />
<br><br />
<br><br />
----<br />
<u><big>'''Variante 2:'''</big></u> Direkt per {{Key|zabbix_sender.exe}}<br><br />
Alternativ lassen sich die Parameter auch alle einzeln an die {{Key|zabbix_sender.exe}} übergeben:<br><br />
zabbix_sender.exe -I <IP-Adresse> -p <Port> -s <Name_des_Host_auf_dem_Zabbix_Server> -k Name.des.Keys -o Wert<br />
Ihr müsstet euch diese also an eine geeignete Stelle kopieren.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Einbau der Meldung in das Robocopy-Script==<br />
Der Aufruf von {{Key|Robocopy}} muss über ein Skript erfolgen ('''.bat''' oder '''.cmd''') und sieht zum Beispiel wie folgt aus:<br><br />
robocopy \\SERVER\D$\Netzlaufwerke\BOB\ \\NAS\backup1\Netzlaufwerke\BOB\ /MIR /R:10 /W:3<br />
Nun schreiben wir unmittelbar danach folgende Zeile:<br />
"C:\Program Files\Zabbix\zabbix_sender.exe" -c "C:\Program Files\Zabbix\zabbix_agentd.win.conf" -k znil.robocopy[Netzlaufwerke-BOB] -o %ERRORLEVEL%<br />
<br><br />
Direkt nach der Ausführung von {{Key|Robocopy}} wird also der Exit-Code an Zabbix gesenden. Die Zeile muss direkt auf den Befehl von {{Key|Robocopy}} folgen!<br />
Nachdem nämlich zum Beispiel die {{Key|zabbix_sender.exe}} den Wert gesendet hat steht in <code>%ERRORLEVEL%</code> der Exit-Code der {{Key|zabbix_sender.exe}} drin.<br><br />
<br><br />
Gesendet werden die Daten an den Host der in der Konfigurationsdatei definiert sind - mit dem Item-Key '''znil.robocopy[Netzlaufwerke-BOB]'''.<br><br />
Dieses muss es natürlich dann noch für den Host geben.<br><br />
<br><br />
<br><br />
----<br />
==Item-Key anlegen==<br />
Das können wir entweder in einem eigenen Template machen (empfohlen) oder auch direkt auf dem Host:<br><br />
[[Datei:Zabbix_Template_Robocopy-002.png]]<br><br />
<br><br />
Wichtig ist das<br />
* Das '''Type''' auf {{Key|Zabbix Trapper}} steht<br />
* Der '''Key''' absolut identisch mit dem ist den wir bei der {{Key|zabbix_sender.exe}} eintragen<br />
<br><br />
Ich verwende hier immer<br />
znil.robocopy[Name_des_Jobs]<br />
Den Wert in den eckigen Klammern passe ich also immer an.<br><br />
<br><br />
Jetzt könnt ihr euer Skript einmal laufen lassen - und er sollte euch unter '''Latest Data'''' etwas wie folgt liefern:<br><br />
[[Datei:Zabbix_Template_Robocopy-003.png]]<br><br />
<br><br />
<br><br />
----<br />
==Trigger anlegen==<br />
Generell sehe ich 2 sinnvolle Prüfungen beim Trigger:<br />
* ob der letzte Exit-Code größer als 7 ist<br />
* Wenn mehr als x Minuten/Stunden/Tage keine neuen Daten gekommen sind<br />
mit ersterem Prüfen wir den Kopiervorgang an sich, mit zweiten ob unser Job überhaupt gelaufen ist.<br />
Die Expression für die Prüfung auf den Exit-Code kann also wie folgt aussehen:<br><br />
{znil Template Robocopy Example:znil.robocopy[Netzlaufwerke-BOB].last()}>7<br />
Und die Prüfung ob der Job in den letzten 3 Tagen gelaufen ist so:<br><br />
{znil Template Robocopy Example:znil.robocopy[Netzlaufwerke-BOB].nodata(3d)}=1<br />
<br><br />
<br><br />
----<br />
<br />
==Template==<br />
Nachfolgend das Template. Es hat das Item für das obige Beispiel, die beiden Trigger - und enthält das '''Value-Mapping''':<br />
<br><br />
:'''[[Media:znil_Template_Robocopy_Example_Zabbix_3.0.x.zip|znil_Template_Robocopy_Example_Zabbix_3.0.x.zip]]'''<br />
Es ist erst ab Zabbix 3.0.x geeigent!<br><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Mountpoints-Discover_-_Windows_Volumes_ohne_Laufwerk_entdecken&diff=9527Zabbix:Template Windows Mountpoints-Discover - Windows Volumes ohne Laufwerk entdecken2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
Ab Werk ist in Zabbix eine automatische Erkennung und Überwachung von Datenträgern eingebaut.<br><br />
Unter Windows findet er NTFS und FAT32 Datenträger und erstellt die notwendigen Items und Trigger.<br><br />
<br><br />
Nun hab ich hier einen Kunden der Massiv Datenträger / Volumes in vorhandene NTFS-Ordner gemountet hat.<br><br />
<br><br />
Auf <code>C:\</code> gibt es z.B. einen Ordner <code>C:\Disk2"</code> der wiederum eine eigene Festplatte ist:<br><br />
[[Datei:Zabbix-WindowsMountpoints-001.PNG]]<br><br />
<br><br />
Zabbix erkennt jetzt aber nur das Laufwerk <code>C:</code> und nicht die 2. Festplatte unter <code>C:\Disk2</code>.<br><br />
Da gibt auch schon einen Feature-Request für: https://support.zabbix.com/browse/ZBXNEXT-1595<br><br />
<br><br />
Aber auch in der aktuellen 2.4.3 Version ist das noch nicht drin.<br><br />
Da ich es brauchte habe ich mir "mal eben schnell" eine eigene Lösung gebaut.<br><br />
<br><br />
<br><br />
----<br />
==Changelog==<br />
* 09.02.2015: Erste öffentliche Version, Dateiversion der '''''WindowsMountPoints.exe''''' ist '''1.0.0.12'''<br />
* 22.03.2015: Windows SnapShots / ShadowCopys werden nun ausgefiltert. Falls eine Erkennung lief während zum Beispiel ein Backup von Veeam im Gange war wurden bisher dessen SnapShots ebenfalls erkannt<br />
* 22.03.2015: Werden keine MountPoints gefunden meldet das Programm nun '''ZBX_NOTSUPPORTED''' zurück<br />
* 16.04.2015: Werden keine MountPoints gefunden meldet das Programm nun einen leeren JSON String zurück. '''ZBX_NOTSUPPORTED''' wird nur noch bei WMI-Zugriffsfehlern zurück gegeben<br />
<br><br />
<br><br />
----<br />
<br />
==Download==<br />
Aktuelle Dateiversion der '''''WindowsMountPoints.exe''''' ist '''1.0.0.24'''<br />
<br><br />
<u>'''Download:'''</u> <big>'''[[Media:Znil-Zabbix-Windows-Mountpoints.zip|Znil-Zabbix-Windows-Mountpoints.zip]]'''</big><br> <br />
<br><br />
<br><br />
----<br />
<br />
==Agenten erweitern==<br />
Kopiert die<br><br />
WindowsMountpoints.exe<br />
aus dem Archiv in das Verzeichnis in welchen auch der Zabbix-Windows-Agent liegt.<br><br />
Bearbeitet die<br />
zabbix_agentd.win.conf<br />
und hängt folgende Zeile an:<br><br />
UserParameter=vfs.fs.znil.windowsmountpoints.discovery,"%PROGRAMFILES%\Zabbix\UserParameter\WindowsMountPoints.exe"<br />
den Pfad natürlich an eure Gegebenheiten anpassen!<br />
<br><br />
Dann den Agenten einmal neu starten:<br><br />
net stop "Zabbix Agent"<br />
net start "Zabbix Agent"<br />
<br><br />
<br><br />
----<br />
==Template importieren==<br />
Importiert die <code>.XML</code> Datei aus dem Archiv.<br><br />
Danach habt Ihr in der Host-Gruppe<br />
Templates DATAGROUP<br />
ein neues Template mit dem Namen<br />
znil Template OS Windows only Mountpoints V2015-02-09<br />
welches Ihr dann einfach den Host zuweisen könnt.<br><br />
Trigger etc müsst Ihr dann anpassen!<br><br />
Die automatische Erkennung läuft alle 60 Minuten.<br><br />
<br><br />
<br><br />
----<br />
==Screenshots==<br />
:[[Datei:Zabbix-WindowsMountpoints-002.PNG]]<br><br />
<br><br />
<br><br />
----<br />
==Quellcode==<br />
<source lang="AutoIt"><br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_Outfile=WindowsMountPoints.exe<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Windows Mountpoints Auto-Discovery<br />
#AutoIt3Wrapper_Res_Fileversion=1.0.0.24<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2015 Bernhard Linz<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_Windows_Mountpoints_-_Windows_Festplatten_Mountpoints_entdecken<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#include <Array.au3><br />
Opt('MustDeclareVars', 1)<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # WindowsMountpoints.exe --> Tool for Auto-Discovery Windows Mountpoints (Volumes without Driveletter, mounted at Folder)#<br />
; # 2015 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # #<br />
; # Latest Version of this Program and Template #<br />
; # http://znil.net/index.php?title=Zabbix:Template_Windows_Mountpoints_-_Windows_Festplatten_Mountpoints_entdecken #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
; Catch all Error while using the WMI-Interface with own Error-Function<br />
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"), $f_COMError = False<br />
; And the Error-Function itself<br />
Func MyErrFunc()<br />
Local $HexNumber=hex($oMyError.number,8)<br />
ConsoleWriteError("We intercepted a COM Error !" & @CRLF & _<br />
"Number is: " & $HexNumber & @CRLF & _<br />
"WinDescription is: " & $oMyError.windescription & @CRLF & _<br />
"Source is: " & $oMyError.source & @CRLF & _<br />
"ScriptLine is: " & $oMyError.scriptline & @CRLF)<br />
Exit 1<br />
Endfunc<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Function for catching the special characters - hey we using the old DOS-Console and the Console did'nt like them<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
EndFunc ;==>_ANSI2OEM<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Other needed Variables<br />
Dim $wbemFlagReturnImmediately = 0x10<br />
Dim $wbemFlagForwardOnly = 0x20<br />
Dim $colItems = ""<br />
Dim $strComputer = "localhost"<br />
Dim $o_WMI<br />
Dim $o_colListOfVolumes<br />
Dim $s_JSONOutput<br />
Dim $s_Mointpoint2IgnoreFile = @ScriptDir & "\WindowsMountPoints-ignore.txt"<br />
Dim $h_Mountpoint2IgnoreFile<br />
Dim $a_Mountpoint2Ignore[1] = [ 0 ]<br />
Dim $b_IgnoreMountpoint = False<br />
Dim $i_ServiceType<br />
Dim $s_temp<br />
Dim $i<br />
Dim $s_spaces = ' ' ; 5 Spaces<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Some of the mountpoints are irritating, just ignore them - read items from a file<br />
If FileExists($s_Mointpoint2IgnoreFile) = 1 Then<br />
$h_Mountpoint2IgnoreFile = FileOpen($s_Mointpoint2IgnoreFile, 0)<br />
While 1<br />
$s_temp = FileReadLine($h_Mountpoint2IgnoreFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp) > 2 Then ; at least 3 or more chars<br />
$a_Mountpoint2Ignore[0] = $a_Mountpoint2Ignore[0] + 1<br />
ReDim $a_Mountpoint2Ignore[$a_Mountpoint2Ignore[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Mountpoint2Ignore[$a_Mountpoint2Ignore[0]] = $s_temp<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Get the WMI-Interface at local Computer (= .)<br />
$o_WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")<br />
; Test whether it worked and go on<br />
If IsObj($o_WMI) Then<br />
; Get List of all Autostart-Services<br />
$o_colListOfVolumes = $o_WMI.ExecQuery("SELECT * FROM Win32_Volume", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)<br />
; Ok, we have the List, now look if we were interrupted last Time<br />
; Start creating the JSON Output:<br />
$s_JSONOutput = '{"data":[' & '@CRLF'<br />
; Loop: Add the Services to JSON Output String Line for Line but nor more than 4000 Chars<br />
For $objMountpoint In $o_colListOfVolumes<br />
$b_IgnoreMountpoint = False<br />
; Do nothing until we found the Service of last Run<br />
; Will start after the first Part found the Service of last Time or will run from beginning if there was no last time<br />
; Test 1: But first check if the service is one of the bad one we wanna ignore<br />
If $a_Mountpoint2Ignore[0] > 0 Then<br />
For $i = 1 To $a_Mountpoint2Ignore[0]<br />
;ConsoleWrite($objMountpoint.DisplayName & "<--->" & $a_Mountpoint2Ignore[$i] & @CRLF)<br />
If StringInStr($objMountpoint.DeviceID, $a_Mountpoint2Ignore[$i]) > 0 Then<br />
$b_IgnoreMountpoint = True<br />
EndIf<br />
If StringInStr($objMountpoint.Name, $a_Mountpoint2Ignore[$i]) > 0 Then<br />
$b_IgnoreMountpoint = True<br />
EndIf<br />
Next<br />
EndIf<br />
; Skip all normal Mountpoints with Driveletters like C:\ or D:\<br />
If StringRight($objMountpoint.Name, 2) = ":\" Then<br />
$b_IgnoreMountpoint = True<br />
EndIf<br />
; Ignore SnapShots!<br />
If StringLeft($objMountpoint.Name, 4) = "\\?\" Then<br />
$b_IgnoreMountpoint = True<br />
EndIf<br />
; Ok, all Tests processed, now add the service to list (if we don't wanna ignore this service)<br />
If $b_IgnoreMountpoint = False Then<br />
$s_JSONOutput = $s_JSONOutput & _<br />
$s_spaces & '{' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#ZNILFSTYPE}":"' & $objMountpoint.FileSystem & '",' & '@CRLF' & _<br />
$s_spaces & $s_spaces & '"{#ZNILFSNAME}":"' & StringReplace(StringTrimRight($objMountpoint.Name, 1),"\", "/") & '"' & '@CRLF' & _<br />
$s_spaces & '},' & '@CRLF'<br />
EndIf<br />
Next<br />
; Delete the last -> , <-<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen(',' & '@CRLF'))<br />
$s_JSONOutput = $s_JSONOutput & ']}'<br />
; SpecialChars replace<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF, 0, 1)<br />
If StringLen($s_JSONOutput) < 11 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Else<br />
ConsoleWrite(_ANSI2OEM($s_JSONOutput))<br />
EndIf<br />
EndIf<br />
Exit 0<br />
</source><br />
<br><br />
<br><br />
----<br />
<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Local_Administrators&diff=9526Zabbix:Template Windows Local Administrators2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 14.04.2015: Erste Version, Version der '''LocalAdministrators.exe''' ist 1.0.0.2<br />
<br><br />
<big>Download: '''[[Media:Zabbix-LocalAdministrators.zip|Zabbix-LocalAdministrators.zip]]'''</big><br><br />
----<br />
==Vorwort==<br />
Dieses Template überwacht die Gruppe der lokalen Administratoren. Werden neue Mitglieder hinzugefügt oder entfernt so löst ein Trigger aus.<br><br />
* Sprachunabhängig - es ist egal ob die Gruppe "Administratoren" oder "Administrators" oder "Administrateurs" usw. heißt<br><br />
* Trigger löst aus wenn sich innerhalb der Gruppe etwas ändert<br />
* In der Item-History kann die Änderung nach verfolgt werden<br />
<br><br />
<br><br />
----<br />
==Installation==<br />
* Kopiert die <code>LocalAdministrators.exe</code> in das Verzeichnis mit eurem Zabbix-Agenten<br><br />
* Bearbeitet die <code>zabbix_agentd.win.conf</code> und ergänzt folgende Zeilen<br><br />
UserParameter=znil.LocalAdministrators,"C:\Program Files\Zabbix\UserParameter\LocalAdministrators.exe"<br />
:Den Pfad müsst Ihr natürlich anpassen<br />
<br><br />
* Startet den Dienst des Zabbix-Agenten einmal neu!<br />
* Importiert in Zabbix das Template <code>znil_Template_Windows_Local_Administrators.xml</code><br />
* Verknüpft das Template mit eurem Host<br />
<br><br />
Und jetzt warten (Zabbix Agent einmal neu starten beschleunigt das ganze), der Intervall steht auf alle 6 Stunden.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Lizenzstatus&diff=9525Zabbix:Template Windows Lizenzstatus2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
Das Template mit der UserParameter Erweiterung kann / enthältfolgendes:<br><br />
* Auf einem englischen oder deutschen Windows ab Windows 7 den Lizenz-Status abfragen.<br />
* Es gibt jeweils einen Trigger dafür der dann gezielt auslöst (es sind 2 Trigger aber je nach Sprache löst nur einer aus)<br />
<br><br />
<br><br />
----<br />
Download: <big>'''[[Media:TemplateWindowsLizenzStatus-deutsch.zip|TemplateWindowsLizenzStatus-deutsch.zip]]'''</big><br><br />
----<br />
<br><br />
<u>'''Zur Installation müsst Ihr folgendes tun:'''</u><br><br />
* Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeilen<br />
UserParameter=znil.LicenseStatus,cscript.exe //Nologo %WINDIR%\system32\slmgr.vbs /dli | find "License Status:"<br />
UserParameter=znil.LizenzStatus,cscript.exe //Nologo %WINDIR%\system32\slmgr.vbs /dli | find "Lizenzstatus:"<br />
ein - Pfad natürlich ggf. anpassen<br><br />
* Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
*Import die <code>.XML</code> Datei aus dem '''.zip''' Archib in Zabbix und verknüpft diese mit dem Host.<br />
* Warten! Alle 60 Minuten wird nun der Lizenzierungstatus von Windows abgerufen<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 15:10, 22. Mär. 2014 (CET)<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Eventlog_mit_Filter&diff=9524Zabbix:Template Windows Eventlog mit Filter2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
{{Warnung| ACHTUNG! An sich funktioniert die Überwachung und das Filtern mit dieser UserParameter-Erweiterung sehr gut. ABER ... seit euch bewußt das Ihr damit ggf. die Büchse der Pandora öffnet ... Bei einem Kunden auf 10 von 300 Servern aktiviert ... und es kommen in einer Tour Meldungen. Da sind gezielte Suchen mit dem in Zabbix eingebauten Funktionen manchmal hilfreicher. Allerdings gibt es bei diversen Anwendungen das Problem das man ggf. noch gar nicht weis wonach man suchen soll.}}<br><br />
<u>'''Changelog:'''</u><br><br />
* 15.03.2015 erste öffentliche Version, Version der Zabbix_Eventlog.exe ist 1.0.0.74<br />
* 26.03.2015 In den Texten von Insertion und Message werden nun alle " durch ' ersetzt. Insertion wurde auf die ersten 128 Zeichen begrenzt<br />
<br><br />
<br><br />
----<br />
==Vorwort==<br />
Ich habe ja bereits eine Anleitung für das Monitoring von Eventlogs veröffentlicht: [[Zabbix:Template Windows Eventlog]]<br><br />
Das funktioniert auch wirklich ganz wunderbar ... allerdings mit dem Problem das man auch wirklich jede Warnung und jeden Fehler gemeldet bekommt.<br><br />
<br><br />
Jetzt habe ich bei einem Kunden z.B. auf einem Server eine Software für die Telefonanlage die alle 3 Minuten über eine fehlende Lizenz meckert ... und somit auch alle 3 Minuten eine Meldung erezugt.<br><br />
Der Fehler ist bekannt und könnte ignoriert werden ... aber leider kennt Zabbix keine Filter hierfür.<br><br />
Als Lösung gäbe es (mit Bordmitteln) zwei Möglichkeiten:<br><br />
* Statt allgemein alle Warnungen und Fehler abzufragen überwachen wir gezielt bestimmte Events. Dann würden wir aber auch neue und bisher unbekannte Meldungen nicht bekommen<br />
* In dem Triggern könnte man die zusätzliche Prüfung durchaus einbauen ... aber dann muss man jedesmal den Filter anpassen ... und wenn wir bei der 10 Bedingung sind die ausgefiltert werden soll haben wir ein schönes und unübersichtlichen Zeilenmonster<br />
<br><br />
Ich habe mich deshalb dafür entschieden das Eventlog-System von Zabbix NICHT zu verwenden und statt dessen ein eigenes System als Erweiterung für den Zabbix-Agenten geschrieben (per UserParameter)<br><br />
<br><br />
<br><br />
----<br />
==Features==<br />
Meine <code>Zabbix_Eventlog.exe</code> in Zusammenarbeit mit dem Template kann folgendes:<br><br />
* Autodiscover (LLD) aller vorhandenen Eventlogs! Gefunden werden alle Haupt-Eventlogs wie '''''System, Anwendung und Sicherheit''''', aber auch '''''Hardware-Ereignisse, DNS-Server, Verzeichnisdienst''''' und so weiter. Also alle Eventlogs unterhalb von "'''''Windows-Protokolle'''''" und "'''''Anwendungs- und Dienstprotokolle'''''"<br><br />
* Pro Eventlog werden die folgenden Daten erfasst<br />
** Aktuelle Größe in Bytes<br />
** Maximale erlaubte Größe in Bytes<br />
** Anzahl Einträge<br />
** Status (OK oder FAILED)<br />
** Anzahl der Einträge insgesamt<br />
** Anzahl neuer Einträge in den letzten xxx Sekunden (konfigurierbar per Makro, Standard sind 600 Sekunden / 10 Minuten)<br />
** Anzahl ausgefilterter Einträge in den letzten xxx Sekunden <br />
** Anzahl von Warnungen (WARNING) in den letzten xxx Sekunden<br />
** Anzahl von Fehlern (ERROR) in den letzten xxx Sekunden<br />
** Alle '''NICHT(!)''' ausgefilterten Eventlogeinträge mit Text, getrennt nach Warnung und Fehlern<br />
:[[Datei:ZabbixEventlog-with-Filter-003.png]]<br><br />
* Filterung von Eventlog-Einträgen über lokale Textdatei <code>Zabbix_Eventlog-Filter.txt</code> die im gleichen Ordner wie die <code>Zabbix_Eventlog.exe</code> liegen muss(!)<br />
* Filterung von Eventlog-Einträgen über zentrale Textdatei im Netzwerk. Die Datei muss auf einer Windows-Freigabe liegen auf die anonym zugegriffen werden kann (Zabbix Agent läuft als Benutzer '''SYSTEM''')<br />
* Frei wählbare Zeitdauer zwischen den Abfragen (Mindestens 60 Sekunden, Maximal keine Begrenzung)<br />
* Nur ein Item ist vom Typ "Agent (active)", alle anderen sind vom Typ "Zabbix Trapper". Dieses Item dient dazu die Abfrage zu starten<br />
* Alle anderem Item werden per Zabbix-Sender befüllt<br />
* Pfad zu <code>zabbix_sender.exe</code> sowie zur Konfigurationsdatei des Agenten werden aus der Registry ermittelt (Dienst mit <code>zabbix_agentd.exe</code> wird gesucht und die dort angegebene Konfigurationsdatei genommen<br />
<br><br />
<br><br />
----<br />
<br />
==Download==<br />
Aktuelle Version der '''''Zabbix_Eventlog.exe'''' ist 1.0.0.79<br><br />
<big>'''Download-Link: [[Media:Zabbix-Eventlog.zip|Zabbix-Eventlog.zip]]'''</big><br><br />
<br><br />
Das Archiv enthält folgende Dateien:<br><br />
* <code>Anleitung.txt</code> = Kurzanleitung<br><br />
* <code>UserParameter.txt</code> = Beispieleintrag für UserParameter in <code>zabbix_agentd.win.conf</code><br><br />
* <code>Zabbix_Eventlog.au3</code> = Quellcode der .exe im AutoIt Format<br><br />
* <code>Zabbix_Eventlog.exe</code> = Das eigentliche Programm<br />
* <code>Zabbix_Eventlog-Filter.txt</code> = Beispiel-Filterdatei<br />
* <code>znil Template Windows Eventlog with Filter V2015-03-06.xml</code> = Das Template zum Importieren, erscheint in der Gruppe '''''Templates DATAGROUP'''''<br><br />
<br><br />
<br><br />
----<br />
==Installation==<br />
* Kopiert die <code>Zabbix_Eventlog.exe</code> und die <code>Zabbix_Eventlog-Filter.txt</code> in das Verzeichnis mit eurem Zabbix-Agenten<br><br />
* Bearbeitet die <code>zabbix_agentd.win.conf</code> und ergänzt folgende Zeilen<br><br />
UserParameter=znil.ZabbixEventlog[*],"C:\Program Files\Zabbix\UserParameter\Zabbix_Eventlog.exe" "$1" "$2" "$3" "$4"<br />
* Startet den Dienst des Zabbix-Agenten einmal neu!<br />
:Den Pfad müsst Ihr natürlich anpassen<br />
* Importiert in Zabbix das Template <code>znil Template Windows Eventlog with Filter V2015-03-06.xml</code><br />
* Passt im Template die beiden Makros an:<br><br />
:<code>{$EVENTLOG_FILTERFILE}</code> = Pfad zu einer zusätzlichen Filterdatei im Netzwerk, z.B. <code>\\192.168.42.15\EventlogFilter\Zabbix_Eventlog-Filter.txt</code><br />
:<code>{$EVENTLOG_PERIOD}</code> = Abfrageintervall in Sekunden, Vorgabe ist alle 10 Minuten<br />
::[[Datei:ZabbixEventlog-with-Filter-001.png]]<br><br />
* Wenn Ihr den Abfrageintervall ändert müsst Ihr auch unbedingt den '''''Item prototype''''' mit dem Namen '''''Eventlog {#EVENTLOGNAME}: Helper Query Events''''' anpassen - Makros sind bei den Abfragezeiten leider nicht erlaubt!<br />
* Verknüpft das Template mit eurem Host<br />
<br><br />
<br><br />
----<br />
==Wie die Abfrage erfolgt / manuelle Abfragen==<br />
Alle 3.600 Sekunden = einmal die Stunde werden über den Discovery-Teil des Templates alle vorhandenen Eventlogs erkannt und die Items und Trigger dazu gebaut. Dabei werden nur Eventlogs berücksichtigt die über mindestens einen Eintrag verfügen. Leere Eventlogs wie z.B. "Internet Explorer" werden ignoriert.<br><br />
Dies geschieht über den folgenden Aufruf der <code>Zabbix_Eventlog.exe</code>:<br><br />
Zabbix_Eventlog.exe discovereventlogs<br />
welcher auch manuell ausgeführt werden kann (aber erst das Template dem Host zuweisen). Die Daten werden per <code>zabbix_sender.exe</code> zum Server gesendet, bei Erfolg gibt es als Rückgabe nur eine <code>0</code><br><br />
Im gleichen Verzeichnis gibt es nun eine <code>Zabbix_Eventlog-LLD-Eventlogs.txt</code> mit dem JSON-Text der LLD-Erkennung:<br><br />
- znil.ZabbixEventlog[discovereventlogs] {"data":[{"{#EVENTLOGNAME}":"Active Directory Web Services","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"Application","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"DFS Replication","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"Directory Service","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"DNS Server","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"MSExchange Management","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"Security","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"System","{#EVENTLOGDUMMY}":"---"},{"{#EVENTLOGNAME}":"Windows PowerShell","{#EVENTLOGDUMMY}":"---"}]}<br />
Das ganze muss in einer Zeile sein sonst kann die <code>zabbix_sender.exe</code> ex nicht senden<br><br />
<br><br />
Für jedes Eventlog wird nun unter anderem ein Item gebaut welches als im gewählten Zeitraum die Abfrage anstartet:<br><br />
[[Datei:ZabbixEventlog-with-Filter-002.png]]<br><br />
Die <code>Zabbix_Eventlog.exe</code> wird dabei mit folgenden Parametern gestartet:<br><br />
Zabbix_Eventlog.exe Name_des_Eventlogs Abfragezeitraum Pfad_zur_Filterdatei<br />
Die weiteren Paramter sind dabei optional. Man kann das also auch per Hand machen:<br><br />
Die letzten 10 Minuten vom Eventlog System abfragen:<br><br />
Zabbix_Eventlog.exe SYSTEM<br />
Die letzte Stunde vom Eventlog System abfragen<br><br />
Zabbix_Eventlog.exe SYSTEM 3600<br />
Die letzten 10 Minuten vom Eventlog System abfragen und die Ergebnisse mit zusätzlicher Filter-Datei filtern:<br><br />
Zabbix_Eventlog.exe SYSTEM 600 "\\192.168.42.15\EventlogFilter\Zabbix_Eventlog-Filter.txt"<br />
Als Ergebnis kommt die Anzahl der gefundenen Warnung und Fehler zurück die an den Zabbix-Server gesendet wurden (per <code>zabbix_sender.exe</code>)<br><br />
<br><br />
Zum Testen könnt Ihr z.B. mit<br><br />
eventcreate /L SYSTEM /T ERROR /SO ZabbixTest /ID 999 /D "Testnachricht!"<br />
in einer DOS-Box einen Testfehler erstellen.<br><br />
Direkt danach ein<br />
Zabbix_Eventlog.exe SYSTEM<br />
und in Zabbix müsste es eine Meldung geben.<br><br />
Wenn Ihr <br />
Zabbix_Eventlog.exe<br />
ohne Parameter eingebt wird eine Hilfe ausgegeben!<br><br />
<br><br />
Wird in dem Zeitraum kein Fehler oder Warnung gefunden, so wird die Zeichenfolge<br />
-=ZABBIX-EVENTLOG=- No Events for 600 Seconds<br />
an den Server gesendet. Die Trigger im Template prüfen auf die Zeichenfolge "-=ZABBIX-EVENTLOG=-" und lösen Alarm aus wenn diese nicht enthalten ist.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Aufbau der Filterdatei==<br />
Die Filterdatei sollte wie folgt aussehen:<br><br />
01: Create one Line for every Eventlog-Entry to filter.<br />
02: Examples:<br />
03: ---------<br />
04: Filter all Eventlog-Entries with the EventID 999 (Excat match!)<br />
05: EventID:999<br />
06: Filter all Eventlog-Entries with the Text "TESTAPP" at SOURCE (String in String Compare, case insensitive!)<br />
07: Source:TESTAPP<br />
08: Filter all Eventlog-Entries with the Text "Channel restart failed" at Message (String in String Compare, case insensitive!)<br />
09: Message:Channel restart failed<br />
10: Filter all Eventlog-Entries with the Text "{0006F03A-0000-0000-C000-000000000046}" at Insertion (String in String Compare, case insensitive!)<br />
11: Insertion:{0006F03A-0000-0000-C000-000000000046}<br />
12: DO NOT REMOVE THE FIRST 13 LINES! - The first 13 Lines will be ignored by Zabbix_Eventlog.exe (Hardcoded!) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />
13: ################################################################################################################################################<br />
# Fehlermeldung vom Exchange für Mobilgeräte wegen Timeout<br />
Message:Der Durchschnitt der aktuellen Taktintervalle<br />
Wie es dort steht: die ersten 13 Zeilen werden ignoriert!!!!!!!!<br><br />
Danach sind auch Kommentare erlaubt, beim Einlesen der Datei wird am Zeilenanfang nach dem Schlüsselwörtern<br><br />
EventID:<br />
Source:<br />
Message:<br />
Insertion:<br />
gesucht! Wenn dies nicht am Anfang einer Zeile steht so wird diese ignoriert!<br><br />
Bei <code>EventID:</code> wird nach genauer Übereinstimmung der Nummer gesucht.<br><br />
Alle anderen Tests sind "Zeichenfolge in Zeichenfolge" Überprüfungen. Würde man also<br />
Message:a<br />
setzen (nur der Buchstabe <code>a</code>) würden alle Meldungen die ein '''''a''''' im Text enthalten ignoriert werden. Nehmt also eindeutige Textpassagen!!!<br />
<br><br />
<br><br />
----<br />
==Aussehen der Text-Meldungen==<br />
{{Hinweis| Wenn Ihr euch von Zabbix bei der Auslösung von Triggern eine Email senden lasst so sorgt dafür das "{ITEM.VALUE1}" in der "Default message" steht - dann steht der gesamte Text auch in der Email!}}<br><br />
Da ich das Eventlog-Format von Zabbix nicht nutzen konnte (Key "Eventlog" ist bei LLD-Items nicht erlaubt) kommt der gesamte Inhalt einer Meldung in einem Text-Stück.<br><br />
Am Ende jeder Nachricht kommt immer die Gesamtzahl von Nachrichten im Zeitraum der Abfrage. Wenn da was von "No. 1 of 22" steht gibt es also ggf. 21 weitere Einträge über die Ihr keine Email bekommt.<br><br />
Diese sind jedoch alle in der History des Items zu sehen.<br><br />
<br><br />
===Beispiel 1===<br />
EventType : ERROR<br />
EventID : 999 <br />
Source : ZabbixTest <br />
UTC Time : 15.03.2015 20:48:25 <br />
Insertion : Testnachricht! <br />
Message : <br />
-----------<br />
Testnachricht! <br />
<br />
<br />
---------------------------------------------------------------------------------------------------<br />
This is Entry No. 1 of 1 Total Entries in the last 900 Seconds Check the Logs for additional Entries!!!!<br />
<br><br />
<br><br />
===Beispiel 2===<br />
EventType : ERROR<br />
EventID : 4005 <br />
Source : Microsoft-Windows-Winlogon <br />
UTC Time : 15.03.2015 18:15:03 <br />
Insertion : <br />
Message : <br />
----------- <br />
Der Windows-Anmeldeprozess wurde unerwartet beendet.<br />
<br />
<br />
---------------------------------------------------------------------------------------------------<br />
This is Entry No. 1 of 2 Total Entries in the last 900 Seconds Check the Logs for additional Entries!!!!<br />
<br><br />
<br><br />
===Beispiel 3===<br />
EventType : WARNING<br />
EventID : 1035<br />
Source : MSExchangeTransport<br />
UTC Time : 15.03.2015 20:16:27<br />
Insertion : LogonDenied, Default EXCHANGE, Ntlm<br />
Message : <br />
-----------<br />
Fehler LogonDenied bei der eingehenden Authentifizierung f?r den Empfangsconnector Default EXCHANGE.<br />
Der Authentifizierungsmechanismus ist Ntlm.<br />
Die Quell-IP-Adresse des Clients, der die Authentifizierung bei Microsoft Exchange versucht hat, ist [83.111.106.13].<br />
<br />
<br />
---------------------------------------------------------------------------------------------------<br />
This is Entry No. 1 of 1 Total Entries in the last 900 Seconds Check the Logs for additional Entries!!!!<br />
<br><br />
<br><br />
----<br />
<br />
==Bekannte "Fehler" und Beschränkungen==<br />
* Wenn es innerhalb von 10 Minuten zum Beispiel 3 Fehler und 4 Warnungen gibt, wird ggf. nur jeweils 1 Trigger ausgelöst. Mann muss also prüfen ob es ggf. noch mehr Einträge gibt<br />
* Die Eventlog-Einträge kommen nicht im Eventlog-Format bei Zabbix an sondern im Text-Format. Der Text enthält die gesamten Informationen des Eventlog-Eintrages. Das Eventlog-Format von zabbix konnte nicht genommen werden da per LLD keine Items mit dem Typ "Eventlog[]" erstellt werden dürfen.<br />
* Da nur Eventlogs mit mindestens einem Eintrag erkannt werden kann es sein das ein Eventlog nach dem vollständigen Löschen aller Einträge zunächst wieder deaktiviert und nach 30 Tagen wieder gelöscht wird aus Zabbix<br />
* Wenn mehrere Zabbix-Agenten-Dienste parallel installiert sind, funktioniert dieses Template nur mit dem ersten Dienst (alphabetische Reihenfolge)<br />
* Umlaute werden durch Sonderzeichen ersetzt ... einfachen Umwandeln half bisher nicht ...<br />
<br><br />
<br><br />
----<br />
==Quellcode==<br />
<source lang="AutoIt"><br />
<br />
#NoTrayIcon<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_UseX64=n<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Eventlog Monitor with Filter http://znil.net<br />
#AutoIt3Wrapper_Res_Fileversion=1.0.0.80<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2015 Bernhard Linz<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_Zabbix_Eventlog<br />
#AutoIt3Wrapper_Res_Field=See You|znil.net<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
Opt('MustDeclareVars', 1)<br />
#Region ;************ Includes ************<br />
#Include <Array.au3><br />
#include <Constants.au3><br />
#include <Date.au3><br />
#include <EventLog.au3><br />
#Include <WinAPIEx.au3><br />
#EndRegion ;************ Includes ************<br />
<br />
; #########################################################################################<br />
; ## ## ### ######## #### ### ######## ## ######## ######<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ######## ## ## ## ######## ## ###### ######<br />
; ## ## ######### ## ## ## ######### ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ### ## ## ## ## #### ## ## ######## ######## ######## ######<br />
; #########################################################################################<br />
<br />
Global $oMyError<br />
Global $objWMIService<br />
<br />
$oMyError = ObjEvent("AutoIt.Error", "oMyError") ; Install a custom error handler<br />
$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\localhost\root\cimv2")<br />
<br />
Global $sHELP = "Zabbix_Eventlog.exe [OPTION] [Period] [Blacklist-File]" & @CRLF & _<br />
@CRLF & _<br />
"Possible Values for OPTIONS:" & @CRLF & _<br />
"----------------------------" & @CRLF & _<br />
"discovereventlogs : Create JSON String for detected Eventlogs" & @CRLF & _<br />
" Output Text to Console and send JSON direct to" & @CRLF & _<br />
" Zabbix Server (using Configuration of Zabbix Service" & @CRLF & _<br />
" ZBX_NOTSUPPORTED if there any errors" & @CRLF & _<br />
'[Name of Eventlog] : For Example "Application" or "System"' & @CRLF & _<br />
@CRLF & _<br />
"Other optional Parameters:" & @CRLF & _<br />
"--------------------------" & @CRLF & _<br />
"Period : How many Seconds go back in Eventlog from now." & @CRLF & _<br />
" Default: 600 Seconds, min. Value 60 Seconds" & @CRLF & _<br />
@CRLF & _<br />
"Blacklist-File : Additional Textfile with Blacklistet Eventlog Entries" & @CRLF & _<br />
" The first 13 Lines of File will be ignored!" & @CRLF & _<br />
' Take a look at Example File "Zabbix_Eventlog-Filter.txt"' & @CRLF & _<br />
" This File will used in addition to the local" & @CRLF & _<br />
' "Zabbix_Eventlog-Filter.txt" File in the same Directory as the' & @CRLF & _<br />
' "Zabbix_Eventlog.exe"' & _<br />
@CRLF & _<br />
'First 13 Lines of a "Zabbix_Eventlog-Filter.txt":' & @CRLF & _<br />
"-------------------------------------------------" & @CRLF & _<br />
'01: Create one Line for every Eventlog-Entry to filter.' & @CRLF & _<br />
'02: Examples:' & @CRLF & _<br />
'03: ---------' & @CRLF & _<br />
'04: Filter all Eventlog-Entries with the EventID 999 (Excat match!)' & @CRLF & _<br />
'05: EventID:999' & @CRLF & _<br />
'06: Filter all Eventlog-Entries with the Text "TESTAPP" at SOURCE (String in String Compare, case insensitive!)' & @CRLF & _<br />
'07: Source:TESTAPP' & @CRLF & _<br />
'08: Filter all Eventlog-Entries with the Text "Channel restart failed" at Message (String in String Compare, case insensitive!)' & @CRLF & _<br />
'09: Message:Channel restart failed' & @CRLF & _<br />
'10: Filter all Eventlog-Entries with the Text "{0006F03A-0000-0000-C000-000000000046}" at Insertion (String in String Compare, case insensitive!)' & @CRLF & _<br />
'11: Insertion:{0006F03A-0000-0000-C000-000000000046}' & @CRLF & _<br />
'12: DO NOT REMOVE THE FIRST 13 LINES! - The first 13 Lines will be ignored by Zabbix_Eventlog.exe (Hardcoded!) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' & @CRLF & _<br />
'13: ################################################################################################################################################' & @CRLF & _<br />
@CRLF<br />
<br />
<br />
<br />
<br />
<br />
;ConsoleWrite(_GetEventsWMI($CmdLine[1]))<br />
<br />
Global $sZabbix_agentd_exe<br />
Global $sZabbix_agentd_conf<br />
Global $sZabbix_sender_exe<br />
Global $sZabbix_Hostname<br />
Global $sZabbix_Server<br />
Global $iZabbix_Server_Port<br />
<br />
Global $aEventlogs[1][9] ; [0][0] = Anzahl<br />
; [x][1] = Name des Eventlogs (LogfileName)<br />
; [x][2] = Maximale Größe (MaxFileSize)<br />
; [x][3] = Aktuelle Größe (FileSize)<br />
; [x][4] = Anzahl der Einträge (NumberOfRecords)<br />
; [x][5] = Status (Status)<br />
; [x][6] = Pfad zum DisplayNameFile<br />
; [x][7] = DisplayNameID<br />
; [x][8] = DisplayName<br />
$aEventlogs[0][1] = "LogfileName"<br />
$aEventlogs[0][2] = "MaxFileSize"<br />
$aEventlogs[0][3] = "FileSize"<br />
$aEventlogs[0][4] = "NumberOfRecords"<br />
$aEventlogs[0][5] = "Status"<br />
$aEventlogs[0][6] = "DisplayNameFile"<br />
$aEventlogs[0][7] = "DisplayNameID"<br />
$aEventlogs[0][8] = "DisplayName"<br />
<br />
; Für unbekannte Eventlogs. Name steht dafür in verschiedenen DLL-Dateien, hat sich als zu umständlich erwiesen diesen daraus aus zu lesen<br />
Global $aDisplayNamesOfEventlogs[3][2] ; [0][x] = LogFileName<br />
; [1][x] = DisplayName<br />
$aDisplayNamesOfEventlogs[0][0] = "HardwareEvents"<br />
$aDisplayNamesOfEventlogs[0][1] = "Hardware Events"<br />
$aDisplayNamesOfEventlogs[1][0] = "ODiag"<br />
$aDisplayNamesOfEventlogs[1][1] = "Microsoft Office Diagnostics"<br />
$aDisplayNamesOfEventlogs[2][0] = "OSession"<br />
$aDisplayNamesOfEventlogs[2][1] = "Microsoft Office Sessions"<br />
<br />
Global $aMessage[1][8] ; [0][0] = Anzahl<br />
; [x][1] = EventID<br />
; [x][2] = Time-String<br />
; [x][3] = Source<br />
; [x][4] = Insertion<br />
; [x][5] = Message<br />
; [x][6] = EventType (1 = Error, 2 = Warning, 3 = Information, 4 = Security Audit Success, 5 = Security Audit Failure)$aMessage[0][0] = 0<br />
$aMessage[0][1] = "EventID"<br />
$aMessage[0][2] = "Time"<br />
$aMessage[0][3] = "Source"<br />
$aMessage[0][4] = "Insertion"<br />
$aMessage[0][5] = "Message"<br />
$aMessage[0][6] = "EventType"<br />
<br />
Global $iStartTime<br />
Global $iRunTime<br />
<br />
Global $b_QueryEventlog<br />
Global $i_Period = 600<br />
<br />
Global $s_JSONOutput<br />
Global $colItems = ""<br />
<br />
Global $aFilterList_EventID[1]<br />
Global $aFilterList_Source[1]<br />
Global $aFilterList_Message[1]<br />
Global $aFilterList_Insertion[1]<br />
$aFilterList_EventID[0] = 0<br />
$aFilterList_Source[0] = 0<br />
$aFilterList_Message[0] = 0<br />
$aFilterList_Insertion[0] = 0<br />
Global $bFilterEntry<br />
<br />
Global $sLokalFilterFile = @ScriptDir & "\Zabbix_Eventlog-Filter.txt"<br />
Global $sRemoteFilterFile<br />
<br />
Global $iEventCounter = 0<br />
Global $iERROR_Counter = 0<br />
Global $iWARNING_Counter = 0<br />
Global $iFiltered_Counter = 0<br />
<br />
Global $bError_was_send = False<br />
Global $bWarning_was_send = False<br />
<br />
<br />
Dim $stemp<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; ################################################################################################################################################################<br />
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ################################################################################################################################################################<br />
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ################################################################################################################################################################<br />
; ## ## ## #### ## ## ## ## ## ## #### ## ## ################################################################################################################################################################<br />
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ################################################################################################################################################################<br />
; ## ## ## ## #### ## ## ## ## ## ## #### ## ################################################################################################################################################################<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ################################################################################################################################################################<br />
; ## ####### ## ## ###### ## #### ####### ## ## ###### ################################################################################################################################################################<br />
; ################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
<br />
; ###################################################################################<br />
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird<br />
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt<br />
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins<br />
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
EndFunc ;==>_ANSI2OEM<br />
; #######################################################################################################################################################<br />
; ######## ######## ### ######## #### ## ## ######## #### ## ######## ######## ######## ######## #### ## ########<br />
; ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ######## ###### ## ## ## ## ## ## ## ## ###### ## ## ## ###### ######## ###### ## ## ######<br />
; ## ## ## ######### ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ##<br />
; ####### ## ## ######## ## ## ######## #### ## ## ## #### ######## ## ######## ## ## ## #### ######## ########<br />
; #######################################################################################################################################################<br />
Func _ReadInFilterFile($s_FilterFile)<br />
Local $atemp<br />
Local $sValue<br />
; Check if File exist<br />
If FileExists($s_FilterFile) = 0 Then<br />
Return<br />
EndIf<br />
$atemp = FileReadToArray($s_FilterFile)<br />
; Check Reading File<br />
If IsArray($atemp) = 0 Then<br />
Return<br />
EndIf<br />
; We Skip the first 13 Lines so the array must be greater than 13<br />
If UBound($atemp) < 14 Then<br />
Return<br />
EndIf<br />
; All Checks finished, Process the Filters<br />
;_ArrayDisplay($atemp)<br />
; $aFilterList_EventID[0] = 0<br />
; $aFilterList_Source[0] = 0<br />
; $aFilterList_Message[0] = 0<br />
; $aFilterList_Insertion[0] = 0<br />
;~ ConsoleWrite("Ubound($atemp): " & UBound($atemp) & @CRLF)<br />
For $j = 13 To (UBound($atemp) - 1)<br />
;~ ConsoleWrite("$j: " & $j & @CRLF)<br />
; EventID<br />
If StringLeft($atemp[$j], StringLen("EventID:")) = "EventID:" Then<br />
;~ ConsoleWrite("EventID!" & @CRLF)<br />
$sValue = Int(StringTrimLeft($atemp[$j], StringLen("EventID:")))<br />
If IsNumber($sValue) = 1 Then<br />
$aFilterList_EventID[0] = $aFilterList_EventID[0] + 1<br />
ReDim $aFilterList_EventID[ $aFilterList_EventID[0] + 1 ]<br />
$aFilterList_EventID[ $aFilterList_EventID[0] ] = $sValue<br />
EndIf<br />
EndIf<br />
If StringLeft($atemp[$j], StringLen("Source:")) = "Source:" Then<br />
;~ ConsoleWrite("Source!" & @CRLF)<br />
$sValue = StringTrimLeft($atemp[$j], StringLen("Source:"))<br />
If StringLen($sValue) > 0 Then<br />
$aFilterList_Source[0] = $aFilterList_Source[0] + 1<br />
ReDim $aFilterList_Source[ $aFilterList_Source[0] + 1 ]<br />
$aFilterList_Source[ $aFilterList_Source[0] ] = $sValue<br />
EndIf<br />
EndIf<br />
If StringLeft($atemp[$j], StringLen("Message:")) = "Message:" Then<br />
;~ ConsoleWrite("Message!" & @CRLF)<br />
$sValue = StringTrimLeft($atemp[$j], StringLen("Message:"))<br />
If StringLen($sValue) > 0 Then<br />
$aFilterList_Message[0] = $aFilterList_Message[0] + 1<br />
ReDim $aFilterList_Message[ $aFilterList_Message[0] + 1 ]<br />
$aFilterList_Message[ $aFilterList_Message[0] ] = $sValue<br />
EndIf<br />
EndIf<br />
If StringLeft($atemp[$j], StringLen("Insertion:")) = "Insertion:" Then<br />
;~ ConsoleWrite("Insertion!" & @CRLF)<br />
$sValue = StringTrimLeft($atemp[$j], StringLen("Insertion:"))<br />
If StringLen($sValue) > 0 Then<br />
$aFilterList_Insertion[0] = $aFilterList_Insertion[0] + 1<br />
ReDim $aFilterList_Insertion[ $aFilterList_Insertion[0] + 1 ]<br />
$aFilterList_Insertion[ $aFilterList_Insertion[0] ] = $sValue<br />
EndIf<br />
EndIf<br />
Next<br />
;~ _ArrayDisplay($aFilterList_EventID)<br />
;~ _ArrayDisplay($aFilterList_Source)<br />
;~ _ArrayDisplay($aFilterList_Message)<br />
;~ _ArrayDisplay($aFilterList_Insertion)<br />
EndFunc<br />
; ###########################################################################################################################################################<br />
; ###### ######## ######## ### ## ## ######## ## ## ######## ## ## ######## ## ####### ###### ######<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ##<br />
; ## #### ###### ## ## ## ## ## ###### ## ## ###### ## ## ## ## ## ## ## ## #### ######<br />
; ## ## ## ## ######### ## ## ## ## ## ## ## #### ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ##<br />
; ####### ###### ######## ## ## ## ######## ######## ######## ### ######## ## ## ## ######## ####### ###### ######<br />
; ###########################################################################################################################################################<br />
Func _GetAllEventlogs()<br />
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NTEventlogFile", "WQL", 0x10 + 0x20)<br />
If IsObj($colItems) then<br />
For $objItem In $colItems<br />
If $objItem.NumberOfRecords > 0 Then<br />
$aEventlogs[0][0] = $aEventlogs[0][0] + 1<br />
ReDim $aEventlogs[ $aEventlogs[0][0] + 1 ][9]<br />
$aEventlogs[ $aEventlogs[0][0] ][1] = $objItem.LogfileName<br />
$aEventlogs[ $aEventlogs[0][0] ][2] = $objItem.MaxFileSize<br />
$aEventlogs[ $aEventlogs[0][0] ][3] = $objItem.FileSize<br />
$aEventlogs[ $aEventlogs[0][0] ][4] = $objItem.NumberOfRecords<br />
$aEventlogs[ $aEventlogs[0][0] ][5] = $objItem.Status<br />
$aEventlogs[ $aEventlogs[0][0] ][6] = RegRead("HKLM\SYSTEM\CurrentControlSet\services\eventlog\" & $objItem.LogfileName, "DisplayNameFile")<br />
$aEventlogs[ $aEventlogs[0][0] ][7] = RegRead("HKLM\SYSTEM\CurrentControlSet\services\eventlog\" & $objItem.LogfileName, "DisplayNameID")<br />
EndIf<br />
Next<br />
EndIf<br />
EndFunc<br />
<br />
; ##################################################################################################################<br />
; ######## ### ######## ######## #### ## ## ###### ####### ## ## ########<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ##<br />
; ## ## ## ######## ######## ## ### ## ## ## ## ## ## ######<br />
; ## ######### ## ## ## ## ## ## ## ## ## ## ## #### ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ##<br />
; ####### ######## ## ## ######## ######## #### ## ## ####### ###### ####### ## ## ##<br />
; ##################################################################################################################<br />
Func _Zabbix_conf()<br />
Local $sRegTMP<br />
Local $iRegTMP = 0<br />
Local $iLoop<br />
Local $aRegTMP<br />
Local $aZabbix_config<br />
Local $sZabbix_config_file<br />
Local $a2temp<br />
While 1<br />
$iRegTMP = $iRegTMP + 1<br />
$sRegTMP = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services", $iRegTMP)<br />
If @error Then<br />
ExitLoop<br />
EndIf<br />
$sRegTMP = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\" & $sRegTMP, "ImagePath")<br />
If @error = 0 Then<br />
If StringInStr($sRegTMP, "zabbix_agentd.exe") > 0 Then<br />
;ConsoleWrite("Gefunden: " & $sRegTMP & @CRLF)<br />
$aRegTMP = StringSplit($sRegTMP, '"')<br />
;_ArrayDisplay($aRegTMP)<br />
$sZabbix_agentd_exe = $aRegTMP[2]<br />
$sZabbix_sender_exe = StringReplace($sZabbix_agentd_exe, "zabbix_agentd.exe", "zabbix_sender.exe")<br />
$sZabbix_config_file = $aRegTMP[4]<br />
$sZabbix_agentd_conf = $sZabbix_config_file<br />
$aZabbix_config = FileReadToArray($sZabbix_config_file)<br />
If @error = 0 Then<br />
For $iLoop = 0 To (UBound($aZabbix_config) -1)<br />
If StringLeft($aZabbix_config[$iLoop], StringLen("ServerActive=")) = "ServerActive=" Then<br />
$sZabbix_Server = StringReplace($aZabbix_config[$iLoop], "ServerActive=", "")<br />
$sZabbix_Server = StringReplace($sZabbix_Server, " ", "")<br />
$a2temp = StringSplit($sZabbix_Server, ":")<br />
If $a2temp[0] = 1 Then<br />
$iZabbix_Server_Port = 10051<br />
Else<br />
$sZabbix_Server = $a2temp[1]<br />
$iZabbix_Server_Port = $a2temp[2]<br />
EndIf<br />
EndIf<br />
If StringLeft($aZabbix_config[$iLoop], StringLen("Hostname=")) = "Hostname=" Then<br />
$sZabbix_Hostname = StringReplace($aZabbix_config[$iLoop], "Hostname=", "")<br />
$sZabbix_Hostname = StringReplace($sZabbix_Hostname, " ", "")<br />
EndIf<br />
Next<br />
Else<br />
ConsoleWrite("File not found: " & $sZabbix_config_file & @CRLF)<br />
Exit 1<br />
EndIf<br />
If FileExists($sZabbix_sender_exe) = 0 Then<br />
ConsoleWrite("zabbix_sender.exe not found at: " & $sZabbix_sender_exe & @CRLF)<br />
Exit 1<br />
EndIf<br />
EndIf<br />
EndIf<br />
WEnd<br />
;~ ConsoleWrite("zabbix_agentd.exe: " & '"' & $sZabbix_agentd_exe & '"' & @CRLF)<br />
;~ ConsoleWrite("zabbix_sender.exe: " & '"' & $sZabbix_sender_exe & '"' & @CRLF)<br />
;~ ConsoleWrite("Hostname used in Zabbix: " & '"' & $sZabbix_Hostname & '"' & @CRLF)<br />
;~ ConsoleWrite("IP(:Port) Zabbix Server: " & '"' & $sZabbix_Server & '"' & @CRLF)<br />
EndFunc<br />
<br />
; #############################################################################################################################################################################################################################################################<br />
; ###### ######## ## ## ######## ######## #### ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ########<br />
; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ##<br />
; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ##<br />
; ###### ###### ## ## ## ## ## ###### ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ########<br />
; ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ##<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ##<br />
; ####### ###### ######## ## ## ######## ## #### ######## ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ##<br />
; #############################################################################################################################################################################################################################################################<br />
Func _SendFile_with_Zabbix_Sender($sFileForZabbixSender)<br />
FileDelete($sFileForZabbixSender)<br />
FileWriteLine($sFileForZabbixSender, $s_JSONOutput)<br />
;~ ConsoleWrite(@CRLF)<br />
;~ ConsoleWrite("Complete JSON-String for sending:" & "---------------------------------" & @CRLF)<br />
;~ ConsoleWrite($s_JSONOutput & @CRLF & @CRLF)<br />
;~ ConsoleWrite("Using Zabbix_Sender.exe : " & $sZabbix_sender_exe & @CRLF)<br />
;~ ConsoleWrite("Using Zabbix_Agentd.conf File : " & $sZabbix_agentd_conf & @CRLF)<br />
;~ ConsoleWrite("Using Temp-Directory : " & @TempDir & @CRLF)<br />
;~ ConsoleWrite("File to Send : : " & $sFileForZabbixSender & @CRLF)<br />
;~ ConsoleWrite("Hostname in Zabbix : " & $sZabbix_Hostname & @CRLF)<br />
;~ ConsoleWrite("Zabbix Server : " & $sZabbix_Server & @CRLF)<br />
;~ ConsoleWrite("Zabbix Server Port : " & $iZabbix_Server_Port & @CRLF)<br />
;~ ConsoleWrite("Complete Run-Command : " & '"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"' & @CRLF)<br />
;~ ConsoleWrite("Output from Zabbix_Sender.exe : " & @CRLF)<br />
;~ ConsoleWrite("-------------------------------" & @CRLF)<br />
;~ RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"', "", @SW_HIDE)<br />
RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -i " & '"' & $sFileForZabbixSender & '"', "", @SW_HIDE, $RUN_CREATE_NEW_CONSOLE)<br />
;Sleep(1000)<br />
;~ ConsoleWrite(@CRLF)<br />
EndFunc<br />
<br />
; #############################################################################################################################################################################################################################################################################<br />
; ###### ######## ## ## ######## ## ## ### ## ## ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ########<br />
; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ##<br />
; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ##<br />
; ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ########<br />
; ## ## ## #### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ##<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ##<br />
; ####### ###### ######## ## ## ######## ### ## ## ######## ####### ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ##<br />
; #############################################################################################################################################################################################################################################################################<br />
<br />
Func _SendValue_with_Zabbix_Sender($sItemName, $sItemValue)<br />
;ConsoleWrite('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & @CRLF)<br />
;RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE)<br />
RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE, $RUN_CREATE_NEW_CONSOLE)<br />
EndFunc<br />
<br />
; ##################################################################################################################<br />
; ###### ######## ## ## ######## ######## ## ## ## ## ######## #### ## ## ########<br />
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ### ### ##<br />
; ## ## #### ## ## ## ## ## ## ## #### ## ## ## #### #### ##<br />
; ###### ###### ## ## ## ## ## ######## ## ## ## ## ## ## ## ## ### ## ######<br />
; ## ## ## #### ## ## ## ## ## ## ## #### ## ## ## ## ##<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ## ##<br />
; ####### ###### ######## ## ## ######## ## ## ####### ## ## ## #### ## ## ########<br />
; ##################################################################################################################<br />
Func _SendRuntime()<br />
$iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Runtime", $iRunTime)<br />
EndFunc<br />
<br />
; ############################################################################################################################<br />
; ###### ######## ######## ######## ## ## ######## ## ## ######## ###### ## ## ## ## ####<br />
; ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ### ### ##<br />
; ## ## ## ## ## ## ## #### ## ## ## ## ## ## #### #### ##<br />
; ## #### ###### ## ###### ## ## ###### ## ## ## ## ###### ## ## ## ## ### ## ##<br />
; ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ##<br />
; ####### ###### ######## ## ######## ### ######## ## ## ## ###### ### ### ## ## ####<br />
; ############################################################################################################################<br />
Func _GetEventsWMI($i_SecondsBack = 600, $s_onlyEventID = "", $s_Categorie = "Application")<br />
Local $Eventlog_Err, $Eventlog_Err_Logfile, $Eventlog_Err_EventType, $Eventlog_Err_EventID, $Eventlog_Err_TimeGenerated, $Eventlog_Err_SourceName, $Eventlog_Err_InsertionStrings, $Eventlog_Err_Message<br />
Local $date_threshold, $days_threshold, $date_threshold_WQL, $now, $x;, $tmp<br />
Local $colItems<br />
Local $atemp<br />
Local $UTCTime = _Date_Time_GetSystemTime()<br />
$now = _Date_Time_SystemTimeToDateTimeStr($UTCTime, 1)<br />
;~ ConsoleWrite("Zeit Unterschied = " & _DateDiff("s", _NowCalc, $now) & @CRLF)<br />
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $now = ' & $now & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console<br />
$date_threshold = _DateAdd('s', ($i_SecondsBack * (-1)), $now) ;get the date / time value fom past<br />
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $date_threshold = ' & $date_threshold & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console<br />
;~ ConsoleWrite("_Date_Time_GetSystemTime : " & _Date_Time_SystemTimeToDateTimeStr($UTCTime, 1) & @CRLF)<br />
;$date_threshold_WQL = StringLeft(StringReplace(StringReplace(StringReplace(_DateAdd('s', ($i_SecondsBack * (-1)), $now), ":", ""), "/", ""), " ", ""), 8) ;convert to WQL-Supported Date Formats<br />
$date_threshold_WQL = StringReplace(StringReplace(StringReplace(_DateAdd('s', ($i_SecondsBack * (-1)), $now), ":", ""), "/", ""), " ", "") & ".000000+000"<br />
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $i_SecondsBack = ' & $i_SecondsBack & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console<br />
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $date_threshold_WQL = ' & $date_threshold_WQL & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console<br />
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $s_Categorie = ' & $s_Categorie & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console<br />
;~ ConsoleWrite("$date_threshold_WQL : " & $date_threshold_WQL & @CRLF)<br />
;~ $date_threshold_WQL = "20150304100000.000000+000"<br />
;~ ConsoleWrite("$date_threshold_WQL : " & $date_threshold_WQL & @CRLF)<br />
If $s_onlyEventID = "" Then<br />
$colItems = $objWMIService.ExecQuery("SELECT Logfile, EventType, EventCode, TimeGenerated, SourceName, InsertionStrings, Message FROM Win32_NTLogEvent WHERE LogFile='" & $s_Categorie & "' AND TimeGenerated >= '" & $date_threshold_WQL & "' AND ( EventType=1 OR EventType=2 )", "WQL", 0x30)<br />
; $colItems = $objWMIService.ExecQuery("SELECT Logfile, EventType, EventCode, TimeGenerated, SourceName, InsertionStrings, Message FROM Win32_NTLogEvent WHERE LogFile='" & $s_Categorie & "' AND TimeGenerated >= '" & $date_threshold_WQL & "' AND EventType=1", "WQL", 0x30)<br />
Else<br />
$colItems = $objWMIService.ExecQuery("SELECT Logfile, EventType, EventCode, TimeGenerated, SourceName, InsertionStrings, Message FROM Win32_NTLogEvent WHERE EventCode = '" & $s_onlyEventID & "' And LogFile='" & $s_Categorie & "' AND TimeGenerated >= '" & $date_threshold_WQL & "' AND EventType=1", "WQL", 0x30)<br />
EndIf<br />
If IsObj($colItems) Then<br />
For $objItem In $colItems<br />
$Eventlog_Err_Logfile = $objItem.Logfile<br />
$Eventlog_Err_EventType = $objItem.EventType<br />
$Eventlog_Err_EventID = $objItem.EventCode ;$objItem.EventIdentifier<br />
$Eventlog_Err_TimeGenerated = WMIDateStringToDate2($objItem.TimeGenerated)<br />
$Eventlog_Err_SourceName = $objItem.SourceName<br />
$Eventlog_Err_InsertionStrings = ""<br />
For $x = 0 To UBound($objItem.InsertionStrings) - 1<br />
If Number($objItem.InsertionStrings($x)) = 0 And StringLeft($objItem.InsertionStrings($x), 2) <> "%%" And $objItem.InsertionStrings($x) <> "" And StringLen($objItem.InsertionStrings($x)) > 1 Then ;skip unneeded strings<br />
$Eventlog_Err_InsertionStrings &= StringStripWS(StringReplace(StringReplace($objItem.InsertionStrings($x), Chr(10), ""), Chr(13), ""), 7) & ", "<br />
EndIf<br />
Next<br />
$Eventlog_Err_InsertionStrings = StringTrimRight($Eventlog_Err_InsertionStrings, 2)<br />
$Eventlog_Err_Message = StringStripWS(StringReplace(StringReplace($objItem.Message, Chr(10), ""), Chr(13), ""), 7)<br />
$Eventlog_Err &= "Localhost" & ": " & $Eventlog_Err_Logfile & @CRLF & _<br />
"Type : " & $Eventlog_Err_EventType & @CRLF & _<br />
"EventID : " & $Eventlog_Err_EventID & @CRLF & _<br />
"Time : " & $Eventlog_Err_TimeGenerated & @CRLF & _<br />
"Source : " & $Eventlog_Err_SourceName & @CRLF & _<br />
"Insertion : " & $Eventlog_Err_InsertionStrings & @CRLF & _<br />
"Message : " & $Eventlog_Err_Message & @CRLF & _<br />
"--------------------------------------------------" & @CRLF<br />
; $aMessage[1][7] ; [0][0] = Anzahl<br />
; [x][1] = EventID<br />
; [x][2] = Time-String<br />
; [x][3] = Source<br />
; [x][4] = Insertion<br />
; [x][5] = Message<br />
; [x][6] = EventType (1 = Error, 2 = Warning, 3 = Information, 4 = Security Audit Success, 5 = Security Audit Failure)<br />
<br />
$aMessage[0][0] = $aMessage[0][0] + 1<br />
ReDim $aMessage[ $aMessage[0][0] + 1 ][8]<br />
$aMessage[ $aMessage[0][0] ][1] = Int($Eventlog_Err_EventID)<br />
$aMessage[ $aMessage[0][0] ][2] = $Eventlog_Err_TimeGenerated<br />
$aMessage[ $aMessage[0][0] ][3] = $Eventlog_Err_SourceName<br />
$aMessage[ $aMessage[0][0] ][4] = $Eventlog_Err_InsertionStrings<br />
$aMessage[ $aMessage[0][0] ][5] = $Eventlog_Err_Message<br />
$aMessage[ $aMessage[0][0] ][6] = $Eventlog_Err_EventType<br />
Next<br />
;Return $Eventlog_Err<br />
Else<br />
;Return SetError(2, 0, "Error!")<br />
EndIf<br />
EndFunc<br />
<br />
; ##############################################################################################################################################################################################<br />
; ## ## ## ## #### ######## ### ######## ######## ###### ######## ######## #### ## ## ###### ######## ####### ######## ### ######## ######## #######<br />
; ## ## ## ### ### ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## #### #### ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ###### ###### ## ######## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ###### #######<br />
; ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ######### ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ### ### ## ## #### ######## ## ## ## ######## ###### ## ## ## #### ## ## ###### ## ####### ######## ## ## ## ######## #########<br />
; ##############################################################################################################################################################################################<br />
Func WMIDateStringToDate2($dtmDate)<br />
Return (StringMid($dtmDate, 7, 2) & "." & StringMid($dtmDate, 5, 2) & "." & StringLeft($dtmDate, 4) & " " & _<br />
StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))<br />
EndFunc ;==>WMIDateStringToDate2<br />
<br />
; #####################################################################################<br />
; ####### ## ## ## ## ######## ######## ######## ####### ########<br />
; ## ## ### ### ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## #### #### #### ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ### ## ## ###### ######## ######## ## ## ########<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ####### ## ## ## ######## ## ## ## ## ####### ## ##<br />
; #####################################################################################<br />
Func oMyError()<br />
;~ Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _<br />
;~ "err.description is: " & @TAB & $oMyError.Description & @CRLF & _<br />
;~ "err.windescription:" & @TAB & $oMyError.WinDescription & @CRLF & _<br />
;~ "err.number is: " & @TAB & Hex($oMyError.Number, 8) & @CRLF & _<br />
;~ "err.lastdllerror is: " & @TAB & $oMyError.LastDllError & @CRLF & _<br />
;~ "err.scriptline is: " & @TAB & $oMyError.Scriptline & @CRLF & _<br />
;~ "err.source is: " & @TAB & $oMyError.Source & @CRLF & _<br />
;~ "err.helpfile is: " & @TAB & $oMyError.Helpfile & @CRLF & _<br />
;~ "err.helpcontext is: " & @TAB & $oMyError.HelpContext _<br />
;~ , 20)<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
EndFunc<br />
<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; ############################################################################################################################################################################################################<br />
; ## ## ### #### ## ## ############################################################################################################################################################################################################<br />
; ### ### ## ## ## ### ## ############################################################################################################################################################################################################<br />
; #### #### ## ## ## #### ## ############################################################################################################################################################################################################<br />
; ## ### ## ## ## ## ## ## ## ############################################################################################################################################################################################################<br />
; ## ## ######### ## ## #### ############################################################################################################################################################################################################<br />
; ## ## ## ## ## ## ### ############################################################################################################################################################################################################<br />
; ## ## ## ## #### ## ## ############################################################################################################################################################################################################<br />
; ############################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
$iStartTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc())<br />
<br />
<br />
If $CmdLine[0] = 0 Then<br />
ConsoleWrite($sHELP & @CRLF)<br />
Exit 0<br />
EndIf<br />
<br />
_Zabbix_conf()<br />
_GetAllEventlogs()<br />
<br />
If $CmdLine[1] = "discovereventlogs" Then<br />
$s_JSONOutput = '- znil.ZabbixEventlog[discovereventlogs] {"data":['<br />
For $i = 1 To $aEventlogs[0][0]<br />
$s_JSONOutput = $s_JSONOutput & '{'<br />
$s_JSONOutput = $s_JSONOutput & '"{#EVENTLOGNAME}":"' & $aEventlogs[$i][1] & '",'<br />
$s_JSONOutput = $s_JSONOutput & '"{#EVENTLOGDUMMY}":"' & "---" & '"'<br />
$s_JSONOutput = $s_JSONOutput & '},'<br />
Next<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, 1) & ']}'<br />
_SendFile_with_Zabbix_Sender(@ScriptDir & "\Zabbix_Eventlog-LLD-Eventlogs.txt")<br />
ConsoleWrite("0" & @CRLF)<br />
Exit 0<br />
EndIf<br />
<br />
If $CmdLine[1] = "statisticseventlogs" Then<br />
For $i = 1 To $aEventlogs[0][0]<br />
; $aEventlogs<br />
; [0][0] = Anzahl<br />
; [x][1] = Name des Eventlogs (LogfileName)<br />
; [x][2] = Maximale Größe (MaxFileSize)<br />
; [x][3] = Aktuelle Größe (FileSize)<br />
; [x][4] = Anzahl der Einträge (NumberOfRecords)<br />
; [x][5] = Status (Status)<br />
; [x][6] = Pfad zum DisplayNameFile<br />
; [x][7] = DisplayNameID<br />
; [x][8] = DisplayName<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.MaxFileSize[" & $aEventlogs[$i][1] & "]", $aEventlogs[$i][2])<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.FileSize[" & $aEventlogs[$i][1] & "]", $aEventlogs[$i][3])<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.NumberOfRecords[" & $aEventlogs[$i][1] & "]", $aEventlogs[$i][4])<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Status[" & $aEventlogs[$i][1] & "]", $aEventlogs[$i][5])<br />
Next<br />
_SendRuntime()<br />
ConsoleWrite("0" & @CRLF)<br />
Exit 0<br />
EndIf<br />
<br />
$b_QueryEventlog = False<br />
<br />
For $i = 1 To $aEventlogs[0][0]<br />
If $CmdLine[1] = $aEventlogs[$i][1] Then<br />
$b_QueryEventlog = True<br />
EndIf<br />
Next<br />
<br />
If $b_QueryEventlog = False Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
<br />
; Check if we have a period as 2. Parameter<br />
If $CmdLine[0] > 1 Then<br />
$i_Period = Int($CmdLine[2])<br />
If $i_Period < 60 Then<br />
$i_Period = 60<br />
EndIf<br />
EndIf<br />
<br />
_ReadInFilterFile($sLokalFilterFile)<br />
; Check if we have an additional Filter File as 3. Parameter<br />
If $CmdLine[0] > 2 Then<br />
$sRemoteFilterFile = $CmdLine[3]<br />
_ReadInFilterFile($sRemoteFilterFile)<br />
EndIf<br />
<br />
; $aMessage[1][8] ; [0][0] = Anzahl<br />
; [x][1] = EventID<br />
; [x][2] = Time-String<br />
; [x][3] = Source<br />
; [x][4] = Insertion<br />
; [x][5] = Message<br />
; [x][6] = EventType (1 = Error, 2 = Warning, 3 = Information, 4 = Security Audit Success, 5 = Security Audit Failure)$aMessage[0][0] = 0<br />
<br />
_GetEventsWMI($i_Period, "", $CmdLine[1])<br />
<br />
;~ If $aMessage[0][0] > 0 Then<br />
;~ For $i = 1 To $aMessage[0][0]<br />
;~ If (Int($aMessage[$i][6]) = 1) Or (Int($aMessage[$i][6]) = 2) Then<br />
;~ If Int($aMessage[$i][6]) = 1 Then<br />
;~ $stemp = "EventType : ERROR" & @CRLF<br />
;~ Else<br />
;~ $stemp = "EventType : WARNING" & @CRLF<br />
;~ EndIf<br />
;~ $stemp = $stemp & "EventID : " & $aMessage[$i][1] & @CRLF<br />
;~ $stemp = $stemp & "Source : " & $aMessage[$i][3] & @CRLF<br />
;~ $stemp = $stemp & "UTC Time : " & $aMessage[$i][2] & @CRLF<br />
;~ $stemp = $stemp & "Insertion : " & $aMessage[$i][4] & @CRLF<br />
;~ $stemp = $stemp & "Message : " & $aMessage[$i][5] & @CRLF & @CRLF<br />
;~ ConsoleWrite($stemp)<br />
;~ EndIf<br />
;~ ;$stemp = StringReplace($stemp, @CRLF, "\n")<br />
;~ _SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Message[" & $CmdLine[1] & "," & Int($aMessage[$i][6]) & "]", $stemp)<br />
;~ Next<br />
;~ EndIf<br />
<br />
;~ ConsoleWrite("##############################################################################################################################################" & @CRLF)<br />
<br />
If $aMessage[0][0] > 0 Then<br />
For $i = 1 To $aMessage[0][0]<br />
If (Int($aMessage[$i][6]) = 1) Or (Int($aMessage[$i][6]) = 2) Then<br />
$bFilterEntry = False<br />
; $aFilterList_EventID[0]<br />
For $j = 1 To $aFilterList_EventID[0]<br />
If $aMessage[$i][1] = $aFilterList_EventID[$j] Then<br />
$bFilterEntry = True<br />
;~ ConsoleWrite("EventID: " & $aMessage[$i][1] & " = " & $aFilterList_EventID[$j] & @CRLF)<br />
EndIf<br />
Next<br />
; $aFilterList_Source[0] = 0<br />
For $j = 1 To $aFilterList_Source[0]<br />
If StringInStr($aMessage[$i][3], $aFilterList_Source[$j]) > 0 Then<br />
$bFilterEntry = True<br />
;~ ConsoleWrite("Source: '" & $aFilterList_Source[$j] & "' is in '" & $aMessage[$i][3] & "'" & @CRLF)<br />
EndIf<br />
Next<br />
; $aFilterList_Message[0] = 0<br />
For $j = 1 To $aFilterList_Message[0]<br />
If StringInStr($aMessage[$i][5], $aFilterList_Message[$j]) > 0 Then<br />
$bFilterEntry = True<br />
;~ ConsoleWrite("Message: '" & $aFilterList_Message[$j] & "' is in '" & $aMessage[$i][5] & "'" & @CRLF)<br />
EndIf<br />
Next<br />
; $aFilterList_Insertion[0] = 0<br />
For $j = 1 To $aFilterList_Insertion[0]<br />
If StringInStr($aMessage[$i][4], $aFilterList_Insertion[$j]) > 0 Then<br />
$bFilterEntry = True<br />
;~ ConsoleWrite("Insertion: '" & $aFilterList_Insertion[$j] & "' is in '" & $aMessage[$i][4] & "'" & @CRLF)<br />
EndIf<br />
Next<br />
If $bFilterEntry = False Then<br />
$iEventCounter = $iEventCounter + 1<br />
If Int($aMessage[$i][6]) = 1 Then<br />
$stemp = @CRLF & @CRLF & "EventType : ERROR" & @CRLF<br />
$iERROR_Counter = $iERROR_Counter + 1<br />
$bError_was_send = True<br />
Else<br />
$stemp = @CRLF & @CRLF & "EventType : WARNING" & @CRLF<br />
$iWARNING_Counter = $iWARNING_Counter + 1<br />
$bWarning_was_send = True<br />
EndIf<br />
$stemp = $stemp & "EventID : " & $aMessage[$i][1] & @CRLF<br />
$stemp = $stemp & "Source : " & $aMessage[$i][3] & @CRLF<br />
$stemp = $stemp & "UTC Time : " & $aMessage[$i][2] & @CRLF<br />
$stemp = $stemp & "Insertion : " & StringLeft(StringReplace($aMessage[$i][4], '"', "'"),128) & @CRLF<br />
$stemp = $stemp & "Message : " & @CRLF<br />
$stemp = $stemp & "----------- " & @CRLF<br />
$stemp = $stemp & StringReplace(StringReplace(StringReplace($aMessage[$i][5], Chr(9), " "), ". ", "." & @CRLF), '"', "'") & @CRLF & @CRLF<br />
$stemp = $stemp & "---------------------------------------------------------------------------------------------------" & @CRLF<br />
$stemp = $stemp & "This is Entry No. " & $i & " of " & $aMessage[0][0] & " Total Entries in the last " & $i_Period & " Seconds" & @CRLF<br />
$stemp = $stemp & "Check the Logs for additional Entries!!!!" & @CRLF<br />
;ConsoleWrite($stemp)<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Message[" & $CmdLine[1] & "," & Int($aMessage[$i][6]) & "]", $stemp)<br />
Else<br />
$iFiltered_Counter = $iFiltered_Counter + 1<br />
EndIf<br />
EndIf<br />
Next<br />
EndIf<br />
; print Value of Events witch where send<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.WarningsLastPeriod[" & $CmdLine[1] & "]", $iWARNING_Counter)<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.ErrorsLastPeriod[" & $CmdLine[1] & "]", $iERROR_Counter)<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.FilteredLastPeriod[" & $CmdLine[1] & "]", $iFiltered_Counter)<br />
If $bError_was_send = False Then<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Message[" & $CmdLine[1] & ",1]", "-=ZABBIX-EVENTLOG=- No Events for " & $i_Period & " Seconds")<br />
EndIf<br />
If $bWarning_was_send = False Then<br />
_SendValue_with_Zabbix_Sender("znil.ZabbixEventlog.Message[" & $CmdLine[1] & ",2]", "-=ZABBIX-EVENTLOG=- No Events for " & $i_Period & " Seconds")<br />
EndIf<br />
_SendRuntime()<br />
ConsoleWrite($iEventCounter & @CRLF)<br />
<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; #########################################################################################################################################################################################################<br />
; ######## ## ## ######## ######## #########################################################################################################################################################################################################<br />
; ## ### ## ## ## ## #########################################################################################################################################################################################################<br />
; ## #### ## ## ## ## #########################################################################################################################################################################################################<br />
; ###### ## ## ## ## ## ###### #########################################################################################################################################################################################################<br />
; ## ## #### ## ## ## #########################################################################################################################################################################################################<br />
; ## ## ### ## ## ## #########################################################################################################################################################################################################<br />
; ######## ## ## ######## ######## #########################################################################################################################################################################################################<br />
; #########################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
; ##################################################################################################################################################################################################################################################<br />
<br />
Exit 0<br />
</source><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Eventlog&diff=9523Zabbix:Template Windows Eventlog2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
<u>'''Changelog:'''</u><br><br />
* 04.02.2015: Erste Version auf Englisch<br />
<br><br />
<big>Download: '''[[Media:DGHB_Template_Windows_Eventlog_English_V2015-02-04.zip|DGHB_Template_Windows_Eventlog_English_V2015-02-04.zip]]'''</big><br><br />
Nach dem Import findet Ihr das Template unter der Host-Gruppe "Templates DATAGROUP"<br><br />
----<br />
==Allgemeine Informationen==<br />
Das Template bietet eine Überwachung der folgenden Windows Eventlogs:<br><br />
* Application / Anwendung<br />
* Directory Service / Verzeichnisdienst<br />
* DNS Server / DNS-Server<br />
* File Replication Service / Dateireplikationsdienst<br />
* Security / Sicherheit<br />
* System / System<br />
Das Template ist auf Englisch, funktioniert aber auch auf "deutschen" Server bzw. die eingestellte Sprache von Windows ist egal.<br><br />
Es sollte ab Windows 2000 funktionieren und setzt einen installierten Zabbix-Agenten voraus.<br><br />
Der Agent ist als '''''Zabbix agent (active)'''''<br><br />
[[Datei:Zabbix-Eventlog-Template-001.PNG]]<br><br />
<br><br />
Voreingestellt ist folgendes:<br><br />
* Nur Eventlog-Einträge ab der Stufe "Warnung" werden erfasst (Warning|Error|Critical)<br />
* Nur neue Eventlog-Einträge ab der Zuweisung und Übernahme des Templates werden erfasst (Parameter '''''skip''''')<br />
* Für die Stufen "Warnung", "Fehler" und "Kritisch" sind Trigger eingericht mit den dazu passenden Stufen<br />
* Für die Stufe "Information" gibt es Trigger, diese sind aber deaktiviert. Die Items sammeln auch keine Informations-Events<br />
{{Hinweis| Mit diesem Template werden '''NICHT''' alle Eventlog-Einträge an den Zabbix-Server gesendet sondern nur noch solche mit Fehlern!<br>Da Eventlog-Einträge immer auch aus ganz viel Text bestehen reduziert das den benötigten Datenbank-Speicherplatz ganz enorm.}}<br><br><br />
----<br />
<br />
==Items im Detail==<br />
Die Items sind mit folgendem Key aufgebaut: (Beispiel System-Eventlog)<br><br />
eventlog[System,,"Warning|Error|Critical",,,,skip]<br />
Im einzelnen bedeuten diese<br />
eventlog[ : Agent soll Eventlog abfragen<br />
System : und zwar nur das Eventlog "System"<br />
, : ALLE Eventlogeinträge (kein Textfilter)<br />
,"Warning|Error|Critical" : die diesen Stufen entsprechen<br />
, : Alle Quellen<br />
, : Alle Event-ID<br />
, : Ohne Zeilen-/Zeichenbegrenzung<br />
,skip] : keine alten/historischen Einträge sondern nur neue ab Beginn der Überwachung<br />
Mehr dazu in der offiziellen Anleitung: https://www.zabbix.com/documentation/2.4/manual/config/items/itemtypes/zabbix_agent/win_keys<br><br />
<br><br />
<br><br />
----<br />
==Trigger im Detail==<br />
<u>'''Beispiel System-Eventlog:'''</u><br><br />
[[Datei:Zabbix-Eventlog-Template-002.PNG]]<br><br />
<br><br />
Die Trigger sind wie folgt aufgebaut (Beispiel System-Eventlog Fehler)<br><br />
<br><br />
<u>'''Trigger Name:'''</u><br />
System Eventlog ERROR: {ITEM.LASTVALUE3}<br />
Das Makro <code>{ITEM.LASTVALUE3}</code> enthält den Text des Eventlogeintrages - warum kommt weiter unten.<br><br />
<br><br />
<u>'''Expression:'''</u><br />
{DGHB Template Windows Eventlog English V2015-02-04:eventlog[System,,"Warning|Error|Critical",,,,skip].logseverity(0)}=4<br />
and<br />
{DGHB Template Windows Eventlog English V2015-02-04:eventlog[System,,"Warning|Error|Critical",,,,skip].nodata(300)}=0<br />
and<br />
{DGHB Template Windows Eventlog English V2015-02-04:eventlog[System,,"Warning|Error|Critical",,,,skip].regexp(.)}=1<br />
und hier die Erklärung im Detail:<br><br />
<br><br />
{DGHB ... ,skip].logseverity(0)}=4<br />
Hiermit filtern wir aus den 3 Stufen '''"Warning|Error|Critical"''' gezielt die Stufe '''"Error"''' (=4) heraus, siehe auch die offizielle Anleitung https://www.zabbix.com/documentation/2.4/manual/appendix/triggers/functions<br><br />
<br><br />
and<br />
{DGHB Template Windows Eventlog English V2015-02-04:eventlog[System,,"Warning|Error|Critical",,,,skip].nodata(300)}=0<br />
Das Problem ist nun das wir auch nur noch Fehler mitgeteilt bekommen ... der Trigger auf Error würde also erst wieder auf "grün" zurückspringen wenn ein "Warning" oder "Critital" Event kommt. Wir wollen ja einerseits eine Benachrichtigung - und zwar nur über Fehler - andererseits soll so ein System auch irgendwann wieder "fehlerfrei" werden.<br><br />
Durch diese <br />
.nodata(300)=0<br />
Ergänzung erreichen wir das. <code>nodata</code> liefert 0 zurück wenn in dem angegebenen Zeitraum (hier 300 Sekunden/5 Minuten) neue Daten vom Host geliefert werden.<br><br />
Da wir hier diese Prüfung mit <code>and</code> Verknüpfen (in älteren Zabbix-Versionen <code>&</code>) wird dieser Trigger nach 300 Sekunden ohne neue Daten / neue Fehlermeldung wieder grün.<br><br />
Den Wert kann man natürlich auch auf Stunden oder Tage setzen - Da ich in der Regel über jeden ausgelösten Trigger eine Email versenden lasse bekomme ich dies trotzdem mit.<br><br />
<br><br />
and<br />
{DGHB Template Windows Eventlog English V2015-02-04:eventlog[System,,"Warning|Error|Critical",,,,skip].regexp(.)}=1<br />
Das ist jetzt "Blödsinn" und nur ein Kunstgriff. Der <code>regexp(.)</code> Ausdruck prüft nur ob die Eventlog-Meldung mindestens ein Zeichen enthält - und das wird diese immer tun.<br><br />
Warum also das ganze? Weil ich das innerhalb des Triggers nur Werte in Makros verwenden kann die auch verwendet wurden.<br><br />
Durch den Zeichen-Vergleich haben wir einmal den ganzen Text der Eventlog-Meldung angefasst - und können diesen im Trigger-Namen verwenden! Im Trigger-Namen verwenden wir nämlich den Ausdruck <code>{ITEM.LASTVALUE3}</code> - die 3 bezieht sich auf den 3. Wert den wir in der Expression verwenden. Dadurch wird die Fehlermeldung bei Auslösung in den Übersichten zumindest mit den ersten paar Wörtern sichtbar. Zudem wird der Text auch in die Beschreibung aufgenommen.<br><br />
In <code>{ITEM.LASTVALUE1}</code> steht demnach die Stufe der Meldung und in <code>{ITEM.LASTVALUE1}</code> der Zeitpunkt der letzten Datenerfassung.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Tipp für Action==<br />
Wenn ihr euch die Triggermeldungen per Action als Email etc. senden lasst - baut in die Meldung unbedingt das Makro<br />
{ITEM.VALUE1}<br />
ein - dann könnt Ihr auch gleich den Text des Eventlog-Eintrages lesen.<br><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Dateien_und_Ordner&diff=9522Zabbix:Template Windows Dateien und Ordner2017-08-06T18:52:10Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
Ich nutze Zabbix immer mehr zur Überwachung diverser Dinge - und brauchte mal eben etwas um die Anzahl von Dateien in einem Ordner zu prüfen und um das Alter einer Datei fest zu stellen (hab hier so einen Listenaufbereiter mit automatischen Datenbankexport).<br><br />
<br><br />
Das Tool lässt sich aber auch als ganz normales Kommandozeilentool verwenden - auf Grund der Ziel-Verwendung mit Zabbix ist die Ausgabe halt minimalistisch.<br><br />
<br><br />
Ich erkläre hier zunächst das Programm - und dann wie man es in Zabbix einbindet.<br><br />
<br><br />
----<br />
<big>Download: '''[[Media:Zabbix-FileAndFolder.zip|Zabbix-FileAndFolder.zip]]'''</big><br />
----<br />
==Changelog==<br />
* 12.04.2013: Erste Version, Version der .exe ist 1.0.6.10<br><br />
* 22.04.2015: Neue Version 2.0.0.39<br />
** Neu: DirGetSize<br />
** Neu: FileCountSize<br />
** Neu: FileCountAge<br />
** Neu: FileGetSize<br />
** Neu: FileGetVersion<br />
** Neu: GetAttrib<br />
** Neu: Verbose Modus<br />
* 12.05.2017: Neuer Version 3.0.0.5<br />
** Neu: Bei den Parametern FileCountSize und FileCountAge kann man nun als 3. Parameter eine Suchmaske für Dateien angeben<br />
<br><br />
<br><br />
----<br />
== Screenshots ==<br />
[[Datei:Zabbix_FilderAndFolder-001.png]]<br><br />
<br><br />
Und hier die Items dazu:<br><br />
[[Datei:Zabbix_FilderAndFolder-002.png]]<br><br />
<br><br />
<br><br />
----<br />
== Aufruf ==<br />
ZabbixItem-fileandfolder.exe <Option> <Datei oder Ordner><br />
die möglichen Parameter sind:<br><br />
fileandfolder.exe <Option> <Datei oder Ordner> [Suchmaske] [--Verbose]<br />
<br />
DirGetSize : gibt die Verzeichnisgröße in Bytes zurück<br />
ist inklusive aller Unterordner und deren Dateien<br />
-1 = Verzeichnis nicht gefunden<br />
<br />
FileCreateAge : Liefert die Anzahl der vergangenen Sekunden seit der,<br />
Erstellung einer Datei zurück.<br />
-1 = Datei nicht gefunden<br />
<br />
FileCount : Zählt die Anzahl von Dateien in einem Ordner<br />
und gibt die Anzahl zurück, 0 = keine Dateien gefunden<br />
Unterverzeichnisse werden mitgezählt!<br />
Es muss ein Verzeichnis angegeben werden!<br />
<br />
FileCountR : Wie zuvor, jedoch Rekursiv, Ordner werden mitgezählt<br />
<br />
FileCountR2 : Wie zuvor, Rekursiv, Ordner werden nicht mitgezählt<br />
<br />
FileFindCount : Gibt die Anzahl der gefundenen Dateien / Ordner zurück auf<br />
die das Suchmuster zutrifft. Beispiele:<br />
C:\Daten\*.docx = Alle Dateien die auf .docx enden<br />
C:\Daten\Test*.* = Alle Dateien die mit Test beginnen<br />
Es gelten die üblichen Suchmuster mit * und ?<br />
Dateien in Unterordnern werden nicht gefunden, es wird<br />
der gewählte Ordner durchsucht.<br />
<br />
FileCountSize=x : Zählt die Anzahl von Dateien in einem Ordner die größer<br />
als die mit x angegebene Größe sind und gibt die Anzahl zurück<br />
0 = keine Dateien gefunden, Ordner werden ignoriert, keine<br />
rekursion, Angabe der Größe in Bytes<br />
<br />
#FileCountSize=x : Wie zuvor, jedoch 'kleiner als' statt größer<br />
<br />
<br />
FileCountAge=x : Zählt die Anzahl von Dateien in einem Ordner die älter<br />
als das mit x angegebene Alter sind und gibt die Anzahl zurück<br />
0 = keine Dateien gefunden, Ordner werden ignoriert, keine<br />
Rekursion, Angabe der Zeit in Sekunden<br />
Basis ist das Erstellungsdatum<br />
<br />
#FileCountAge=x : Wie zuvor, nur 'jünger sind' statt älter<br />
<br />
FileModifyAge : Liefert die Anzahl der vergangenen Sekunden seit der<br />
letzten Änderung einer Datei zurück<br />
-1 = Datei nicht gefunden<br />
<br />
FileGetSize : gibt die Dateigröße in Bytes zurück<br />
-1 = Datei nicht gefunden<br />
<br />
FileGetVersion : gibt die Dateiversion als Typ Char zurück<br />
-1 = Datei nicht gefunden<br />
<br />
GetAttrib : gibt die Datei- oder Verzeichnisattribute als Typ Char zurück<br />
-1 = Datei/Verzeichnis nicht gefunden<br />
Rückgabewert ist eine Kombination von "RASHNDOCTIPL":<br />
"R" = Read-Only<br />
"A" = Archive<br />
"S" = System<br />
"H" = Hidden<br />
"N" = Normal<br />
"D" = Directory<br />
"O" = Offline<br />
"C" = Compressed (NTFS compression, not ZIP compression)<br />
"T" = Temporay<br />
"I" = Not content-indexed<br />
"P" = Sparse File<br />
"L" = Symbolic Link / Junction<br />
<br />
[Suchmaske] : Schränkt bei Verzeichnisbefehlen auf Dateien entsprechend<br />
dieser Maske ein, z.B. *.txt - Funktioniert mit:<br />
FileCountSize, FileCountAge<br />
<br />
--Verbose : Verbose Modus mit Anzeige der Prüfungen etc<br />
Allgemein gilt das im Fehlerfall (wenn z.B. ein ungültiger Parameter) immer -1 zurück gegeben wird (z.B. bei /FileCount wurde eine Datei statt Ordner angeben)<br><br />
<br><br />
{{Hinweis| Testet vorher in einer DOS-Box ob das Ergebnis kommt welches Ihr erwartet! Der <code>--Verbose</code> Modus gibt z.B. bei den größer/kleiner Vergleichen detaliert aus wie er prüft}}<br><br />
<br><br />
<br><br />
----<br />
=== Beispiele 1: Dateien zählen ===<br />
In der oberen Zeile steht immer der Aufruf, in der Zeile darunter steht ein Beispiel-Rückgabewert<br><br />
<br><br />
Alle Dateien und Ordner im Ordner <code>C:\Windows</code> zählen<br />
ZabbixItem-fileandfolder.exe /FileCount C:\Windows<br />
102<br />
<br><br />
Alle Dateien und Ordner inklusive Unterordner im Ordner <code>C:\Windows</code> zählen (der Aufruf dauert schon länger)<br />
ZabbixItem-fileandfolder.exe /FileCountR C:\Windows<br />
89189<br />
<br><br />
Alle Dateien inklusive Dateien in Unterordner im Ordner <code>C:\Windows</code> zählen - Ordner/Verzeichnisse selbst werden nicht gezählt.<br />
ZabbixItem-fileandfolder.exe /FileCountR2 C:\Windows<br />
72557<br />
<br><br />
Alle <code>*.exe</code> im Verzeichnis C:\Windows\System32 finden (ohne Unterordner)<br />
ZabbixItem-fileandfolder.exe /FileFindCount C:\Windows\System32\*.exe<br />
296<br />
<br><br />
Alle <code>*.exe</code> im Verzeichnis C:\Windows\System32 finden die mit dem Buchstaben <code>N</code> beginnen (ohne Unterordner)<br />
ZabbixItem-fileandfolder.exe /FileFindCount C:\Windows\System32\N*.exe<br />
15<br />
<br><br />
Alle Dateien im Verzeichnis C:\Windows\System32 finden welche die Zeichenfolge <code>inst</code> enthalten (ohne Unterordner)<br />
ZabbixItem-fileandfolder.exe /FileFindCount C:\Windows\System32\*inst*<br />
17<br />
<br><br />
<br><br />
----<br />
=== Beispiele 2: Dateialter / Änderungen ===<br />
Der Wert der zurück gegeben wird entspricht der Differenz vom Zeitpunkt der Erstellung oder Änderung einer Datei bis zum Zeitpunkt des Aufrufes von <code>ZabbixItem-fileandfolder.exe</code>.<br><br />
Frage ich das Erstellungsdatum einer Datei ab die ich vor 10 Minuten neu erstellt habe, wird '''600''' zurück gegeben.<br><br />
Je nach Alter können es sehr hohe Werte werden, so ein jahr hat 31.536.000 Sekunden<br><br />
<br><br />
Zeit seit der Erstellung der <code>C:\Windows\explorer.exe</code> in Sekunden:<br />
ZabbixItem-fileandfolder.exe /FileCreateAge C:\Windows\explorer.exe<br />
75210302<br />
<br><br />
Zeit seit der letzten Änderung der <code>C:\Windows\Temp\chrome_installer.log</code> in Sekunden:<br><br />
ZabbixItem-fileandfolder.exe /FileModifyAge C:\Windows\Temp\chrome_installer.log<br />
2967822<br />
<br><br />
<br><br />
----<br />
=== Beispiele 3: Dateigröße ===<br />
Der Rückgabewert ist in Bytes.<br><br />
<br><br />
Größe der Datei <code>C:\Windows\Temp\chrome_installer.log</code> in Bytes<br />
ZabbixItem-fileandfolder.exe /FileGetSize C:\Windows\Temp\chrome_installer.log<br />
920<br />
Größe der Datei <code>C:\Windows\explorer.exe</code> in Bytes<br />
ZabbixItem-fileandfolder.exe /FileGetSize C:\Windows\explorer.exe<br />
2872320<br />
<br><br />
<br><br />
----<br />
=== Beispiele 4: Dateien in Verzeichnissen zählen nach Größe oder Alter ===<br />
Der Rückgabewert ist die Anzahl der Dateien.<br><br />
<br><br />
Anzahl der Dateien im Verzeichnis <Code>C:\_AutoIt\ZabbixAgent\FilesAndFolder\</Code> die älter als 1 Tag sind (=86400 Sekunden)<br />
fileandfolder.exe FileCountAge=86400 C:\_AutoIt\ZabbixAgent\FilesAndFolder\<br />
3<br />
<br><br />
Wie zuvor, jedoch jünger statt älter:<br />
fileandfolder.exe #FileCountAge=86400 C:\_AutoIt\ZabbixAgent\FilesAndFolder\<br />
10<br />
<br><br />
Anzahl der Dateien im Verzeichnis <Code>C:\_AutoIt\ZabbixAgent\FilesAndFolder\</Code> liegen, die Dateiendung <Code>*bak</Code> haben und die älter als 1 Tag sind (=86400 Sekunden)<br />
fileandfolder.exe FileCountAge=86400 C:\_AutoIt\ZabbixAgent\FilesAndFolder\ *.bak<br />
<br><br />
<br><br />
----<br />
<br />
==Einbinden in Zabbix==<br />
* Kopiert die <code>fileandfolder.exe</code> in das Verzeichnis mit eurem Zabbix-Agenten<br><br />
* Bearbeitet die <code>zabbix_agentd.win.conf</code> und ergänzt folgende Zeilen<br><br />
UserParameter=znil.fileandfolder[*],"C:\Program Files\Zabbix\UserParameter\fileandfolder.exe" "$1" "$2" "$3" "$4"<br />
* Startet den Dienst des Zabbix-Agenten einmal neu!<br />
:Den Pfad müsst Ihr natürlich anpassen<br />
* Importiert in Zabbix das Template <code>znil_Template_Dateien_und_Ordner_BEISPIELE_Vxxxx-xx-xx.xml</code><br />
* Schaut euch das Beipieltemplate an!<br />
<br><br />
<br><br />
----<br />
==Nutzung der Items==<br />
In dem Beispiel-Template sind sowohl Abfragen drin wecleh die von mir programmierte <code>fileandfolder.exe</code> nutzen als auch Abfragen welche die im Zabbix-Agenten integriert sind <code>vfs.file.xxx</code><br><br />
Generell gilt der Hinweis:<br><br />
{{Hinweis| In allen Pfaden den "/" statt dem "\" nutzen!}}<br><br />
Die Zabbix-Internen abfragen kommen zwar auch mit dem Backslash "\" aus ... aber bei der Übergaben an die <code>fileandfolder.exe</code> ging das regelmäßig schief - deshalb die Linux-Schreibweise.<br><br />
Aus dem gleichen Grund muss bei den Dateisuchoptionen ein <code>%</code> statt dem <code>*</code> angebeben werden. Das <code>?</code> kann ganz normal genutzt werden.<br><br />
<br><br />
<br><br />
----<br />
==Quellcode==<br />
Wie fast immer im AutoIt geschrieben:<br><br />
<source lang="AutoIt"><br />
#NoTrayIcon<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_UseUpx=y<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=2014 von Bernhard Linz / Bernhard@znil.de<br />
#AutoIt3Wrapper_Res_Fileversion=2.0.0.40<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#include <Date.au3><br />
<br />
<br />
Dim $h_suchhandle<br />
Dim $i_Zaehler<br />
Dim $s_Path<br />
Dim $s_temp<br />
Dim $a_dateizeit<br />
Dim $a_aktuellezeit<br />
Dim $a_dateiliste<br />
Dim $i_Sekunden<br />
Dim $i_Dateigroesse<br />
Dim $i_DateiSuchGroesse = 0<br />
Dim $i_DateiSuchAlter = 0<br />
Dim $b_Inverse = False<br />
Global $b_Verbose = False<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s_Header = _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| fileandfolder.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| 2013/2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s_HilfeText = _<br />
"Hilfsprogramm für die Abfrage von Werten rund aus dem Dateisystem." & @CRLF & _<br />
"Erstellt weil es mir in Zabbix zu kompliziert war / nicht das war was ich wollte." & @CRLF & _<br />
"genaue Anleitung unter dem Weblink unten am Ende." & @CRLF & _<br />
"Testet den Aufruf auf jeden Fall manuell bevor in in Zabbix als Item einbaut!" & @CRLF & _<br />
"Die Rückgabewerte werden gleichzeitig auch als Exit-Codes zurückgegeben - können also" & @CRLF & _<br />
"auch in Batchdateien mit %ERRORLEVEL% abgefragt werden" & @CRLF & _<br />
"-------------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF & _<br />
"Aufruf: " & @CRLF & _<br />
@CRLF & _<br />
@ScriptName & " <Option> <Datei oder Ordner> [--Verbose]" & @CRLF & _<br />
@CRLF & _<br />
"DirGetSize : gibt die Verzeichnisgröße in Bytes zurück" & @CRLF & _<br />
" ist inklusive aller Unterordner und deren Dateien" & @CRLF & _<br />
" -1 = Verzeichnis nicht gefunden" & @CRLF & _<br />
@CRLF & _<br />
"FileCreateAge : Liefert die Anzahl der vergangenen Sekunden seit der," & @CRLF & _<br />
" Erstellung einer Datei zurück." & @CRLF & _<br />
" -1 = Datei nicht gefunden" & @CRLF & _<br />
@CRLF & _<br />
"FileCount : Zählt die Anzahl von Dateien in einem Ordner" & @CRLF & _<br />
" und gibt die Anzahl zurück, 0 = keine Dateien gefunden" & @CRLF & _<br />
" Unterverzeichnisse werden mitgezählt!" & @CRLF & _<br />
" Es muss ein Verzeichnis angegeben werden!" & @CRLF & _<br />
@CRLF & _<br />
"FileCountR : Wie zuvor, jedoch Rekursiv, Ordner werden mitgezählt" & @CRLF & _<br />
@CRLF & _<br />
"FileCountR2 : Wie zuvor, Rekursiv, Ordner werden nicht mitgezählt" & @CRLF & _<br />
@CRLF & _<br />
"FileFindCount : Gibt die Anzahl der gefundenen Dateien / Ordner zurück auf" & @CRLF & _<br />
" die das Suchmuster zutrifft. Beispiele:" & @CRLF & _<br />
" C:\Daten\*.docx = Alle Dateien die auf .docx enden" & @CRLF & _<br />
" C:\Daten\Test*.* = Alle Dateien die mit Test beginnen" & @CRLF & _<br />
" Es gelten die üblichen Suchmuster mit * und ?" & @CRLF & _<br />
" Dateien in Unterordnern werden nicht gefunden, es wird" & @CRLF & _<br />
" der gewählte Ordner durchsucht." & @CRLF & _<br />
@CRLF & _<br />
"FileCountSize=x : Zählt die Anzahl von Dateien in einem Ordner die größer" & @CRLF & _<br />
" als die mit x angegebene Größe sind und gibt die Anzahl zurück" & @CRLF & _<br />
" 0 = keine Dateien gefunden, Ordner werden ignoriert, keine" & @CRLF & _<br />
" rekursion, Angabe der Größe in Bytes" & @CRLF & _<br />
@CRLF & _<br />
"#FileCountSize=x : Wie zuvor, jedoch 'kleiner als' statt größer" & @CRLF & _<br />
@CRLF & _<br />
@CRLF & _<br />
"FileCountAge=x : Zählt die Anzahl von Dateien in einem Ordner die älter" & @CRLF & _<br />
" als das mit x angegebene Alter sind und gibt die Anzahl zurück" & @CRLF & _<br />
" 0 = keine Dateien gefunden, Ordner werden ignoriert, keine" & @CRLF & _<br />
" Rekursion, Angabe der Zeit in Sekunden" & @CRLF & _<br />
" Basis ist das Erstellungsdatum" & @CRLF & _<br />
@CRLF & _<br />
"#FileCountAge=x : Wie zuvor, nur 'jünger sind' statt älter" & @CRLF & _<br />
@CRLF & _<br />
"FileModifyAge : Liefert die Anzahl der vergangenen Sekunden seit der" & @CRLF & _<br />
" letzten Änderung einer Datei zurück" & @CRLF & _<br />
" -1 = Datei nicht gefunden" & @CRLF & _<br />
@CRLF & _<br />
"FileGetSize : gibt die Dateigröße in Bytes zurück" & @CRLF & _<br />
" -1 = Datei nicht gefunden" & @CRLF & _<br />
@CRLF & _<br />
"FileGetVersion : gibt die Dateiversion als Typ Char zurück" & @CRLF & _<br />
" -1 = Datei nicht gefunden" & @CRLF & _<br />
@CRLF & _<br />
"GetAttrib : gibt die Datei- oder Verzeichnisattribute als Typ Char zurück" & @CRLF & _<br />
" -1 = Datei/Verzeichnis nicht gefunden" & @CRLF & _<br />
' Rückgabewert ist eine Kombination von "RASHNDOCTIPL":' & @CRLF & _<br />
' "R" = Read-Only' & @CRLF & _<br />
' "A" = Archive' & @CRLF & _<br />
' "S" = System' & @CRLF & _<br />
' "H" = Hidden' & @CRLF & _<br />
' "N" = Normal' & @CRLF & _<br />
' "D" = Directory' & @CRLF & _<br />
' "O" = Offline' & @CRLF & _<br />
' "C" = Compressed (NTFS compression, not ZIP compression)' & @CRLF & _<br />
' "T" = Temporay' & @CRLF & _<br />
' "I" = Not content-indexed' & @CRLF & _<br />
' "P" = Sparse File' & @CRLF & _<br />
' "L" = Symbolic Link / Junction' & @CRLF & _<br />
@CRLF & _<br />
"--Verbose : Verbose Modus mit Anzeige der Prüfungen etc" & @CRLF & _<br />
"-------------------------------------------------------------------------------" & @CRLF & _<br />
" Im Fehlerfall (wenn z.B. ein ungültiger Parameter oder Ordner nicht gefunden)" & @CRLF & _<br />
" wird -1 zurück gegeben" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| FileandFolder.exe ist FREEWARE!" & @CRLF & _<br />
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _<br />
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _<br />
"| http://znil.net/index.php?title=Zabbix:Template_Windows_Dateien_und_Ordner" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF<br />
<br />
; ###################################################################################<br />
; F U N C T I O N E N / S U B R O U T I N E N<br />
; ###################################################################################<br />
<br />
; ###################################################################################<br />
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird<br />
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt<br />
<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
;Return $text<br />
EndFunc ;==>_ANSI2OEM<br />
<br />
; ###################################################################################<br />
; Hilfsroutine die den Hilfetext ausgibt<br />
Func _HilfeAusgeben()<br />
ConsoleWrite(_ANSI2OEM($s_Header))<br />
ConsoleWrite(_ANSI2OEM($s_HilfeText))<br />
EndFunc ;==>_HilfeAusgeben<br />
<br />
; ###################################################################################<br />
; Soll ganz toll ganze Verzeichnisbäume abgrasen können<br />
;==================================================================================================<br />
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])<br />
; Description: Rekursive Auflistung von Dateien und/oder Ordnern<br />
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)<br />
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)<br />
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner<br />
; optional: $iRetType 0 gibt Array, 1 gibt String zurück<br />
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest<br />
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'<br />
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner<br />
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner<br />
; Author(s): BugFix (bugfix@autoit.de)<br />
;==================================================================================================<br />
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')<br />
Global $oFSO = ObjCreate('Scripting.FileSystemObject')<br />
Global $strFiles = ''<br />
Switch $sDelim<br />
Case '1'<br />
$sDelim = @CR<br />
Case '2'<br />
$sDelim = @LF<br />
Case '3'<br />
$sDelim = ';'<br />
Case '4'<br />
$sDelim = '|'<br />
Case Else<br />
$sDelim = @CRLF<br />
EndSwitch<br />
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0<br />
If $sExt = -1 Then $sExt = '*'<br />
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1<br />
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)<br />
If $iRetType = 0 Then<br />
Local $aOut<br />
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)<br />
If $aOut[1] = '' Then<br />
ReDim $aOut[1]<br />
$aOut[0] = 0<br />
EndIf<br />
Return $aOut<br />
Else<br />
Return StringTrimRight($strFiles, StringLen($sDelim))<br />
EndIf<br />
EndFunc<br />
<br />
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)<br />
If Not IsDeclared("strFiles") Then Global $strFiles = ''<br />
If ($Dir = -1) Or ($Dir = 0) Then<br />
For $file In $Folder.Files<br />
If $Ext <> '*' Then<br />
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _<br />
$strFiles &= $file.Path & $Delim<br />
Else<br />
$strFiles &= $file.Path & $Delim<br />
EndIf<br />
Next<br />
EndIf<br />
For $Subfolder In $Folder.SubFolders<br />
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim<br />
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)<br />
Next<br />
EndFunc<br />
<br />
Func _VerboseConsoleWrite($s_VerboseText)<br />
If $b_Verbose = True Then<br />
ConsoleWrite(_ANSI2OEM($s_VerboseText) & @CRLF)<br />
EndIf<br />
EndFunc<br />
<br />
<br />
; ###################################################################################<br />
; H I L F E<br />
; ###################################################################################<br />
<br />
;testen ob wir überhaupt mit einem Parameter gestartet wurden - sonst Hilfe ausgeben<br />
;~ If $CmdLine[0] = 0 Then<br />
;~ _HilfeAusgeben()<br />
;~ Exit 0<br />
;~ EndIf<br />
<br />
;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben<br />
If $CmdLine[0] = 0 Then<br />
_HilfeAusgeben()<br />
Exit 0<br />
EndIf<br />
<br />
If $CmdLine[1] = "/?" Then<br />
_HilfeAusgeben()<br />
Exit 0<br />
EndIf<br />
<br />
If $CmdLine[0] >= 3 Then<br />
If $CmdLine[3] = "--Verbose" Then<br />
$b_Verbose = True<br />
ConsoleWrite("Aufruf von " & @ScriptName & " mit folgenden Parametern:" & @CRLF)<br />
For $i = 1 To $CmdLine[0]<br />
ConsoleWrite("Parameter " & $i & ": " & $CmdLine[$i] & @CRLF)<br />
Next<br />
EndIf<br />
EndIf<br />
<br />
; Restliche Parameter auswerten und Variablen füllen ########################################################<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileCount" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = $CmdLine[2]<br />
If StringRight($s_Path,1) <> "\" Then<br />
$s_Path = $s_Path & "\"<br />
EndIf<br />
$i_Zaehler = 0<br />
If StringInStr(FileGetAttrib($CmdLine[2]), "D") > 0 Then<br />
_VerboseConsoleWrite("Hole Zeiger auf Verzeichnis")<br />
$h_suchhandle = FileFindFirstFile($s_Path & "*")<br />
_VerboseConsoleWrite("Zähle Dateien")<br />
While @error <> 1<br />
$i_Zaehler = $i_Zaehler + 1<br />
If $b_Verbose = True Then<br />
ConsoleWrite(".")<br />
EndIf<br />
$s_temp = FileFindNextFile($h_suchhandle)<br />
WEnd<br />
If $i_Zaehler > 0 Then<br />
$i_Zaehler = $i_Zaehler - 1<br />
EndIf<br />
_VerboseConsoleWrite(" fertig!")<br />
ConsoleWrite($i_Zaehler & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit $i_Zaehler<br />
Else<br />
_VerboseConsoleWrite($CmdLine[2] & " ist kein Verzeichnis!")<br />
_VerboseConsoleWrite(FileGetAttrib($CmdLine[2]))<br />
ConsoleWrite("-1" & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit -1<br />
EndIf<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileCountR" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = $CmdLine[2]<br />
If StringRight($s_Path,1) <> "\" Then<br />
$s_Path = $s_Path & "\"<br />
EndIf<br />
$i_Zaehler = 0<br />
If StringInStr(FileGetAttrib($CmdLine[2]), "D") > 0 Then<br />
$a_dateiliste = _GetFilesFolder_Rekursiv($s_Path)<br />
ConsoleWrite($a_dateiliste[0] & @CRLF)<br />
Exit $a_dateiliste[0]<br />
Else<br />
_VerboseConsoleWrite($CmdLine[2] & " ist kein Verzeichnis!")<br />
_VerboseConsoleWrite(FileGetAttrib($CmdLine[2]))<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileCountR2" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = $CmdLine[2]<br />
If StringRight($s_Path,1) <> "\" Then<br />
$s_Path = $s_Path & "\"<br />
EndIf<br />
$i_Zaehler = 0<br />
If StringInStr(FileGetAttrib($CmdLine[2]), "D") > 0 Then<br />
$a_dateiliste = _GetFilesFolder_Rekursiv($s_Path, "*", 0)<br />
ConsoleWrite($a_dateiliste[0] & @CRLF)<br />
Exit $a_dateiliste[0]<br />
Else<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileFindCount" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = StringReplace($CmdLine[2],"%","*") ; alle % durch * da Zabbix den * nicht mag<br />
$s_Path = StringReplace($s_Path, "/", "\")<br />
_VerboseConsoleWrite("Übergebender Suchparameter ist : " & $CmdLine[2])<br />
_VerboseConsoleWrite("Umgewandelter Suchparamater ist : " & $s_Path)<br />
$i_Zaehler = 0<br />
$h_suchhandle = FileFindFirstFile($s_Path)<br />
While @error <> 1<br />
$i_Zaehler = $i_Zaehler + 1<br />
$s_temp = FileFindNextFile($h_suchhandle)<br />
If $s_temp <> "" Then<br />
_VerboseConsoleWrite($i_Zaehler & ": Datei gefunden : '" & $s_temp & "'")<br />
EndIf<br />
WEnd<br />
If $i_Zaehler > 0 Then<br />
$i_Zaehler = $i_Zaehler - 1<br />
EndIf<br />
If $i_Zaehler = -1 Then<br />
$i_Zaehler = 0<br />
EndIf<br />
ConsoleWrite($i_Zaehler & @CRLF)<br />
Exit $i_Zaehler<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileCreateAge" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
If FileExists($CmdLine[2]) = 0 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$a_dateizeit = FileGetTime($CmdLine[2],1) ; 1 = erstellt<br />
; Das Array ist ein 1-dimensionales Array, das sechs Elemente enthält:<br />
; $array[0] = Jahr (vierstellig)<br />
; $array[1] = Monat (Bereich: 01 - 12)<br />
; $array[2] = Tag (Bereich: 01 - 31)<br />
; array[3] = Stunden (Bereich: 00 - 23)<br />
; $array[4] = Minuten (Bereich: 00 - 59)<br />
; $array[5] = Sekunden (Bereich: 00 - 59)<br />
; Es ist zu beachten, dass die Rückgabewerte bei Bedarf mit Nullen aufgefüllt sind.<br />
$i_Sekunden = _DateDiff("s", $a_dateizeit[0] & "/" & $a_dateizeit[1] & "/" & $a_dateizeit[2] & " " & $a_dateizeit[3] & ":" & $a_dateizeit[4] & ":" & $a_dateizeit[5], _NowCalc())<br />
; $sType Auswählen, wie die Differenz zurückgegeben werden soll:<br />
; D - in Tagen<br />
; M - in Monaten<br />
; Y - in Jahren<br />
; w - in Wochen<br />
; h - in Stunden<br />
; n - in Minuten<br />
; s - in Sekunden<br />
ConsoleWrite($i_Sekunden & @CRLF)<br />
Exit $i_Sekunden<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileModifyAge" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
If FileExists($CmdLine[2]) = 0 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$a_dateizeit = FileGetTime($CmdLine[2],0) ; 0 = geändert<br />
$i_Sekunden = _DateDiff("s", $a_dateizeit[0] & "/" & $a_dateizeit[1] & "/" & $a_dateizeit[2] & " " & $a_dateizeit[3] & ":" & $a_dateizeit[4] & ":" & $a_dateizeit[5], _NowCalc())<br />
; $sType Auswählen, wie die Differenz zurückgegeben werden soll:<br />
; D - in Tagen<br />
; M - in Monaten<br />
; Y - in Jahren<br />
; w - in Wochen<br />
; h - in Stunden<br />
; n - in Minuten<br />
; s - in Sekunden<br />
ConsoleWrite($i_Sekunden & @CRLF)<br />
Exit $i_Sekunden<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "GetAttrib" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = StringReplace($CmdLine[2], "/", "\")<br />
_VerboseConsoleWrite("Übergebende Datei/Ordner ist : " & $CmdLine[2])<br />
_VerboseConsoleWrite("Umgewandelter Pfad ist : " & $s_Path)<br />
If FileExists($s_Path) = 0 Then<br />
_VerboseConsoleWrite("Datei/Verzeichnis nicht vorhanden!")<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_temp = FileGetAttrib($s_Path)<br />
ConsoleWrite($s_temp & @CRLF)<br />
Exit<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileGetSize" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
If FileExists($CmdLine[2]) = 0 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$i_Dateigroesse = FileGetSize($CmdLine[2])<br />
ConsoleWrite($i_Dateigroesse & @CRLF)<br />
Exit<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "FileGetVersion" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
If FileExists($CmdLine[2]) = 0 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_temp = FileGetVersion($CmdLine[2])<br />
ConsoleWrite($s_temp & @CRLF)<br />
Exit<br />
EndIf<br />
; ##############################################################################################<br />
If $CmdLine[1] = "DirGetSize" Then<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
If FileExists($CmdLine[2]) = 0 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$i_Dateigroesse = DirGetSize($CmdLine[2])<br />
ConsoleWrite($i_Dateigroesse & @CRLF)<br />
Exit $i_Dateigroesse<br />
EndIf<br />
; ##############################################################################################<br />
If StringLeft($CmdLine[1], StringLen("FileCountSize=")) = "FileCountSize=" Or StringLeft($CmdLine[1], StringLen("#FileCountSize=")) = "#FileCountSize=" Then<br />
If StringLeft($CmdLine[1], 1) = "#" Then<br />
$i_DateiSuchGroesse = Int(StringReplace($CmdLine[1], "#FileCountSize=", ""))<br />
$b_Inverse = True<br />
If $b_Verbose = True Then<br />
ConsoleWrite("Suche Dateien die kleiner sind als ")<br />
EndIf<br />
Else<br />
$i_DateiSuchGroesse = Int(StringReplace($CmdLine[1], "FileCountSize=", ""))<br />
$b_Inverse = False<br />
If $b_Verbose = True Then<br />
ConsoleWrite(_ANSI2OEM("Suche Dateien die größer sind als "))<br />
EndIf<br />
EndIf<br />
_VerboseConsoleWrite($i_DateiSuchGroesse & " Bytes")<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = $CmdLine[2]<br />
If StringRight($s_Path,1) <> "\" Then<br />
$s_Path = $s_Path & "\"<br />
EndIf<br />
$i_Zaehler = 0<br />
If StringInStr(FileGetAttrib($CmdLine[2]), "D") > 0 Then<br />
$h_suchhandle = FileFindFirstFile($s_Path & "*")<br />
While @error <> 1<br />
$s_temp = FileFindNextFile($h_suchhandle)<br />
If @error = 1 Then<br />
ExitLoop<br />
EndIf<br />
If StringInStr(FileGetAttrib($s_temp), "D") = 0 Then<br />
If $b_Inverse = False Then<br />
If FileGetSize($s_Path & $s_temp) >= $i_DateiSuchGroesse Then<br />
_VerboseConsoleWrite("Treffer : " & $s_temp & " : " & FileGetSize($s_Path & $s_temp) & " >= " & $i_DateiSuchGroesse)<br />
$i_Zaehler = $i_Zaehler + 1<br />
Else<br />
_VerboseConsoleWrite("zu klein : " & $s_temp & " : " & FileGetSize($s_Path & $s_temp) & " < " & $i_DateiSuchGroesse)<br />
EndIf<br />
Else<br />
If FileGetSize($s_Path & $s_temp) <= $i_DateiSuchGroesse Then<br />
_VerboseConsoleWrite("Treffer : " & $s_temp & " : " & FileGetSize($s_Path & $s_temp) & " <= " & $i_DateiSuchGroesse)<br />
$i_Zaehler = $i_Zaehler + 1<br />
Else<br />
_VerboseConsoleWrite("zu groß : " & $s_temp & " : " & FileGetSize($s_Path & $s_temp) & " < " & $i_DateiSuchGroesse)<br />
EndIf<br />
EndIf<br />
EndIf<br />
WEnd<br />
ConsoleWrite($i_Zaehler & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit $i_Zaehler<br />
Else<br />
_VerboseConsoleWrite($CmdLine[2] & " ist kein Verzeichnis!" & @CRLF)<br />
_VerboseConsoleWrite(FileGetAttrib($CmdLine[2]) & @CRLF)<br />
ConsoleWrite("-1" & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit -1<br />
EndIf<br />
EndIf<br />
; ##############################################################################################<br />
If StringLeft($CmdLine[1], StringLen("FileCountAge=")) = "FileCountAge=" Or StringLeft($CmdLine[1], StringLen("#FileCountAge=")) = "#FileCountAge=" Then<br />
If StringLeft($CmdLine[1], 1) = "#" Then<br />
$i_DateiSuchAlter = Int(StringReplace($CmdLine[1], "#FileCountAge=", ""))<br />
$b_Inverse = True<br />
Else<br />
$i_DateiSuchAlter = Int(StringReplace($CmdLine[1], "FileCountAge=", ""))<br />
$b_Inverse = False<br />
EndIf<br />
;ConsoleWrite("Dateisuchgroesse = '" & $i_DateiSuchAlter & "'" & @CRLF)<br />
If $CmdLine[0] < 2 Then<br />
ConsoleWrite("-1" & @CRLF)<br />
Exit -1<br />
EndIf<br />
$s_Path = $CmdLine[2]<br />
If StringRight($s_Path,1) <> "\" Then<br />
$s_Path = $s_Path & "\"<br />
EndIf<br />
$i_Zaehler = 0<br />
If StringInStr(FileGetAttrib($CmdLine[2]), "D") > 0 Then<br />
$h_suchhandle = FileFindFirstFile($s_Path & "*")<br />
While @error <> 1<br />
$s_temp = FileFindNextFile($h_suchhandle)<br />
If @error = 1 Then<br />
ExitLoop<br />
EndIf<br />
If StringInStr(FileGetAttrib($s_temp), "D") = 0 Then<br />
$a_dateizeit = FileGetTime($s_Path & $s_temp, 1) ; 1 = erstellt<br />
; Das Array ist ein 1-dimensionales Array, das sechs Elemente enthält:<br />
; $array[0] = Jahr (vierstellig)<br />
; $array[1] = Monat (Bereich: 01 - 12)<br />
; $array[2] = Tag (Bereich: 01 - 31)<br />
; array[3] = Stunden (Bereich: 00 - 23)<br />
; $array[4] = Minuten (Bereich: 00 - 59)<br />
; $array[5] = Sekunden (Bereich: 00 - 59)<br />
; Es ist zu beachten, dass die Rückgabewerte bei Bedarf mit Nullen aufgefüllt sind.<br />
$i_Sekunden = _DateDiff("s", $a_dateizeit[0] & "/" & $a_dateizeit[1] & "/" & $a_dateizeit[2] & " " & $a_dateizeit[3] & ":" & $a_dateizeit[4] & ":" & $a_dateizeit[5], _NowCalc())<br />
If $b_Inverse = False Then<br />
If $i_Sekunden >= $i_DateiSuchAlter Then<br />
_VerboseConsoleWrite("Treffer : " & $s_temp & " : " & $i_DateiSuchAlter & " <= " & $i_Sekunden)<br />
$i_Zaehler = $i_Zaehler + 1<br />
Else<br />
_VerboseConsoleWrite("zu neu : " & $s_temp & " : " & $i_DateiSuchAlter & " > " & $i_Sekunden)<br />
EndIf<br />
Else<br />
If $i_Sekunden <= $i_DateiSuchAlter Then<br />
_VerboseConsoleWrite("Treffer : " & $s_temp & " : " & $i_DateiSuchAlter & " <= " & $i_Sekunden)<br />
$i_Zaehler = $i_Zaehler + 1<br />
Else<br />
_VerboseConsoleWrite("zu alt : " & $s_temp & " : " & $i_DateiSuchAlter & " > " & $i_Sekunden)<br />
EndIf<br />
EndIf<br />
EndIf<br />
WEnd<br />
ConsoleWrite($i_Zaehler & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit $i_Zaehler<br />
Else<br />
_VerboseConsoleWrite($CmdLine[2] & " ist kein Verzeichnis!")<br />
_VerboseConsoleWrite(FileGetAttrib($CmdLine[2]))<br />
ConsoleWrite("-1" & @CRLF)<br />
FileClose($h_suchhandle)<br />
Exit -1<br />
EndIf<br />
EndIf<br />
<br />
; ##############################################################################################<br />
;~ Case Else<br />
ConsoleWrite(_ANSI2OEM("Unbekannter Parameter: " & $CmdLine[1] & @CRLF))<br />
Exit 1<br />
</source><br />
<br><br />
<br><br />
----<br />
<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Windows_Aufgabenplanung_Scheduled_Tasks&diff=9521Zabbix:Template Windows Aufgabenplanung Scheduled Tasks2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 23.04.2015: Erste Version, Version der '''TaskSchedulerMonitoring.exe''' ist 1.0.0.45<br />
<br><br />
<big>Download: '''[[Media:Zabbix-TaskSchedulerMonitoring.zip|Zabbix-TaskSchedulerMonitoring.zip]]'''</big><br><br />
----<br />
==Vorwort==<br />
Dieses Template überwacht alle Aufgaben der Aufgabenplanung / Task Scheduler<br />
* Sprachunabhängig - funktioniert mit deutschen und englischen Windows, erkennt deutsche und englische Schreibweise des Datums<br />
* Es wurde nur alle Task im Stammordner "Aufgabenplanungsbibliothek" bzw. "Task Scheduler Library" erkannt, alle Task aus Unterordnern werden ignoriert<br />
* Template ist enthält Item-Discovery<br />
* Template enthält einen Demo-Trigger<br />
* Die Abfrage des Status einer geplanten Aufgabe wird über ein Item "'''''Query Helper'''''" angetriggert. Dieser erhält als Rückgabewert die Laufzeit der Abfrage in Sekunden (gerundet). Ein Wert von '''0s''' bedeutet als "unter 0,5 Sekunden"<br />
* Es wird automatisch eine vorhanden Zabbix-Agenten-Installation erkannt, Ziel-Server wird aus der Konfigurationsdatei ausgelesen<br />
* Items sind vom Typ "Zabbix Trapper" und werden per '''''Zabbix_Sender.exe''''' befüllt (geringe Last auf Host)<br />
* Über die Datei "TaskSchedulerMonitoring-ignore.txt" können geplante Aufgaben Namentlich ignoriert werden - im Muster sind die Zabbix-Aufgaben die durch Erweiterungen von mir erstellt sind schon eingetragen, es findet eine "Text in Text" Vergleich statt. Die Angeabe von "abc" würde also alle Aufgaben ignorieren welche die Zeichenfolge "abc" enthalten<br />
<br><br />
<br><br />
----<br />
<br />
==Bekannte Fehler==<br />
* Sind mehrer Instanzen des Zabbix-Agenten installiert so wird nur die Konfiguration des ersten Agenten gefunden - und Daten somit nur an diesen gesendet<br />
* '''zabbix_sender.exe''' muss im gleichen Verzeichnis wie die '''zabbix_agentd.exe''' liegen<br />
* Sind mehrere Zabbix-Server in der Agentenkonfiguration eingetragen so schlägt das Senden der Daten fehl<br />
<br><br />
<br><br />
----<br />
==Screenshots==<br />
Discovery Prototypen:<br><br />
[[Datei:Zabbix-TaskScheduler-002.png]]<br><br />
<br><br />
Beispiel aus '''''Latest Data''''':<br><br />
[[Datei:Zabbix-TaskScheduler-001.png]]<br><br />
<br><br />
<br><br />
----<br />
<br />
==Installation==<br />
* Kopiert die <code>TaskSchedulerMonitoring.exe</code> und die <code>TaskSchedulerMonitoring-ignore.txt</code> in das Verzeichnis mit eurem Zabbix-Agenten<br><br />
* Bearbeitet die <code>zabbix_agentd.win.conf</code> und ergänzt folgende Zeilen<br><br />
UserParameter=znil.TaskSchedulerMonitoring[*],"C:\Program Files\Zabbix\UserParameter\TaskSchedulerMonitoring.exe" "$1" "$2" "$3" "$4"<br />
:Den Pfad müsst Ihr natürlich anpassen<br />
<br><br />
* Startet den Dienst des Zabbix-Agenten einmal neu!<br />
* Importiert in Zabbix das Template <code>znil_Template_Windows_Task_Scheduler.xml</code><br />
* Verknüpft das Template mit eurem Host<br />
<br><br />
Und jetzt warten (Zabbix Agent einmal neu starten beschleunigt das ganze), der Intervall für die Erkennung steht auf alle 60 Minuten.<br><br />
<br><br />
<br><br />
----<br />
==von Hand Testen==<br />
Die <code>TaskSchedulerMonitoring.exe</code> könnt Ihr auch in der DOS-Box von Hand testen:<br><br />
C:\Program Files\Zabbix\UserParameter>TaskSchedulerMonitoring.exe /?<br />
+------------------------------------------------------------------------------<br />
| TaskSchedulderMonitoring.exe - Version 1.0.0.44<br />
+------------------------------------------------------------------------------<br />
| 2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net<br />
+------------------------------------------------------------------------------<br />
<br />
Hilfsprogramm für Zabbix als UserParameter um die Aufgabenplanung / Geplante<br />
Tasks zu überwachen<br />
---------------------------------------------------------------------------<br />
<br />
Aufruf:<br />
<br />
TaskSchedulerMonitoring.exe <Option> <Parameter><br />
<br />
Optionen:<br />
---------<br />
/? oder -? : Diese Hilfe Anzeigen<br />
<br />
discovertasks : Erzeugt eine Liste im JSON Format über alle Aufgaben.<br />
Übernommen werden nur alle Tasks die im Stammordner \ stehen,<br />
also direkt unterhalb von 'Aufgabenplanungsbibliothek' bzw.<br />
'Task Scheduler Library'<br />
<br />
query : Benötigt als Parameter den Namen des geplanten Task.<br />
Sendet das Ergebnis direkt an den Zabbix-Server bzw. Proxy<br />
über die Zabbix_Sender.exe. Es wird die Konfiguration des<br />
installierten Zabbix Agenten ausgelesen und der dort<br />
hinterlegte Server als Ziel genommen. Die Zabbix_Sender.exe<br />
muss im gleichen Pfad liegen wie die zabbix_agentd.exe<br />
Gibt die Laufzeit des Programmes in Sekunden zurück.<br />
<br />
+------------------------------------------------------------------------------<br />
| TaskSchedulderMonitoring.exe ist FREEWARE!<br />
| Kopieren, weitergeben ausdrücklich erlaubt!<br />
| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:<br />
| http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring<br />
+------------------------------------------------------------------------------<br />
Wenn Ihr <br />
TaskSchedulerMonitoring.exe discovertasks<br />
angebt seht Ihr den JSON-String für Zabbix:<br><br />
{"data":[<br />
{<br />
"{#TSMTASKNAME}":"AD_Report_User_no_logon_since_60_days"<br />
},<br />
{<br />
"{#TSMTASKNAME}":"Set_IP-Phone_Numbers"<br />
}<br />
]<br />
}<br />
Die Task-Namen werden abgewandelt - alle Leerzeichen werden in _ umgewandelt, alle Sonderzeichen eleminiert. Wenn Ihr das '''''query''''' testen wollte müsst Ihr den Tasknamen so angeben wir er beim discovery ausgegeben wird. Achtung - Er sendet direkt an den Zabbix-Server! Es muss also vorher ein Discovery gelaufen sein.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Anpassung Trigger==<br />
Es gibt einen Trigger-Prototypen der Auslöst wenn das letzte Ergebnis des Tasks<br />
* NICHT 0<br />
* NICHT 267009<br />
* NICHT 1<br />
ist.<br><br />
<br><br />
[[Datei:Zabbix-TaskScheduler-003.png]]<br><br />
<br><br />
0 steht in der Regel für "Erfolgreich" - dieser Wert ist der Exit-Code des Programms oder Scripts das gestartet wurde<br />
1 steht - meistens - für "läuft gerade"<br />
267009 gibt bei mir einer der Server aus wenn der Task gerade läuft, deshalb habe ich diesen auch hier eingefügt<br />
<br><br />
Ihr müsst andere Status-Meldungen also ggf. ergänzen gemäß des Beispiel-Schemas.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Quellcode==<br />
Auch dieses Programm habe ich wieder mit AutoIt geschrieben:<br><br />
<source lang="AutoIt"><br />
#NoTrayIcon<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_UseUpx=y<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Monitor scheduled Tasks<br />
#AutoIt3Wrapper_Res_Fileversion=1.0.0.45<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2015 Bernhard Linz<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring<br />
#AutoIt3Wrapper_Res_Field=See You|znil.net<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
Opt('MustDeclareVars', 1)<br />
#Region ;************ Includes ************<br />
#Include <Array.au3><br />
#include <Constants.au3><br />
#include <Date.au3><br />
#EndRegion ;************ Includes ************<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # TaskSchedulerMonitoring.exe --> Tool for Check BackupJobs in Zabbix #<br />
; # 2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # #<br />
; # Latest Version of this Program and Template in German: #<br />
; # http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
Global $s_schtasksexe<br />
<br />
Global $s_temp1, $s_temp2<br />
Global $a_temp1, $a_temp2<br />
Global $a_DateTemp<br />
Global $a_RuntimeTemp<br />
<br />
Global $a_ScheduledTasks[1][8] ; [0][0] = Anzahl der Tasks<br />
; [x][1] = Name des Task "original"<br />
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix unr zur Übergabe an dieses Programm hier<br />
; [x][3] = Last Result<br />
; [x][4] = Last Run Time<br />
; [x][5] = Next Run Time<br />
; [x][6] = Run As User<br />
; [x][7] = Task To Run<br />
<br />
Global $s_Task2IgnoreFile = @ScriptDir & "\TaskSchedulerMonitoring-ignore.txt"<br />
Global $h_Task2IgnoreFile<br />
Global $a_Task2Ignore[1] = [ 0 ]<br />
Global $b_IgnoreTask = False<br />
<br />
Global $s_CleanTaskName<br />
Global $s_OriginalTaskName<br />
Global $s_QueryTaskName<br />
Global $i_ThisTask<br />
<br />
Global $s_JSONOutput<br />
Global $s_RunCommand<br />
<br />
Global $iStartTime<br />
Global $iRunTime<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s__Header = _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| TaskSchedulderMonitoring.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| 2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s__HilfeText = _<br />
"Hilfsprogramm für Zabbix als UserParameter um die Aufgabenplanung / Geplante" & @CRLF & _<br />
"Tasks zu überwachen" & @CRLF & _<br />
"---------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF & _<br />
"Aufruf: " & @CRLF & _<br />
@CRLF & _<br />
@ScriptName & " <Option> <Parameter>" & @CRLF & _<br />
@CRLF & _<br />
"Optionen:" & @CRLF & _<br />
"---------" & @CRLF & _<br />
" /? oder -? : Diese Hilfe Anzeigen" & @CRLF & _<br />
@CRLF & _<br />
" discovertasks : Erzeugt eine Liste im JSON Format über alle Aufgaben." & @CRLF & _<br />
" Übernommen werden nur alle Tasks die im Stammordner \ stehen," & @CRLF & _<br />
" also direkt unterhalb von 'Aufgabenplanungsbibliothek' bzw." & @CRLF & _<br />
" 'Task Scheduler Library'" & @CRLF & _<br />
@CRLF & _<br />
" query : Benötigt als Parameter den Namen des geplanten Task." & @CRLF & _<br />
" Sendet das Ergebnis direkt an den Zabbix-Server bzw. Proxy" & @CRLF & _<br />
" über die Zabbix_Sender.exe. Es wird die Konfiguration des" & @CRLF & _<br />
" installierten Zabbix Agenten ausgelesen und der dort" & @CRLF & _<br />
" hinterlegte Server als Ziel genommen. Die Zabbix_Sender.exe" & @CRLF & _<br />
" muss im gleichen Pfad liegen wie die zabbix_agentd.exe" & @CRLF & _<br />
" Gibt die Laufzeit des Programmes in Sekunden zurück." & @CRLF & _<br />
@CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| TaskSchedulderMonitoring.exe ist FREEWARE!" & @CRLF & _<br />
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _<br />
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _<br />
"| http://znil.net/index.php?title=Zabbix:TaskSchedulerMonitoring" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF<br />
<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ########################################<br />
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ########################################<br />
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ########################################<br />
; ## ## ## #### ## ## ## ## ## ## #### ## ## ########################################<br />
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ########################################<br />
; ## ## ## ## #### ## ## ## ## ## ## #### ## ########################################<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ########################################<br />
; ## ####### ## ## ###### ## #### ####### ## ## ###### ########################################<br />
; ########################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
Func _schtasks($s_schtasksparameter)<br />
Local $s_RunCommand<br />
Local $outputschtasks<br />
Local $errorsschtasks<br />
Local $hschtasks<br />
Local $ischtasksmaxWaitTime = 20000<br />
Local $ischtasksmaxWaitTimeSTART<br />
Local $s_tdoutReadFEHLER<br />
; build the Command for run<br />
;ConsoleWrite($s_schtasksexe & " " & $s_schtasksparameter & @CRLF)<br />
$s_RunCommand = $s_schtasksexe & " " & $s_schtasksparameter<br />
; Start the timer for max wait time<br />
$ischtasksmaxWaitTimeSTART = TimerInit()<br />
; run the Command<br />
$hschtasks = Run($s_RunCommand, @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)<br />
;get the output<br />
Do<br />
Sleep(5)<br />
; get the output<br />
$outputschtasks = $outputschtasks & StdoutRead($hschtasks)<br />
; get the errors<br />
$errorsschtasks = $errorsschtasks & StderrRead($hschtasks)<br />
; did we have an error while reading?<br />
$s_tdoutReadFEHLER = @error<br />
If $s_tdoutReadFEHLER <> "" Then<br />
; No error, go on<br />
If $outputschtasks = "" Then<br />
; but also no output, let us take a 2. try<br />
$outputschtasks = $outputschtasks & StdoutRead($hschtasks)<br />
If $outputschtasks = "" Then<br />
; anymore no output, oh oh<br />
If $s_tdoutReadFEHLER <> "" Then<br />
; but we have an error message<br />
ConsoleWriteError($errorsschtasks & @CRLF)<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
Until $s_tdoutReadFEHLER Or TimerDiff($ischtasksmaxWaitTimeSTART) > $ischtasksmaxWaitTime<br />
;MsgBox(0,"",$outputschtasks)<br />
Return $outputschtasks<br />
EndFunc ;<== End _schtasks()<br />
<br />
; ###################################################################################<br />
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird<br />
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt<br />
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins<br />
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM<br />
<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
;Return $text<br />
EndFunc ;==>_ANSI2OEM<br />
<br />
; ###################################################################################<br />
; Hilfsroutine die den Hilfetext ausgibt<br />
Func _HilfeAusgeben()<br />
ConsoleWrite(_ANSI2OEM($s__Header))<br />
ConsoleWrite(_ANSI2OEM($s__HilfeText))<br />
EndFunc ;==>_HilfeAusgeben<br />
<br />
; ##################################################################################################################<br />
; ######## ### ######## ######## #### ## ## ###### ####### ## ## ########<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ##<br />
; ## ## ## ######## ######## ## ### ## ## ## ## ## ## ######<br />
; ## ######### ## ## ## ## ## ## ## ## ## ## ## #### ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ##<br />
; ####### ######## ## ## ######## ######## #### ## ## ####### ###### ####### ## ## ##<br />
; ##################################################################################################################<br />
Global $sZabbix_agentd_exe<br />
Global $sZabbix_agentd_conf<br />
Global $sZabbix_sender_exe<br />
Global $sZabbix_Hostname<br />
Global $sZabbix_Server<br />
Global $iZabbix_Server_Port<br />
Global $sZabbix_String2Send<br />
<br />
Func _Zabbix_conf()<br />
Dim $sRegTMP<br />
Dim $iRegTMP = 0<br />
Dim $iLoop<br />
Dim $aRegTMP<br />
Dim $aZabbix_config<br />
Dim $sZabbix_config_file<br />
Dim $a2temp<br />
While 1<br />
$iRegTMP = $iRegTMP + 1<br />
$sRegTMP = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services", $iRegTMP)<br />
If @error Then<br />
ExitLoop<br />
EndIf<br />
$sRegTMP = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\" & $sRegTMP, "ImagePath")<br />
If @error = 0 Then<br />
If StringInStr($sRegTMP, "zabbix_agentd.exe") > 0 Then<br />
;ConsoleWrite("Gefunden: " & $sRegTMP & @CRLF)<br />
$aRegTMP = StringSplit($sRegTMP, '"')<br />
;_ArrayDisplay($aRegTMP)<br />
$sZabbix_agentd_exe = $aRegTMP[2]<br />
$sZabbix_sender_exe = StringReplace($sZabbix_agentd_exe, "zabbix_agentd.exe", "zabbix_sender.exe")<br />
$sZabbix_config_file = $aRegTMP[4]<br />
$sZabbix_agentd_conf = $sZabbix_config_file<br />
$aZabbix_config = FileReadToArray($sZabbix_config_file)<br />
If @error = 0 Then<br />
For $iLoop = 0 To (UBound($aZabbix_config) -1)<br />
If StringLeft($aZabbix_config[$iLoop], StringLen("ServerActive=")) = "ServerActive=" Then<br />
$sZabbix_Server = StringReplace($aZabbix_config[$iLoop], "ServerActive=", "")<br />
$sZabbix_Server = StringReplace($sZabbix_Server, " ", "")<br />
$a2temp = StringSplit($sZabbix_Server, ":")<br />
If $a2temp[0] = 1 Then<br />
$iZabbix_Server_Port = 10051<br />
Else<br />
$sZabbix_Server = $a2temp[1]<br />
$iZabbix_Server_Port = $a2temp[2]<br />
EndIf<br />
EndIf<br />
If StringLeft($aZabbix_config[$iLoop], StringLen("Hostname=")) = "Hostname=" Then<br />
$sZabbix_Hostname = StringReplace($aZabbix_config[$iLoop], "Hostname=", "")<br />
$sZabbix_Hostname = StringReplace($sZabbix_Hostname, " ", "")<br />
EndIf<br />
Next<br />
Else<br />
ConsoleWrite("File not found: " & $sZabbix_config_file & @CRLF)<br />
Exit 1<br />
EndIf<br />
If FileExists($sZabbix_sender_exe) = 0 Then<br />
ConsoleWrite("zabbix_sender.exe not found at: " & $sZabbix_sender_exe & @CRLF)<br />
Exit 1<br />
EndIf<br />
EndIf<br />
EndIf<br />
WEnd<br />
;~ ConsoleWrite("zabbix_agentd.exe: " & '"' & $sZabbix_agentd_exe & '"' & @CRLF)<br />
;~ ConsoleWrite("zabbix_sender.exe: " & '"' & $sZabbix_sender_exe & '"' & @CRLF)<br />
;~ ConsoleWrite("Hostname used in Zabbix: " & '"' & $sZabbix_Hostname & '"' & @CRLF)<br />
;~ ConsoleWrite("IP(:Port) Zabbix Server: " & '"' & $sZabbix_Server & '"' & @CRLF)<br />
EndFunc<br />
<br />
; #############################################################################################################################################################################################################################################################################<br />
; ###### ######## ## ## ######## ## ## ### ## ## ## ######## ## ## #### ######## ## ## ######## ### ######## ######## #### ## ## ###### ######## ## ## ######## ######## ########<br />
; ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ##<br />
; ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ##<br />
; ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ## ## ## ######### ## ## ## ######## ######## ## ### ###### ###### ## ## ## ## ## ###### ########<br />
; ## ## ## #### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ##<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ##<br />
; ####### ###### ######## ## ## ######## ### ## ## ######## ####### ######## ####### ### ### #### ## ## ## ####### ######## ## ## ######## ######## #### ## ## ####### ###### ######## ## ## ######## ######## ## ##<br />
; #############################################################################################################################################################################################################################################################################<br />
<br />
Func _SendValue_with_Zabbix_Sender($sItemName, $sItemValue)<br />
;ConsoleWrite('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"' & @CRLF)<br />
RunWait('"' & $sZabbix_sender_exe & '"' & " -c " & '"' & $sZabbix_agentd_conf & '"' & " -k " & '"' & $sItemName & '" -o "' & $sItemValue & '"', "", @SW_HIDE, $RUN_CREATE_NEW_CONSOLE)<br />
EndFunc<br />
<br />
<br />
; ####################################################################################################################<br />
; ###### ######## ######## ### ## ## ######## ### ###### ## ## ######<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ## #### ###### ## ## ## ## ## ## ## ## ###### ##### ######<br />
; ## ## ## ## ######### ## ## ## ######### ## ## ## ##<br />
; ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##<br />
; ####### ###### ######## ## ## ## ######## ######## ## ## ## ###### ## ## ######<br />
; ####################################################################################################################<br />
Func _GetAllScheduledTasks()<br />
Dim $s_lastTaskName = ""<br />
; Get all scheduled Jobs<br />
$s_temp1 = _schtasks("/query /FO CSV")<br />
;ConsoleWrite($s_temp1 & @CRLF)<br />
$s_temp1 = StringReplace($s_temp1, @CRLF, "@CRLF")<br />
$a_temp1 = StringSplit($s_temp1, "@CRLF", 1)<br />
; _ArrayDisplay($a_temp1)<br />
For $i = 2 To $a_temp1[0] ; Skip the first line with headlines<br />
;_ArrayDisplay($a_temp1)<br />
$b_IgnoreTask = False<br />
;~ If StringLeft($a_temp1[$i], StringLen('"\Microsoft')) = '"\Microsoft' Then<br />
;~ ExitLoop<br />
;~ EndIf<br />
If StringLeft($a_temp1[$i], 2) = '"\' Then<br />
$a_temp2 = StringSplit($a_temp1[$i],",")<br />
If $a_temp2[0] > 1 Then<br />
$s_OriginalTaskName = StringTrimLeft(StringReplace($a_temp2[1], '"', "") ,1)<br />
$s_CleanTaskName = StringTrimLeft(StringReplace($a_temp2[1], " ", "_") ,1)<br />
$s_CleanTaskName = StringRegExpReplace($s_CleanTaskName, "[^\w\.@-]", "")<br />
If $a_Task2Ignore[0] > 0 Then<br />
For $j = 1 To $a_Task2Ignore[0]<br />
;MsgBox(0,"","$s_OriginalTaskName" & @CRLF & $a_Task2Ignore[$j] & @CRLF & @CRLF & $s_CleanTaskName & @CRLF & $a_Task2Ignore[$j])<br />
If StringInStr($s_OriginalTaskName, $a_Task2Ignore[$j]) > 0 Then<br />
$b_IgnoreTask = True<br />
EndIf<br />
If StringInStr($s_CleanTaskName, $a_Task2Ignore[$j]) > 0 Then<br />
$b_IgnoreTask = True<br />
EndIf<br />
Next<br />
EndIf<br />
If $s_lastTaskName = $s_OriginalTaskName Then<br />
$b_IgnoreTask = True<br />
EndIf<br />
If $b_IgnoreTask = False Then<br />
$a_ScheduledTasks[0][0] = $a_ScheduledTasks[0][0] + 1<br />
ReDim $a_ScheduledTasks[ $a_ScheduledTasks[0][0] + 1 ][8]<br />
; [x][1] = Name des Task "original"<br />
$a_ScheduledTasks[ $a_ScheduledTasks[0][0] ][1] = $s_OriginalTaskName<br />
$s_lastTaskName = $s_OriginalTaskName<br />
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix und zur Übergabe an dieses Programm hier<br />
$a_ScheduledTasks[ $a_ScheduledTasks[0][0] ][2] = $s_CleanTaskName<br />
EndIf<br />
EndIf<br />
Else<br />
; Er beginnt in Zeile 2 nach geplanten Aufgaben zu suchen. Diese Fangen mit "\ an.<br />
; Gibt es keine Aufgaben wird da wieder eine Kopfzeile mit den Feldbezeichnungen kommen für den nächsten Abschnitt<br />
; Und damit sind wir schon hier und verlassen die Schleife<br />
ExitLoop<br />
EndIf<br />
Next<br />
EndFunc<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ####################################################################################<br />
; ## ## ### #### ## ## ####################################################################################<br />
; ### ### ## ## ## ### ## ####################################################################################<br />
; #### #### ## ## ## #### ## ####################################################################################<br />
; ## ### ## ## ## ## ## ## ## ####################################################################################<br />
; ## ## ######### ## ## #### ####################################################################################<br />
; ## ## ## ## ## ## ### ####################################################################################<br />
; ## ## ## ## #### ## ## ####################################################################################<br />
; ####################################################################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
$iStartTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc())<br />
<br />
If $CmdLine[0] > 0 Then<br />
If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Then<br />
_HilfeAusgeben()<br />
Exit 0<br />
EndIf<br />
EndIf<br />
<br />
;~ If $CmdLine[0] = 0 Then<br />
;~ _HilfeAusgeben()<br />
;~ Exit 0<br />
;~ EndIf<br />
<br />
<br />
<br />
; Ok, we need the schtasks.exe,<br />
$s_schtasksexe = @ComSpec & " /C " & @WindowsDir & "\system32\schtasks.exe"<br />
$a_ScheduledTasks[0][0] = 0<br />
$a_ScheduledTasks[0][1] = "Original Name"<br />
$a_ScheduledTasks[0][2] = "Clean Name"<br />
$a_ScheduledTasks[0][3] = "Last Result"<br />
$a_ScheduledTasks[0][4] = "Last Run Time"<br />
$a_ScheduledTasks[0][5] = "Next Run Time"<br />
$a_ScheduledTasks[0][6] = "Run As User"<br />
$a_ScheduledTasks[0][7] = "Task To Run"<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; Some of the services are irritating, just ignore them - read items from a file<br />
If FileExists($s_Task2IgnoreFile) = 1 Then<br />
$h_Task2IgnoreFile = FileOpen($s_Task2IgnoreFile, 0)<br />
While 1<br />
$s_temp1 = FileReadLine($h_Task2IgnoreFile)<br />
If @error = -1 Then<br />
ExitLoop<br />
Else<br />
If StringLen($s_temp1) > 2 Then ; at least 3 or more chars<br />
$a_Task2Ignore[0] = $a_Task2Ignore[0] + 1<br />
ReDim $a_Task2Ignore[$a_Task2Ignore[0] + 1] ;That's AutoIt - Redim an Array without data-loss<br />
$a_Task2Ignore[$a_Task2Ignore[0]] = $s_temp1<br />
EndIf<br />
EndIf<br />
WEnd<br />
EndIf<br />
<br />
;_ArrayDisplay($a_Task2Ignore)<br />
<br />
<br />
<br />
<br />
If $CmdLine[1] = "discovertasks" Then<br />
;If "discovertasks" = "discovertasks" Then<br />
_GetAllScheduledTasks()<br />
$s_JSONOutput = '{"data":[' & @CRLF<br />
For $i = 1 To $a_ScheduledTasks[0][0]<br />
$s_JSONOutput = $s_JSONOutput & " " & '{' & '@CRLF' & _<br />
" " & '"{#TSMTASKNAME}":"' & $a_ScheduledTasks[$i][2] & '"' & '@CRLF' & _<br />
" " & '},' & '@CRLF'<br />
Next<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen("," & "@CRLF")) & @CRLF & " " & ']' & @CRLF & '}'<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF)<br />
If StringLen($s_JSONOutput) < 11 Then<br />
ConsoleWrite('{"data":[]}' & @CRLF)<br />
Else<br />
ConsoleWrite(_ANSI2OEM($s_JSONOutput))<br />
EndIf<br />
Exit 0<br />
EndIf<br />
<br />
<br />
<br />
<br />
<br />
If $CmdLine[1] = "query" And $CmdLine[0] > 1 Then<br />
_GetAllScheduledTasks()<br />
$s_QueryTaskName = ""<br />
$i_ThisTask = 0<br />
If $a_ScheduledTasks[0][0] > 0 Then<br />
For $i = 1 To $a_ScheduledTasks[0][0]<br />
If $CmdLine[2] = $a_ScheduledTasks[$i][2] Then<br />
$s_QueryTaskName = $a_ScheduledTasks[$i][1]<br />
$i_ThisTask = $i<br />
EndIf<br />
Next<br />
EndIf<br />
If $s_QueryTaskName = "" Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
$s_temp1 = _schtasks("/QUERY /FO CSV /V /TN " & '"' & $s_QueryTaskName & '"')<br />
;ConsoleWrite($s_temp1 & @CRLF)<br />
$s_temp1 = StringReplace($s_temp1, @CRLF, "@CRLF")<br />
$a_temp1 = StringSplit($s_temp1, "@CRLF", 1)<br />
If $a_temp1[0] < 2 Then<br />
ConsoleWrite("ZBX_SUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
$a_temp2 = StringSplit($a_temp1[2],",")<br />
;_ArrayDisplay($a_temp2)<br />
<br />
If $a_temp2[0] > 1 Then<br />
;_ArrayDisplay($a_temp2)<br />
;Last Result<br />
$a_ScheduledTasks[$i_ThisTask][3] = StringReplace($a_temp2[7], '"', "")<br />
<br />
;Last Run Time<br />
; Mögliche Werte zum Beispiel: "18.04.2015 01:00:00" oder "04/14/2015 01:00:00" oder "n/a"' oder "Nicht zutreffend"<br />
If StringRegExp($a_temp2[6], '\d+') = 1 Then ; String enthält mindestens eine Zahl<br />
If StringInStr($a_temp2[6], "/") > 0 Then<br />
$a_temp1 = StringSplit(StringReplace($a_temp2[6], '"', ""), "/ ", 0)<br />
; $a_temp1[1] = MM<br />
; $a_temp1[2] = DD<br />
; $a_temp1[3] = YYYY<br />
; $a_temp1[4] = HH:MM:SS<br />
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"<br />
$a_ScheduledTasks[$i_ThisTask][4] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[1] & "/" & $a_temp1[2] & " " & $a_temp1[4])<br />
Else<br />
$a_temp1 = StringSplit(StringReplace($a_temp2[6], '"', ""), ". ", 0)<br />
; $a_temp1[1] = DD<br />
; $a_temp1[2] = MM<br />
; $a_temp1[3] = YYYY<br />
; $a_temp1[4] = HH:MM:SS<br />
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"<br />
$a_ScheduledTasks[$i_ThisTask][4] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[2] & "/" & $a_temp1[1] & " " & $a_temp1[4])<br />
EndIf<br />
Else<br />
$a_ScheduledTasks[$i_ThisTask][4] = "ZBX_NOTSUPPORTED"<br />
EndIf<br />
<br />
; Next Run Time<br />
; Mögliche Werte zum Beispiel: "18.04.2015 01:00:00" oder "04/14/2015 01:00:00" oder "n/a"' oder "Nicht zutreffend"<br />
If StringRegExp($a_temp2[3], '\d+') = 1 Then ; String enthält mindestens eine Zahl<br />
If StringInStr($a_temp2[3], "/") > 0 Then<br />
$a_temp1 = StringSplit(StringReplace($a_temp2[3], '"', ""), "/ ", 0)<br />
; $a_temp1[1] = MM<br />
; $a_temp1[2] = DD<br />
; $a_temp1[3] = YYYY<br />
; $a_temp1[4] = HH:MM:SS<br />
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"<br />
$a_ScheduledTasks[$i_ThisTask][5] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[1] & "/" & $a_temp1[2] & " " & $a_temp1[4])<br />
Else<br />
$a_temp1 = StringSplit(StringReplace($a_temp2[3], '"', ""), ". ", 0)<br />
; $a_temp1[1] = DD<br />
; $a_temp1[2] = MM<br />
; $a_temp1[3] = YYYY<br />
; $a_temp1[4] = HH:MM:SS<br />
;Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"<br />
$a_ScheduledTasks[$i_ThisTask][5] = _DateDiff("s", "1970/01/01 00:00:00", $a_temp1[3] & "/" & $a_temp1[2] & "/" & $a_temp1[1] & " " & $a_temp1[4])<br />
EndIf<br />
Else<br />
$a_ScheduledTasks[$i_ThisTask][5] = "ZBX_NOTSUPPORTED"<br />
EndIf<br />
<br />
; Run As User<br />
$a_ScheduledTasks[$i_ThisTask][6] = StringReplace($a_temp2[8], '"', "")<br />
<br />
; Task To Run<br />
$a_ScheduledTasks[$i_ThisTask][7] = StringReplace($a_temp2[9], '"', "")<br />
Else<br />
ConsoleWrite("ZBX_SUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
_Zabbix_conf()<br />
;_ArrayDisplay($a_ScheduledTasks)<br />
;$a_ScheduledTasks[0][8] ; [0][0] = Anzahl der Tasks<br />
; [x][1] = Name des Task "original"<br />
; [x][2] = Name des Tasks "bereinigt" - ohne Leerzeichen/Sonderzeichen zur Anzeige in Zabbix und zur Übergabe an dieses Programm hier<br />
; [x][3] = Last Result<br />
; [x][4] = Last Run Time<br />
; [x][5] = Next Run Time<br />
; [x][6] = Run As User<br />
; [x][7] = Task To Run<br />
<br />
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[LastResult," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][3])<br />
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[LastRunTime," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][4])<br />
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[NextRunTime," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][5])<br />
_SendValue_with_Zabbix_Sender("znil.TaskSchedulerMonitoring[RunAsUser," & $a_ScheduledTasks[$i_ThisTask][2] & "]", $a_ScheduledTasks[$i_ThisTask][6])<br />
$iRunTime = _DateDiff("s", "1970/01/01 00:00:00", _NowCalc()) - $iStartTime<br />
ConsoleWrite($iRunTime & @CRLF)<br />
Exit 0<br />
Else<br />
ConsoleWrite("ERROR - Option 'query' without Parameter - see /? vor Help")<br />
EndIf<br />
<br />
Exit 0<br />
</source><br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_VMware_ESX_5.x_Datenspeicher_Groesse_und_Belegung_mit_AutoDiscover&diff=9520Zabbix:Template VMware ESX 5.x Datenspeicher Groesse und Belegung mit AutoDiscover2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:VMware]]<br />
[[Kategorie:Zabbix_Templates]]<br />
{{Hinweis| Wie bei so vielen ist meine Lösung hier inzwischen überflüssig, ab ESXi 6.0 funktioniert die native Funktion von Zabbix <code>vmware.hv.datastore.size</code> einwandfrei, mit vorherigen Versionen kann ich es gerade nicht testen}}<br><br />
<u>'''Changelog:'''</u><br />
* 08.05.2014: erste Version<br />
<br><br />
<br><br />
----<br />
Seit der Zabbix Version 2.2.x wird die Abfrage des vCenters und der ESX-Hosts "nativ" unterstützt - man braucht also keine externen Skripte mehr.<br><br />
<br><br />
Soweit die Theorie.<br><br />
<br><br />
Leider musste ich feststellen das die Datenspeicher zwar automatisch erkannt werden ... aber außer den Lantenzen im Anschluß keinerlei Werte / Items zur Verfügung stehen.<br><br />
Für die Überwachung war aber gerade wichtig:<br><br />
* Wie Groß ist der Datenspeicher?<br />
* Wieviel Platz ist noch frei?<br />
* Wieviel Platz ist noch frei?<br />
<br><br />
Das ganze dann bitte schön auch wieder mit AutoDiscover und möglichst Simpel.<br><br />
:[[Datei:ESXHOSTS-Datastores-011.png]]<br><br />
<br><br />
Meine Lösung hier arbeitet wie folgt:<br><br />
* externes Script <code>znil-esxhost-datastores</code> auf dem Zabbix-Server oder Zabbix-Proxy<br />
* Direkte Abfrage der ESXi-Server über SSH<br />
* IP-Adresse wird die vom Host-Objekt genommen<br />
* Benutzername und Passwort verwenden die gleichen Makro Felder wie die Original VMware-Templates<br />
* Autodiscover der Datastores<br />
* Erstellung von Items für jeden Datenspeicher<br />
* Erstellung von Triggern für jeden Datastore<br />
Und obwohl wir eine SSH Abfrage machen muss nicht mit Keys oder Schlüssel gearbeitet werden - das Skript verbindet sich auch beim ersten mal ohne Warnungen etc.<br><br />
<br><br />
<br><br />
----<br />
==SSH auf den ESXi-Server freischalten==<br />
Zunächst müssen wir den direkten SSH-Zugriff auf die ESXi-Server erlauben.<br><br />
Wenn eure Server alle die gleichen Datastores sehen würde es natürlich reichen das Template gegen einen der mehreren ESXi Server laufen zu lassen.<br><br />
<br><br />
Geht in die '''''Host und Cluster''''' Ansicht bei einem vCenter und markiert den gewünschten ESX Hosts. Seit Ihr direkt mit einem ESX Host verbunden so markiert diesen links.<br><br />
<br><br />
Geht auf den Reiter {{Key|Konfiguration}}, wählt dann im linken Bereich "'''Sciherheitsprofil'''" und dann rechts oben die "'''Eigenschaften'''":<br><br />
:[[Datei:ESXHOSTS-Datastores-001.png]]<br><br />
<br><br />
Im neuen Fenster markiert Ihr oben den "'''SSH'''" Eintrag und geht dann unten auf {{Key|Optionen}}:<br><br />
:[[Datei:ESXHOSTS-Datastores-002.png]]<br><br />
<br><br />
Wiederum öffnet sich ein neues Fenster. Zunächst klickt Ihr auf {{Key|Starten}}:<br><br />
:[[Datei:ESXHOSTS-Datastores-003.png]]<br><br />
<br><br />
Erst im Anschluss markiert Ihr den Eintrag<br />
Mit dem Host starten und beenden<br />
und dann klickt Ihr auf OK:<br><br />
:[[Datei:ESXHOSTS-Datastores-004.png]]<br><br />
<br><br />
Wenn Ihr nun vorne auf die Übersicht geht gibt es nun immer eine Warnmeldung:<br><br />
SSH für den wurde aktiviert<br />
::[[Datei:ESXHOSTS-Datastores-005.png]]<br><br />
Im Bild seht Ihr das ich die lokale Shell auch gleich auf die gleiche Weise aktiviert habe.<br><br />
<br><br />
Geht deshalb noch einmal auf {{Key|Konfiguration}} und dann auf "'''Erweiterte Einstellungen'''":<br><br />
:[[Datei:ESXHOSTS-Datastores-006.png]]<br><br />
<br><br />
Findet links den Eintrag "'''UserVars'''" und scrollt auf der rechten Seiten dann ganz nach unten:<br><br />
:[[Datei:ESXHOSTS-Datastores-007.png]]<br><br />
Setzt den Wert des Eintrages<br />
UserVars.SuppressShellWarning<br />
auf <code>1</code> und bestätigt den Dialog mit {{Key|OK}} - nach ein paar Sekunden verschwindet die Warnung wieder.<br><br />
<br><br />
<br><br />
----<br />
==Skript auf den Zabbix-Server / Zabbix-Proxy kopieren==<br />
Ladet die '''.zip''' Datei herunter und entpackt diese:<br><br />
<big><u>'''Download:</u>'''</big> [[Media:Template-VMware-ESX-5.x-Datenspeicher-Groesse-und-Belegung-mit-AutoDiscover.zip|Template-VMware-ESX-5.x-Datenspeicher-Groesse-und-Belegung-mit-AutoDiscover.zip]]<br><br />
<br><br />
Kopiert die Datei<br />
znil-esxhosts-datastores<br />
in euren <code>Externalscripts</code> Ornder, im Normalfall ist das der<br />
/usr/local/share/zabbix/externalscripts<br />
Wo genau der ist findet Ihr in eurer Zabbix-Server / Proxy Konfigurationsdatei.<br><br />
<br><br />
Macht die Datei dann noch ausführbar:<br><br />
chmod +x znil-esxhosts-datastores<br />
oder <br />
chmod +x /usr/local/share/zabbix/externalscripts/znil-esxhosts-datastores<br />
<br><br />
<br><br />
----<br />
==SSHPass installieren==<br />
Mit '''SSHPass''' ist es möglich innerhalb von Skripten eine SSH Sitzung aufzubauen ohne das eine extra Passwortabfrage erfolgt.<br><br />
Unter Ubuntu / Debian installiert ihr es wie folgt:<br><br />
apt-get install sshpass<br />
<br><br />
<br><br />
----<br />
==Test des Skriptes==<br />
Wo wir schon mal eine Bash auf unserem Zabbix-Server / Proxy offen haben testen wir die Abfrage gleich einmal:<br><br />
Wenn Ihr nicht schon da seit wechselt in das <code>externalscripts</code> Verzeichnis:<br><br />
cd /usr/local/share/zabbix/externalscripts<br />
und ruft das Script wie folgt auf<br />
./znil-esxhosts-datastores discoverdatastore 192.168.0.21 root Passw0rd<br />
Erklärung:<br />
./znil-esxhosts-datastores : Das Skript<br />
discoverdatastore : Parameter an das Skript das die Datastores gesucht werden sollen<br />
192.168.0.21 : IP-Adresse oder DNS-Name des ESX-Host<br />
root : Benutzer für die Anmeldung am ESX Host<br />
Passw0rd : Passwort des Benutzers.<br />
{{Hinweis| Das Passwort sollte keine Zeichen enthalten die auch in Bash-Skripten verwendet werden, also keine '''`´'%&/$ oder \'''}}<br><br />
Die Ausgabe sollte etwa wie folgt aussehen:<br><br />
{<br />
"data":<br />
[<br />
{<br />
"{#DATASTORENAME}":"LUN01",<br />
"{#DSNUM}":"1",<br />
"{#DSID}":"4c688fe0-ad4c1c66-dec0-1cc1def349a2<br />
4cf5fd15-6d28bf03-dc84-1cc1def3498a"<br />
},<br />
{<br />
"{#DATASTORENAME}":"LUN02",<br />
"{#DSNUM}":"2",<br />
"{#DSID}":"4cf5fd15-6d28bf03-dc84-1cc1def3498a"<br />
}<br />
]<br />
}<br />
<br><br />
<br><br />
Wenn es nur eine Ausgabe mit ein paar Klammern gibt:<br />
{<br />
}<br />
]<br />
}<br />
Dann fehlt das Programm '''''sshpass''''' -> siehe oben!<br><br />
<br><br />
<br><br />
----<br />
==Template importieren==<br />
Import das Template <br />
znil_Template_VMware_ESXi55_Datenspeicher.xml<br />
aus der .zip-Datei<br />
Danach habt Ihr ein Template mit dem Namen<br />
znil Template VMware ESXi5.x Datenspeicher<br />
im normalen Template-Ordner:<br><br />
:[[Datei:ESXHOSTS-Datastores-008.png]]<br><br />
<br><br />
<br><br />
----<br />
==Makros beim Host setzten==<br />
Damit das Template funktioniert müssen beim Host noch mindestens 2 Makros gesetzt werden - es sind die gleichen wie bei den VMware templates die Zabbix 2.2.x selbst mitbringt.<br><br />
Erstellt einen Host (oder bearbeitet einen), wir brauchen folgende Mindestangaben:<br><br />
* Die Angabe des '''Agent Interfaces''':<br><br />
:[[Datei:ESXHOSTS-Datastores-009.png]]<br><br />
:Die Portnummer ist dabei egal, lasst diese auf dem Standard<br />
* Die beiden Makros<br />
{$USERNAME}<br />
{$PASSWORD}<br />
:[[Datei:ESXHOSTS-Datastores-010.png]]<br><br />
:auf dem Reiter '''Macro''' des jeweiligen Host<br />
Benutzername und Passwort müsst Ihr natürlich euren Gegebenheiten anpassen.<br><br />
<br><br />
<br><br />
----<br />
==Template verknüpfen==<br />
Nun könnt Ihr dem Host auch das Template zuweisen - und dann heisst es warten!<br><br />
Wenn Ihr zuvor von Hand das ganze schon getestet hattet wird es auch funktionieren.<br><br />
Im Template ist eingestellt das<br><br />
* Das AutoDiscovery welches die Datenspeicher erkennt und die Items baut alle 60 Minuten gestartet wird.<br />
* Die Items werden dann alle 5 Minuten / 15 Minuten / 60 Minuten abgefragt -> je nach Item<br />
* Es gibt Trigger die Warnen bei<br />
** Unter 50 GB<br />
** Unter 40 GB<br />
** Unter 25 GB<br />
** Unter 10 GB<br />
** Unter 5 GB<br />
* Und wenn mehr als 25 VMs auf einer LUN liegen.<br />
:[[Datei:ESXHOSTS-Datastores-011.png]]<br><br />
<br><br />
<br><br />
<br><br />
----<br />
<br />
==Getestet auf folgenden vSphere Versionen==<br />
* vSphere 5.1<br />
* vSphere 5.5<br />
<br><br />
Es läuft definitiv NICHT auf ESXi 4.1 ... statt das Skript anzupassen hatte ich lieber den Server aktualisiert ...<br><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Raspberry_Pi&diff=9519Zabbix:Template Raspberry Pi2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Raspberry_Pi]]<br />
[[Kategorie:Zabbix_Templates]]<br />
Hier habe ich gezeigt wie man verschiedene Dinge über den ''''Raspberry Pi'''' über die Bash abrufen kann: [[Temperatur / Spannung etc. des Raspberry Pi selbst auslesen]]<br><br />
Das habe ich natürlich herausgesucht um es irgendwie in Zabbix zu verwerten - hier nun das Skript und Template.<br><br />
<br><br />
<br><br />
----<br />
==Vorbereitung==<br />
* Auf eurem ''''Raspberry Pi'''' ist der Zabbix Agent installiert und konfiguriert<br />
* Der Agent läuft normalerweise unter dem Benutzer ''''zabbix'''' den Ihr ebenfalls angelegt habt<br />
<br><br />
<br><br />
==Script hinterlegen==<br />
Auch wenn es nicht ganz passt - ich habe das nachfolgende Skript unter dem Namen<br />
raspberrypi.sh<br />
im Pfad<br />
/usr/local/share/zabbix/externalscripts<br />
hinterlegt:<br><br />
<source lang="bash"><br />
#!/bin/sh<br />
<br />
# Script for Monitoring a Raspberry Pi with Zabbix<br />
# 2013 Bernhard Linz<br />
# Bernhard@znil.de / http://znil.net<br />
#<br />
<br />
case "$1" in<br />
boardversion)<br />
# get the Hardware Version<br />
cat /proc/cpuinfo | grep Hardware | tr -d " " | cut -d ":" -f 2<br />
;;<br />
boardrevision)<br />
# get the Hardware Revision<br />
cat /proc/cpuinfo | grep Revision | tr -d " " | cut -d ":" -f 2<br />
;;<br />
boardserialnumber)<br />
# get the Board unique Serial Number<br />
cat /proc/cpuinfo | grep Serial | tr -d " " | cut -d ":" -f 2<br />
;;<br />
cpuvoltage)<br />
# Voltage in Volt<br />
/opt/vc/bin/vcgencmd measure_volts | tr -d "volt=" | tr -d "V"<br />
;;<br />
cpuclock)<br />
# CPU Clock Speed in Hz<br />
/opt/vc/bin/vcgencmd measure_clock arm | tr -d "frequency(45)="<br />
;;<br />
cpumem)<br />
# CPU Memory in MByte<br />
vcgencmd get_mem arm | tr -d "arm=" | tr -d "M"<br />
;;<br />
firmwareversion)<br />
# Just the naked String of the firmware Version<br />
vcgencmd version | grep version | cut -d " " -f 2<br />
;;<br />
gpumem)<br />
# Graphics memeory in MByte<br />
vcgencmd get_mem gpu | tr -d "gpu=" | tr -d "M"<br />
;;<br />
sdcardtotalsize)<br />
# Size of SD-Card in KByte<br />
df -P | grep rootfs | tr -s " " " " | cut -d " " -f 2<br />
;;<br />
sdcardused)<br />
# Used Diskspace in KByte<br />
df -P | grep rootfs | tr -s " " " " | cut -d " " -f 3<br />
;;<br />
sdcardusedpercent)<br />
# Used Diskspace in Percent<br />
df -P | grep rootfs | tr -s " " " " | cut -d " " -f 5<br />
;;<br />
sdcardfree)<br />
# free Diskspace in KByte<br />
df -P | grep rootfs | tr -s " " " " | cut -d " " -f 4<br />
;;<br />
temperature)<br />
# Temperature in 1/1000 centigrade<br />
cat /sys/class/thermal/thermal_zone*/temp<br />
;;<br />
*)<br />
echo "Usage: $N {boardversion|boardrevision|boardserialnumber|cpuvoltage|cpuclock|cpumem|firmwareversion|gpumem|sdcardtotalsize|sdcardused|sdcardusedpercent|sdcardfree|temperature}" >&2<br />
esac<br />
<br />
exit 0<br />
</source><br />
Damit Ihr es ausführen könnt noch ein<br />
chmod 755 /usr/local/share/zabbix/externalscripts/raspberrypi.sh<br />
<br><br />
Ihr könnt es dann testen - z.B. mit<br />
/usr/local/share/zabbix/externalscripts/raspberrypi.sh temperature<br />
müsste er so etwas wie <br />
54610<br />
ausspucken (= 54,51 Grad Celsius)<br><br />
<br><br />
<br><br />
----<br />
==zabbix Benutzer Gruppe hinzufügen==<br />
Leider reichen die Rechte für einen normalen Benutzer nicht um alle Angaben zu holen - umgehen lässt sich das wenn der Benutzer ''''zabbix'''' zur Gruppe ''''video'''' hinzugefügt wird:<br><br />
usermod -a -G video zabbix<br />
<br><br />
<br><br />
----<br />
==Skript in der Agenten-Konfiguration hinterlegen==<br />
Wir bearbeiten die Konfigurationsdatei des Agenten:<br />
nano /usr/local/etc/zabbix_agentd.conf<br />
ACHTUNG! die <code>zabbix_agent'''<big>d</big>'''.conf</code>!!!!<br><br />
<br><br />
und fügen folgende Zeile hinzu:<br><br />
UserParameter=raspberrypi.sh[*],/usr/local/share/zabbix/externalscripts/raspberrypi.sh $1<br />
<br><br />
<br><br />
----<br />
==Template importieren und Host zuweisen==<br />
* Ladet das Template herunter: [[Media:Znil-Template-Raspberry-Pi.zip|Znil-Template-Raspberry-Pi.zip]]<br />
* entpackt die ''''.ZIP'''' Datei<br />
* Importiert in Zabbix die ''''.XML'''' Datei<br />
* Ihr findet das Template in der Hostgruppe ''''Templates znil.net'''' unter dem Namen ''''znil Template Raspberry Pi''''<br />
<br><br />
<br><br />
Das Template ist als "Active Agent" konfiguriert und hat noch keinerlei Trigger - passt euch das an wie ihr es braucht!<br><br />
<br><br />
:[[Datei:RaspberryPi-Zabbix-Template-001.png]]<br><br />
<br><br />
<br><br />
----<br />
--[[Benutzer:BLinz|Bernhard Linz]] 20:35, 24. Nov. 2013 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Linux_Process_Discovery&diff=9518Zabbix:Template Linux Process Discovery2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
Ein Template was ich fast immer auf Windows-Servern nutze ist dieses hier: [[Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken]]<br><br />
<br><br />
Unter Windows ist es im Server-Umfeld üblich das sich die Programme selbst als Dienst installieren,<br><br />
zum Beispiel SQL Sever (egal ob Microsoft oder MySQL), Exchange, IIS oder auch der Virenscanner.<br><br />
<br><br />
Das macht die Erfassung der zu überwachenden Dienste recht einfach, mein Tool schaut einfach nach welche Dienste in Windows registriert sind und auf "Automatischer Start" stehen.<br><br />
Das sind die Dienste die in der Regel laufen sollten. Aus dieser Liste werden dann die Items gebaut - und bei denen wird Windows wieder direkt gefragt "Wie ist der Status des Dienstes XYZ?"<br><br />
<br><br />
Linux ... nun ok, das gibt es schon einmal mehrere Stellen an denen man sich Orientieren könnte.<br><br />
Die <code>/etc/rcx.d/</code> Verzeichnisse ...<br><br />
Oder bei {{Key|Upstart}} unter <code>/etc/init/</code> ...<br><br />
Oder bei {{Key|systemd}} unter <code>/lib/systemd/system/</code> ... was über <code>/etc/systemd/system/</code> überschrieben wird ...<br><br />
Oder ganz klassisch auf <code>/etc/init.d/</code> ...<br><br />
<br><br />
Jede menge Stellen also ...<br><br />
Und je nach verwendeten System müsse die Frage ob der Dienst läuft anders laufen.<br><br />
service apache2 status<br />
liefert uns ein<br />
* apache2 is running<br />
während das Startskript des Zabbix-Agenten den Parameter gar nicht kennt:<br><br />
service zabbix-agent status<br />
Usage: /etc/init.d/zabbix_agentd {start|stop|restart|force-reload}<br />
<br><br />
Also alles doof (im Moment).<br><br />
Statt eines Super-Skriptes das alle Eventualitäten abklopft und dann auch noch so kompatibel gebaut ist das es unter Debian, Ubuntu, SUSE und anderen funktioniert hatte ich nach einer einfacheren Lösung gesucht.<br><br />
<br><br />
Bei einer Suche im Internet fand ich diese Lösung hier:<br><br />
https://github.com/q1x/zabbix-templates/tree/master/process-discovery von '''''Raymond Kuiper'''''<br />
Wie der Autor dort schon schreibt: <span style="color:#FF0000">'''!!! Highly experimental, use at your own risk !!!'''</span><br><br />
So war es denn auch, die ersten Test's ohne Filter erzeugten viel zu viele Items, die Abfrage dieser war auch nur zum Teil möglich.<br><br />
Elegant an seiner Lösung fand ich aber die Einzeiler als UserParamter.<br><br />
<br><br />
Ich habe deshalb seine Arbeit als Vorlage genommen und nach meinen Bedürfnissen weiter entwickelt.<br><br />
<br><br />
<br><br />
----<br />
==Vorschau==<br />
[[Datei:Template-Linux-Process-LLD-001.png]]<br><br />
<br><br />
[[Datei:Template-Linux-Process-LLD-002.png]]<br><br />
<br><br />
<br><br />
----<br />
==Einschränkungen==<br />
Das Template basiert darauf das per dem Befehl<br><br />
/bin/ps --no-headers caux<br />
eine Liste aller Prozesse ermittelt wird.<br><br />
Diese wird dann pro Benutzer und Prozessname per LLD an den Zabbix-Server übermittelt, Dubletten werden unterdrückt.<br><br />
Je nach System und Anzahl der Prozesse kann diese Liste also sehr lang werden ... eventuell zu lang. Dann funktioniert das Discovery nicht - und damit das ganze Template nicht.<br><br />
<br><br />
Wenn es sehr viele Prozesse sind werden auch entsprechend viele Items gebaut - nämlich 4 Stück pro Prozessname und Benutzer.<br><br />
Es können als sehr schnell ein paar hundert oder tausend Items entstehen - wenn man nicht aufpasst.<br><br />
<br><br />
Auf den Systemen die ich hier zum Testen genommen habe passte dieses aber noch überall.<br><br />
Ggf. deaktiviert Ihr einzelne {{Key|Item prototypes}} bei der '''Discover Rule''' des Templates - am besten bevor Ihr das Template auf einen Host legt.<br><br />
<br><br />
Der "'''''Memory usage'''''" Wert wird über die eingebaute Funktion des Zabbix-Agenten abgefragt - und gibt eher den Wert wieder den die Applikation angefragt hat, nicht die tatsächliche Nutzung. Ich kann mit dem Wert nicht soviel anfangen und habe deshalb den prozentualen Wert hinzugenommen.<br><br />
Den "'''''CPU usage'''''" könnte man inzwischen (ab Zabbix Agent 3.0.x) auch über den Agenten statt des '''''UserParameter''''' abfragen. Ich habe aber viele Linux Server wo ich den Agenten aus den Quellen installiere - und dort ist oft noch Version 2.2 oder 2.4 im Einsatz. Deshalb dieser Weg der auch noch mit den älteren Agenten funktioniert.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Anpassung zabbix_agentd ==<br />
Das Template basiert auf einer Erweiterung des Zabbix-Agenten auf den Linux Hosts per {{Key|UserParameter}}:<br><br />
nano /usr/local/etc/zabbix_agentd.conf<br />
nano /etc/zabbix/zabbix_agentd.conf<br />
und am besten ganz an das Ende die folgenden Zeilen einfügen:<br><br />
<source lang="bash"><br />
# DG_Template Linux Process Discovery<br />
# Returns a list of monitorable processes in Zabbix LLD JSON format<br />
UserParameter=dg.ps.discovery,echo "{ \"data\":[" ; /bin/ps --no-headers caux | /usr/bin/awk '{ print " { \"{#PSUSER}\":\"" $1 "\", \"{#PSNAME}\":\"" $11 "\" },"}' | /usr/bin/sort | /usr/bin/uniq | /bin/sed -e 's/\//\\\//g' -e '$s/.$//' ; echo " ]}"<br />
# Calculates CPU usage in % over multiple process threads<br />
UserParameter=dg.proc.cpu[*],TOTALCPU=0; for PROC in `/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$3 }'`; do TOTALCPU=`echo "$TOTALCPU $PROC" | /usr/bin/awk '{print $$1 + $$2}'` ; done; echo $TOTALCPU<br />
# Calculates CPU usage in % over multiple process threads<br />
UserParameter=dg.proc.mem[*],TOTALMEM=0; for PROC in `/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$4 }'`; do TOTALMEM=`echo "$TOTALMEM $PROC" | /usr/bin/awk '{print $$1 + $$2}'` ; done; echo $TOTALMEM<br />
<br />
#<br />
</source><br />
<br><br />
Damit der Agent das übernimmt müsst Ihr diesen neu starten:<br><br />
service zabbix-agent restart<br />
/etc/init.d/zabbix-agent restart<br />
...<br />
<br><br />
<br><br />
----<br />
<br />
==Template DG_Template Linux Process Discovery==<br />
Das Template hier ist unter Zabbix 3.0.x erstellt worden.<br><br />
<br><br />
Download: [[Media:Zabbix-Template-Linux-Process-Discovery.zip|Zabbix-Template-Linux-Process-Discovery.zip]]<br />
<br><br />
Nach dem Import findet Ihr das Template unter dem Namen<br><br />
DG_Template Linux Process Discovery<br />
in den Host-Gruppen<br><br />
Templates<br />
Templates DATAGROUP<br />
Templates znil.net<br />
<br><br />
<br><br />
Das Template findet nun nicht alle Prozesse sondern nur welche die in einer Positiv-Liste aufgeführt sind.<br><br />
Um diese Liste zu ändern geht Ihr bei dem Template auf den Bereich '''Discovery rules''' und bearbeitet dort die '''Process Discovery''':<br><br />
[[Datei:Template-Linux-Process-LLD-003.png]]<br><br />
Oben klickt Ihr dann auf den Reiter '''Filters''':<br><br />
[[Datei:Template-Linux-Process-LLD-004.png]]<br><br />
Ihr könnt dort entweder den Prozessnamen angeben, dann muss links bei '''''Label Macro'''''<br />
{#PSNAME}<br />
stehen - oder den Benutzernamen unter dem Prozesse laufen, dann muss links<br />
{#PSUSER}<br />
stehen.<br><br />
Über {{Key|Remove}} entfernt Ihr einen Eintrag, unten über {{Key|Add}} könnt Ihr eine neue Zeile hinzufügen}}<br><br />
<br><br />
Man könnte natürlich auch über '''''Administration - General - Regular expressions''''' die Listen führen - aber so werden beim Export des Templates alle Filtereinstellungen mit Exportiert.<br><br />
<br><br />
Für jeden Prozess wird auch ein Trigger erstellt der auslöst wenn die Anzahl der laufenden Prozesse unter 1 sinkt.<br><br />
<br><br />
----<br />
==Fehlersuche==<br />
* Der Discovery-Prozess findet nur einmal pro Stunde statt - schaut ggf. beim Host in den '''''Discovery rules''''' nach ob diese Regel am Ende der Zeile ein rotes Symbol bekommt. Geht Ihr mit den Mauszeiger über das Symbol so bekommt Ihr eine genauere Fehlermeldung.<br />
* Die Items sind alle vom Typ '''''Zabbix agent (active)'''''. Damit das Funktioniert muss in der Konfigurationsdatei des Agenten zwingend der Parameter<br />
ServerActive=192.168.123.123<br />
:angegeben sein - natürlich dann mit der IP-Adresse eures Zabbix-Servers oder Proxys<br />
* Die Zeit für Abfragen ist in Zabbix limitiert. Als Default steht der Wert auf 3 Sekunden, alles was länger dauert wird terminiert.<br> Testet ggf. mal die LLD per<br />
zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf -t dg.ps.discovery<br />
:Falls es zu lange dauert müsst Ihr den Wert von <code>Timeout=</code> in der Konfigurationsdatei anpassen.<br><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_FRITZBox_per_Telnet&diff=9516Zabbix:Template FRITZBox per Telnet2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:FritzBox]]<br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 09.11.2013: Erste Version Template<br />
* 11.01.2014: Erweiterung Template - Dank an Tobias Wigand für seine Mail mit Abfragen<br />
* 08.02.1015: Neue Version Template für Firmware ab 6.20 - Danke an Ullrich Jans<br />
<br />
<u>'''Download:'''</u> <big>'''[[Media:Znil-AVM-FRITZBox-7390.zip|Znil-AVM-FRITZBox-7390.zip]]'''</big><br><br />
<br><br />
Die Templates findet Ihr in der Host-Group '''''Templates znil.net''''' unter den Namen<br><br />
* znil_Template_AVM_FritzBox_7390 bis V6.10<br />
* znil_Template_AVM_FritzBox_7390 ab V6.20<br />
<br><br />
{{Hinweis| Am 08.02.2014 neue Template-Version für FW >6.20 erstellt - Im Template sind nun 2 Versionen!}}<br><br />
----<br />
Mit diesem Template frage ich meine FRITZ!Box 7390 per Telnet ab.<br><br />
Das Template umfasst folgendes:<br><br />
* Verbindungschwindigkeit<br />
* Übertragungsfehler<br />
* Verbindungstatus LAN-Ports<br />
* Interner Speicher<br />
* Speicher auf USB-Geräten (nur das erste)<br />
Zusätzlich mit Update von 11.01.2014:<br><br />
* CPU-Last der letzten 5 Minuten<br />
* Anzahl der WLAN Clients 2.4GHz<br />
* Anzahl der WLAN Clients 5GHz<br />
* Download- / Uploadrate ( = OnlineMonitor)<br />
<br><br />
Ich habe nur 3 Trigger eingebaut, die restlichen müsst Ihr nach Bedarf hinzufügen:<br><br />
* ''''Information'''' wenn sich die Firmware geänderthat<br />
* ''''Warning'''' wenn die Menge der behebaren Übertragungsfehler verdächtig ansteigt<br />
* ''''Average'''' wenn die Menge der nicht behebaren Übertragungsfehlern innerhalb von 15 Minuten über 500 liegt<br />
Bei den Werten der Alarme habe ich mich an Aussagen von AVM und was Goolge so ausspuckte orientiert.<br><br />
<br><br />
Ich bin sicher das dies ganze auch mit vielen anderen FRITZ!Boxen funktioniert, nicht nur mit der 7390.<br><br />
<br><br />
<br><br />
----<br />
==Template Importieren==<br />
* Ladet das Template herunter: [[Media:Znil-AVM-FRITZBox-7390.zip|Znil-AVM-FRITZBox-7390.zip]]<br />
* entpackt die ''''.ZIP'''' Datei<br />
* Importiert in Zabbix die ''''.XML'''' Datei<br />
* Ihr findet die Templates in der Hostgruppe ''''Templates znil.net'''' unter dem Namen ''''znil_Template_AVM_FritzBox_7390 bis V6.10'''' und ''''znil_Template_AVM_FritzBox_7390 ab V6.20''''<br />
<br><br />
<br><br />
----<br />
<br />
==Host anlegen==<br />
Legt einfach einen Host mit der IP-Adresse eurer Fritzbox an - das ist schon alles.<br><br />
Siehe auch: [[FritzBox mit Zabbix überwachen HowTo mit Template]]<br><br />
<br><br />
<br><br />
----<br />
==Host-Macros setzen==<br />
Das Template benötigt 3 Macros:<br><br />
{$FRITZBOX.TELNETPORT} = Port auf dem die Box Telnet anbietet --> Standard ist 23<br />
{$FRITZBOX.USERNAME} = Benutzername zur Anmeldung<br />
{$FRITZBOX.PASSWORD} = Passwort zur Anmeldung<br />
Das Template setzt damit voraus das Ihr euch mit Benutzername und Passwort an der Box anmeldet - sihe auch hier: [[FritzBox mit Zabbix überwachen HowTo mit Template]]<br><br />
:[[Datei:ZabbixTemplate-FRITZBox-001.png]]<br />
<br><br />
<br><br />
----<br />
==Template verlinken==<br />
Verlinkt nun das Template mit dem Host - und das war es auch schon!<br><br />
<br><br />
<br><br />
----<br />
==Geduld!==<br />
Die Werte werden teilweise nur stündlich abgefragt - kann also einen Moment dauern bis alle Werte da sind:<br><br />
:[[Datei:ZabbixTemplate-FRITZBox-002.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 20:56, 8. Feb. 2015 (CET)<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_Citrix_XenDesktop&diff=9515Zabbix:Template Citrix XenDesktop2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Citrix]]<br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
Also, ich bin jetzt nicht gerade ein Citrix-Profi - aber ich hatte die Aufgabe eine Citrix-Xen Desktop Umgebung per Zabbix zu überwachen.<br><br />
Dazu habe ich dann mit den Citrix-Experten gesprochen und gefragt was denn wichtig ist.<br><br />
Heraus gekommen ist was Ihr nun hier findet.<br><br />
<br><br />
<br><br />
----<br />
==Provisioning Server==<br />
Auf den '''''Provisioning Server''''' ist wichtig das die Citrix-Dienste laufen.<br><br />
Da habe ich kein extra Template entworfen sondern empfehle euch meine Allzweckwaffe hierfür:<br><br />
: [[Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken]]<br><br />
<br><br />
Damit überwacht Ihr sowieso jeden Dienst der auf Automatisch steht und bekommt ggf. einen Alarm.<br><br />
<br><br />
<br><br />
----<br />
==Delivery Controller==<br />
Auf diesen Servern ist wchtig ob es nicht irgendwelche Desktops gibt die<br />
* eingschaltet<br />
* und NICHT registriert sind<br />
Das ganze kann man per PowerShell und der zugehörigen Citrix-Erweiterung abfragen.<br><br />
Den Aufruf dazu bauen wir in Zabbix-Agenten mit ein.<br><br />
<br><br />
Installiert also den Zabbix-Agenten auf den '''Delivery Controller'''.<br><br />
Dann tragt Ihr in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeilen<br />
UserParameter=znil.CitrixDesktopsNotRegistered,powershell asnp Citrix.* ; $iNotRegistered = 0 ; "Get-BrokerDesktop -Filter { RegistrationState -ne 'Registered' } -PowerState On | ForEach-Object { $iNotRegistered = $iNotRegistered + 1} ; Write-Output $iNotRegistered"<br />
UserParameter=znil.CitrixDesktopsRegistered,powershell asnp Citrix.* ; $iRegistered = 0 ; "Get-BrokerDesktop -RegistrationState 'Registered' -PowerState On | ForEach-Object { $iRegistered = $iRegistered + 1} ; Write-Output $iRegistered"<br />
ein.<br><br />
Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
Import die <code>.XML</code> Datei aus dem '''.zip''' Archiv zu diesem Artikel in Zabbix und verknüpft diese mit dem Host,<br><br />
alternativ legt 2 neue Items an:<br><br />
:[[Datei:Zabbix-Citrix-XenDesktop-001.png]] [[Datei:Zabbix-Citrix-XenDesktop-002.png]]<br><br />
<br><br />
<br><br />
{{Hinweis| Es kann nun sein das die Items zunächst auf "'''ZBX_NOTSUPPORTED'''" gehen - das liegt schlichtweg daran das es beim ersten mal ein wenig dauern die PowerShell Erweiterungen für Citrix zu laden. Zabbix ist dabei gnadenlos - nach spätestens 30 Sekunden wird die Abfrage abgeschossen, egal wie weit diese ist.}}<br><br />
Falls sich das Problem mit dem "'''ZBX_NOTSUPPORTED'''" nicht von selber löst (geht einfach mal 20 Minuten Kaffee trinken), loggt euch auf den Servern einmal ein, startet die PowerShell und gebt<br />
asnp Citrix.*<br />
ein. Danach könnt Ihr alles wieder beenden und schliessen - nun ist die PowerShell einmalig gestartet worden. Ich habe das auch in mein Installationsskript mit eingebaut.<br><br />
<br><br />
<br><br />
----<br />
==Template==<br />
<big><u>'''Download:</u>''' [[Media:Znil-Template-Citrix-XenDesktop-Delivery-Controller.zip]]</big><br><br />
<br><br />
Das Template heißt<br><br />
znil Template Citrix XenDesktop Delivery Controller<br />
und ist ganz normal unter '''Templates''' zu finden.<br><br />
Es beinhaltet die beiden zuvor erstellten Items und einen Trigger der Alarm schlägt wenn es 2 Prüfungen hintereinander unregistrierte Desktops gibt.<br><br />
<br><br />
:[[Datei:Zabbix-Citrix-XenDesktop-003.png]]<br><br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_BackupExec_2012_Jobs&diff=9514Zabbix:Template BackupExec 2012 Jobs2017-08-06T18:52:09Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 25.04.2014: Erste Öffentliche Version 0.0.0.40<br />
* 29.01.2015: Version 0.0.0.42 unterstützt auch BackupExec 2014<br />
* 20.02.2015: Version 0.0.0.43 kann nun auch wirklich gleichzeitig 2014 und 2012<br />
* 13.05.2015: Version 0.0.0.45 kann auch mit BackupExec 15 umgehen<br />
* 13.09.2016: Version 1.0.0.7 (BETA Version) sollte pauschal mit allen BackupExec Versionen mit PowerShell umgehen können<br />
<br><br />
<u>'''Bekannte Fehler:'''</u><br><br />
* Der Zabbix Agent wird mit SYSTEM-Rechten ausgeführt. Die Abfrage von BackupExec 2012 erfolgt über die BEMCLI, das ist die PowerShell Erweiterung zu BackupExec 2012. In der Praxis bedeutet dies, das eine PowerShell gestartet wird, diese die BackupExec Erweiterungen nachlädt und dann die eigentlichen Abfragen durchführt. Die Erweiterungen werden über PowerShell-Scripts ('''.ps1''') geladen. Und bei deren Ausführung zickt Windows gerne rum wenn diese z.B. nicht signiert sind. Beim Programmieren musste ich leider mehrmals feststellen das es hakte. Deshalb führt mein Programm bei der Abfrage ein <code>Set-ExecutionPolicy Bypass</code> aus. '''DAMIT WERDEN ALLE POWERSHELL-SCRIPTE OHNE ÜBERPRÜFUNG DER SIGNATUR AUSGEFÜHRT. DIESE EINSTELLUNG IST FÜR DEN SERVER GGF. DAUERHAFT FÜR ALLE SCRIPTE'''<br><br />
{{Hinweis| Die neue Version 0.0.0.43 funktioniert auch mit BackupExec 2014!}}<br><br />
{{Hinweis| Die BETA Version 1.0.0.7 funktioniert sollte mit jeder BackupExec Version ab 2012 funktionieren}}<br><br />
----<br />
==Download==<br />
<big>Download: '''[[Media:ZabbixTemplateBackupExec2012.zip|ZabbixTemplateBackupExec2012.zip]]'''</big> Version 0.0.0.43 mit BackupExec 2014 Unterstützung<br><br />
<big>Download BETA: '''[[Media:ZabbixTemplateBackupExecPS.zip|ZabbixTemplateBackupExecPS.zip]]'''</big> Version 1.0.0.7 mit BackupExec PS Unterstützung<br><br />
----<br />
<br />
==Vorwort==<br />
Nachdem ich so etwas für BackupExec 2010 geschrieben hatte fehlte noch das Gegenstück für BackupExec 2012. Hier gibt es keine <code>bemcmd.exe</code> sondern die <code>BEMCLI</code> wird genutzt.<br><br />
Dabei handelt es sich um eine PowerShell Erweiterung.<br><br />
Die aktuelle Version sollte mit BackupExec 2014 und BackupExec 15 auch umgehen können.<br><br />
<br><br />
<br><br />
----<br />
==Screenshots / Bilder==<br />
[[Datei:Zabbix-BackupExec2012-001.png]]<br><br />
<br><br />
<br><br />
----<br />
==Funktionsweise==<br />
<u>'''Wie funktioniert es?'''</u><br><br />
Die <code>BackupExec2012.exe</code> wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.<br><br />
Die '''.exe''' ermittelt in der Registry den Installationspfad von BackupExec 2012 und sucht darüber den Pfad zur PowerShell-Erweiterung <code>BEMCLI</code><br><br />
Diese wird von der '''BackupExec2012.exe''' aufgerufen und kennt verschiedene Parameter:<br><br />
<br />
discoverjobs : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge<br />
die wiederkehrend geplant oder gerade aktiv sind.<br />
<br />
Die nachfolgenden Parameter erwarten als 2. Parameter die Job Id!<br />
<br />
jobstatus : Gibt den Status des letzen Backup-Auftrages zurück. <br />
Rückgabewert ist Text<br />
<br />
jobhowlongago : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des<br />
Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen<br />
das ein Auftrag nicht mehr wie geplant angelaufen ist.<br />
<br />
jobbytes : Gibt die gesamte gesicherte Datenmenge in Bytes zurück<br />
<br />
jobruntime : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück<br />
<br />
jobPercentComplete : In Prozent wieviel gesichert wurde, 0 bis 100 möglich<br />
<br />
jobErrorCode : Gibt den letzten Fehlercode zurück (scheinbar immer 0)<br />
<br />
jobErrorCategory : Ist bei einem Fehler nicht 0, mögliche Werte noch unbekannt<br />
<br />
<br />
Damit könnt Ihr das ganze zuvor einmal auf der Kommandozeile / DOS-Box testen.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Template==<br />
<!--Zunächst müsst Ihr unter<br />
Administration -> General -> Value mapping<br />
Das folgende, neue Value mapping anlegen:<br><br />
:[[Datei:Zabbix-BackupExec2010-003.png]]<br><br />
Name: BackupExec 2010<br />
Value: 1 Abgebrochen<br />
3 Erfolgreich (mit Ausnahmen)<br />
6 Fehlgeschlagen<br />
19 Erfolgreich<br />
--><br />
Im Zip-Archiv findet Ihr neben der <code>BackupExec2012.exe</code> auch das Template in Deutsch.<br><br />
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe ''''Templates znil.net'''' mit den Namen<br />
znil Template BackupExec 2012 Auftragsueberwachung ACTIVE AGENT<br />
Also nur eine Active Agent Version - paasiv müsstet ihr eben selbst daraus bauen bei Bedarf<br><br />
Darin sind NUR die Items - keine Trigger - die müsst ihr euch selbst anlegen. Als Hilfe dafür habe ich z.B. die Rückgabewerte gebaut wie lange der letzte Start her ist. Damit lässt sich indirekt erkennen wenn z.B,. ein Job hängt (wenn er z.B. mehr als 25h nicht neu gestartet wurde) etc.<br><br />
<br><br />
<br />
==Rückgabewerte "letzter Status"==<br />
Folgende Rückgabewerte sind bei "letzter Status" möglich:<br><br />
Unknown<br />
Canceled<br />
Completed<br />
SucceededWithExceptions<br />
OnHold<br />
Error<br />
Missed<br />
Recovered<br />
Resumed<br />
Succeeded<br />
ThresholdAbort<br />
Dispatched<br />
DispatchFailed<br />
InvalidSchedule<br />
InvalidTimeWindow<br />
NotInTimeWindow<br />
Queued<br />
Disabled<br />
Active<br />
Ready<br />
Scheduled<br />
Superseded<br />
ToBeScheduled<br />
Linked<br />
RuleBlocked<br />
In der Praxis einige wie "Queued" oder "Scheduled" eher nicht da meine Funktion den letzten Rückgabewert des letzten Auftrages/Jobs zurück liefert, nicht zukünftiger oder gerade laufender Aufträge.<br><br />
<br><br />
<br><br />
----<br />
==Download==<br />
<big>Download: '''[[Media:ZabbixTemplateBackupExec2012.zip|ZabbixTemplateBackupExec2012.zip]]'''</big> Version 0.0.0.45<br><br />
<br><br />
<br><br />
----<br />
<br />
==Installation==<br />
<u>'''Zur Installation müsst Ihr folgendes tun:'''</u><br><br />
* Kopiert die <code>BackupExec2012.exe</code> in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.<br />
C:\Program Files\Zabbix<br />
* Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeile<br />
UserParameter=znil.BackupExec2012[*],"C:\Program Files\Zabbix\BackupExec2012.exe" $1 "$2"<br />
ein - Pfad natürlich ggf. anpassen<br><br />
* Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
*Import eine der <code>.XML</code> Dateien in Zabbix und verknüpft diese mit dem Host.<br />
* Warten! Alle 3600 Sekunden = 1 Stunde wird die Abfrage gestartet.<br><br />
* Da erst die Aufträge gefunden werden und dann daurch die Items angelegt werden dauert es eine Weile bis der Agent davon weis.<br><br />
* Als Beschleunigung: Nachdem Ihr in Zabbix die Items sehen könnt startet den AGenten auf dem Server noch einmal neu. Wen Ihr noch einen Proxy dazwischen habt müsst ihr den Dienst auf diesen auch einmal neu starten ... oder einfach abwarten!<br><br />
<br><br />
<br><br />
----<br />
<br />
==Quellcode==<br />
Hier noch für Interessierte der Quellcode der <code>BackupExec2012.exe</code>:<br><br />
<source lang="AutoIt"><br />
#NoTrayIcon<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_Outfile=BackupExec2014.exe<br />
#AutoIt3Wrapper_UseUpx=y<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates<br />
#AutoIt3Wrapper_Res_Fileversion=0.0.0.46<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2014 Bernhard Linz<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_BackupExec_2014_Jobs<br />
#AutoIt3Wrapper_Res_Field=See You|znil.net<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
Opt('MustDeclareVars', 1)<br />
#Region ;************ Includes ************<br />
#Include <Array.au3><br />
#include <Constants.au3><br />
#include <Date.au3><br />
#EndRegion ;************ Includes ************<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # backupexec2014.exe --> Tool for Check BackupJobs in Zabbix #<br />
; # 2014 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # Idea and Original at Zabbix Wiki #<br />
; # #<br />
; # Latest Version of this Program and Template in German: #<br />
; # http://znil.net/index.php?title=Zabbix:Template_BackupExec_2014_Jobs #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
; find the 'BEMCLI.exe' - take a look at Registry of Host<br />
Dim $SoftwareBasePaths[9] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _<br />
"HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _<br />
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _<br />
"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _<br />
"HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _<br />
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _<br />
"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _<br />
"HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _<br />
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0"]<br />
Global $bemcli<br />
Dim $aparameter[4]<br />
;$aparameter[0] = "Get-BEJob -JobType Backup -Status Scheduled,Active | select-object -property *" ; get a List of scheduled and active jobs<br />
$aparameter[0] = "Get-BEJob -JobType Backup,Duplicate -Status Scheduled,Active,Linked | select-object -property *" ; get a List of scheduled and active jobs<br />
$aparameter[1] = "Get-BEJob -JobType Duplicate -Status Linked | select-object -property *" ; get a list of Duplicate Jobs<br />
$aparameter[2] = '-o21 -e -j"Name of Job"' ; get last Exit-Code of a specific job by Name<br />
$aparameter[3] = 'Get-BEJob -Id {ID of Job} | Get-BEJobHistory -FromLastJobRun | select-object -property *' ; get last Exit-Code of a specific job by ID<br />
<br />
Dim $stemp<br />
Dim $atemp<br />
Dim $aatemp<br />
Dim $aDateTemp<br />
Dim $aRuntimeTemp<br />
Dim $aBackupJobs_byName[1] = [ 0 ]<br />
Dim $aBackupJobs_byID[1] = [ 0 ]<br />
Dim $aBackupJobs_Selection[1] = [ 0 ]<br />
<br />
Dim $s_JSONOutput<br />
Dim $sRunCommand<br />
Dim $sJobStatus<br />
Dim $iJobStatus<br />
Dim $iJobhowlongago<br />
Dim $iJobBytes<br />
Dim $iJobRuntime<br />
Dim $iJobPercentComplete<br />
Dim $iJobErrorCode<br />
<br />
; Ok, we need the BEMCLI Extension for PowerShell, just find the BackupExec Installation Folder<br />
; we take 3 try - depends of we are a 32 or 64 bit exe and if we run on a 32 or 64 bit system<br />
$bemcli = RegRead($SoftwareBasePaths[0], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[1], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[2], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[3], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[4], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[5], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[6], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[7], "InstallLocation")<br />
If $bemcli = "" Then<br />
$bemcli = RegRead($SoftwareBasePaths[8], "InstallLocation")<br />
If $bemcli = "" Then<br />
ConsoleWriteError("Error, no installed BackupExec 2012/2014 found" & @CRLF)<br />
Exit 1<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
$bemcli = "Import-Module '" & $bemcli & "Modules\BEMCLI\BEMCLI'"<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ########################################<br />
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ########################################<br />
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ########################################<br />
; ## ## ## #### ## ## ## ## ## ## #### ## ## ########################################<br />
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ########################################<br />
; ## ## ## ## #### ## ## ## ## ## ## #### ## ########################################<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ########################################<br />
; ## ####### ## ## ###### ## #### ####### ## ## ###### ########################################<br />
; ########################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
Func _BEMCLI($sbemparameter)<br />
Local $sRunCommand<br />
Local $outputBEMCLI<br />
Local $errorsBEMCLI<br />
Local $hBEMCLI<br />
Local $iBEMCLImaxWaitTime = 20000<br />
Local $iBEMCLImaxWaitTimeSTART<br />
Local $stdoutReadFEHLER<br />
; build the Command for run<br />
$sRunCommand = $bemcli & " ; " & $sbemparameter<br />
; Start the timer for max wait time<br />
$iBEMCLImaxWaitTimeSTART = TimerInit()<br />
; run the Command<br />
;ConsoleWrite('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"' & @CRLF)<br />
$hBEMCLI = Run('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)<br />
StdinWrite($hBEMCLI, @CRLF)<br />
StdinWrite($hBEMCLI)<br />
;get the output<br />
Do<br />
;Sleep(5)<br />
; get the output<br />
$outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI)<br />
; get the errors<br />
$errorsBEMCLI = $errorsBEMCLI & StderrRead($hBEMCLI)<br />
; did we have an error while reading?<br />
$stdoutReadFEHLER = @error<br />
If $stdoutReadFEHLER <> "" Then<br />
; No error, go on<br />
If $outputBEMCLI = "" Then<br />
; but also no output, let us take a 2. try<br />
$outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI)<br />
If $outputBEMCLI = "" Then<br />
; anymore no output, oh oh<br />
If $stdoutReadFEHLER <> "" Then<br />
; but we have an error message<br />
Return $errorsBEMCLI<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
Until $stdoutReadFEHLER Or TimerDiff($iBEMCLImaxWaitTimeSTART) > $iBEMCLImaxWaitTime<br />
;MsgBox(0,"",$outputBEMCLI)<br />
Return $outputBEMCLI<br />
EndFunc ;<== End _BEMCLI()<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ####################################################################################<br />
; ## ## ### #### ## ## ####################################################################################<br />
; ### ### ## ## ## ### ## ####################################################################################<br />
; #### #### ## ## ## #### ## ####################################################################################<br />
; ## ### ## ## ## ## ## ## ## ####################################################################################<br />
; ## ## ######### ## ## #### ####################################################################################<br />
; ## ## ## ## ## ## ### ####################################################################################<br />
; ## ## ## ## #### ## ## ####################################################################################<br />
; ####################################################################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then<br />
Dim $s_JSONOutput<br />
; Get all scheduled and active Jobs<br />
$stemp = _BEMCLI($aparameter[0])<br />
<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("Id")) = "Id" Then<br />
$aatemp = StringSplit($atemp[$i],' : ', 1)<br />
_ArrayAdd($aBackupJobs_byID, $aatemp[$aatemp[0]])<br />
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1<br />
EndIf<br />
If StringLeft($atemp[$i],StringLen("Name")) = "Name" Then<br />
$aatemp = StringSplit($atemp[$i],' : ', 1)<br />
_ArrayAdd($aBackupJobs_byName, $aatemp[$aatemp[0]])<br />
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1<br />
EndIf<br />
If StringLeft($atemp[$i],StringLen("SelectionSummary")) = "SelectionSummary" Then<br />
$aatemp = StringSplit($atemp[$i],' : ', 1)<br />
_ArrayAdd($aBackupJobs_Selection, $aatemp[$aatemp[0]])<br />
$aBackupJobs_Selection[0] = $aBackupJobs_Selection[0] + 1<br />
EndIf<br />
Next<br />
$s_JSONOutput = '{"data":['<br />
For $i = 1 To $aBackupJobs_byName[0]<br />
$s_JSONOutput = $s_JSONOutput & @CRLF<br />
$s_JSONOutput = $s_JSONOutput & " " & '{' & @CRLF<br />
$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & @CRLF<br />
$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '",' & @CRLF<br />
;$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & $aBackupJobs_Selection[$i] & '"' & @CRLF<br />
$s_JSONOutput = $s_JSONOutput & " " & '"{#BACKUPEXECSELECTION}":"' & "---" & '"' & @CRLF<br />
$s_JSONOutput = $s_JSONOutput & " " & '},'<br />
Next<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, 1) & @CRLF & ']}'<br />
ConsoleWrite($s_JSONOutput & @CRLF)<br />
EndIf<br />
<br />
If $CmdLine[0] = 2 Then<br />
If $CmdLine[1] = "jobstatus" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$sJobStatus = $aatemp[$aatemp[0]]<br />
ConsoleWrite($sJobStatus & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobhowlongago" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$stemp = $aatemp[$aatemp[0]]<br />
$aDateTemp = StringSplit($stemp, " .")<br />
; [1] = Tag<br />
; [2] = Monat<br />
; [3] = Jahr<br />
; [4] = Uhrzeit als hh:mm:ss<br />
$iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)<br />
ConsoleWrite($iJobhowlongago & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobbytes" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$stemp = $aatemp[$aatemp[0]]<br />
$iJobBytes = Int($stemp)<br />
ConsoleWrite($iJobBytes & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobruntime" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$stemp = $aatemp[$aatemp[0]]<br />
$aRuntimeTemp = StringSplit($stemp,":")<br />
; [1] = Stunden<br />
; [2] = Minuten<br />
; [3] = Sekunden<br />
$iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600)<br />
ConsoleWrite($iJobRuntime & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobPercentComplete" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$iJobPercentComplete = $aatemp[$aatemp[0]]<br />
If $iJobPercentComplete = -1 Then<br />
$iJobPercentComplete = 0<br />
EndIf<br />
ConsoleWrite($iJobPercentComplete & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobErrorCode" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$iJobErrorCode = $aatemp[$aatemp[0]]<br />
ConsoleWrite($iJobErrorCode & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobErrorCategory" Then<br />
$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then<br />
$aatemp = StringSplit($atemp[$i],' : ',1)<br />
$iJobErrorCode = $aatemp[$aatemp[0]]<br />
ConsoleWrite($iJobErrorCode & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
EndIf<br />
<br />
Exit 0<br />
</source><br />
<br><br />
<br><br />
----<br />
<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs&diff=9513Zabbix:Template BackupExec 2010 Jobs2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
<u>'''Changelog:'''</u><br><br />
* 01.04.2014: Erste Öffentliche Version<br />
<br><br />
<u>'''Bekannte Fehler:'''</u><br><br />
* Wenn ein Job "Nicht eingehalten" wurde gibt mein Tool ein "ZBX_NOTSUPPORTED" zurück - weil BackupExec auch nur ein '''-1''' zurück gemeldet hat - was bedeutet das es dieses Auftrag nicht gibt. Der Auftrag wird beim AutoDiscovery weiterhin gefunden - aber die Items gehen alle auf '''grau''' bis ein Auftrag wieder einen anderen Fehlergrund hat. Ich suche noch wie ich in Fall von "Nicht eingehalten" an die Auftragsdaten kommen ...<br />
<br><br />
----<br />
==Download==<br />
<big>Download: '''[[Media:ZabbixTemplateBackupExec2010.zip|ZabbixTemplateBackupExec2010.zip]]'''</big> Version 1.0.0.73<br><br />
<big>Template für Zabbix 3.0.x: '''[[Media:BackupExec2010_Template_Zabbix3.0.0.zip|BackupExec2010_Template_Zabbix3.0.0.zip]]'''</big><br><br />
----<br />
<br />
==Vorwort==<br />
Da wir alles mit Zabbix Überwachen wollten wir auch das vielfach eingesetzte BackupExec 2010 überwachen. Die Dienste waren schon mal mit der automatischen Diensteerkennung abgedeckt (siehe [[Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken]]), nun fehlten noch die Aufträge.<br><br />
<br><br />
Als Grundlage für dieses Template nahm ich die <code>bemcmd.exe</code> die wohl seit mindestens BackupExec 12.5 immer mit dabei ist. Mein Tool prüft aber auf den Installationspfad von BackupExec 2010 in der Registry, für ältere Versionen müsste man diese Prüfung anpassen.<br> <br />
<br><br />
<br><br />
----<br />
<br />
==Screenshots / Bilder==<br />
[[Datei:Zabbix-BackupExec2010-001.png]]<br><br />
<br><br />
[[Datei:Zabbix-BackupExec2010-002.png]]<br><br />
<br><br />
<br><br />
----<br />
==Funktionsweise==<br />
<u>'''Wie funktioniert es?'''</u><br><br />
Die <code>backupexec2010.exe</code> wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.<br><br />
Die '''.exe''' ermittelt in der Registry den Installationspfad von BackupExec 2010 und sucht darüber die <code>bemcmd.exe</code><br><br />
Diese wird von der '''backupexec2010.exe''' aufgerufen und kennt verschiedene Parameter:<br><br />
/? oder -? : Hilfe Anzeigen<br />
<br />
discoverjobs : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge<br />
die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix<br />
Template für das Auto-Discovery genutzt. Zurück gegeben werden<br />
der Auftragsname und die eindeutige Job-ID (in { }).<br />
Des weiteren werden alle Aufträge die an einen anderen Auftrag<br />
angehängts sind (Job State 23) und alle Aufträge die von einem<br />
anderen Job abhängig sind auf grund von Richtlinien (Job State 25)<br />
erkannt und an das Template übergeben.<br />
<br />
Die nachfolgenden Parameter erwarten als 2. Parameter die Job Id!<br />
<br />
jobstatus : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre<br />
nicht ein aktuell laufender Backup-Auftrag.<br />
Bekannte Rückgabewerte für Trigger sind:<br />
1 : Abgebrochen<br />
3 : Erfolgreich (mit Ausnahmen)<br />
6 : Fehlgeschlagen<br />
19 : Erfolgreich<br />
<br />
jobhowlongago : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des<br />
Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen<br />
das ein Auftrag nicht mehr wie geplant angelaufen ist.<br />
<br />
jobbytes : Gibt die gesamte gesicherte Datenmenge in Bytes zurück<br />
<br />
jobruntime : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück<br />
<br />
jobdirectorys : Gibt die Anzahl der gesicherten Verzeichnisse zurück<br />
<br />
jobfiles : Gibt die Anzahl der gesicherten Dateien zurück<br />
<br />
jobskipped : Gibt die Anzahl der übersprungenden Dateien zurück<br />
<br />
jobcorrupt : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück<br />
<br />
jobinuse : Gibt die Anzahl von Dateien die in Benutzung waren und nicht<br />
gesichert werden konnten zurück<br />
Damit könnt Ihr das ganze zuvor einmal auf der Kommandozeile / DOS-Box testen.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Template==<br />
Zunächst müsst Ihr unter<br />
Administration -> General -> Value mapping<br />
Das folgende, neue Value mapping anlegen:<br><br />
:[[Datei:Zabbix-BackupExec2010-003.png]]<br><br />
Name: BackupExec 2010<br />
Value: 1 Abgebrochen<br />
3 Erfolgreich (mit Ausnahmen)<br />
6 Fehlgeschlagen<br />
19 Erfolgreich<br />
Im Zip-Archiv findet Ihr neben der <code>backupexec2010.exe</code> auch das Template in Deutsch.<br><br />
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe ''''Templates znil.net'''' mit den Namen<br />
znil Template BackupExec 2010 Auftragsueberwachung ACTIVE AGENT<br />
Also nur eine Active Agent Version - paasiv müsstet ihr eben selbst daraus bauen bei Bedarf<br><br />
Darin sind NUR die Items - keine Trigger - die müsst ihr euch selbst anlegen. Als Hilfe dafür habe ich z.B. die Rückgabewerte gebaut wie lange der letzte Start her ist. Damit lässt sich indirekt erkennen wenn z.B,. ein Job hängt (wenn er z.B. mehr als 25h nicht neu gestartet wurde) etc.<br><br />
<br><br />
----<br />
<big>Download: '''[[Media:ZabbixTemplateBackupExec2010.zip|ZabbixTemplateBackupExec2010.zip]]'''</big> Version 1.0.0.73<br><br />
<big>Template für Zabbix 3.0.x: '''[[Media:BackupExec2010_Template_Zabbix3.0.0.zip|BackupExec2010_Template_Zabbix3.0.0.zip]]'''</big><br><br />
<br><br />
<br><br />
----<br />
<br />
==Installation==<br />
<u>'''Zur Installation müsst Ihr folgendes tun:'''</u><br><br />
* Kopiert die <code>backupexec2010.exe</code> in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.<br />
C:\Program Files\Zabbix<br />
* Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die <code>zabbix_agentd.win.conf</code> die Zeile<br />
UserParameter=znil.BackupExec2010[*],"C:\Program Files\Zabbix\backupexec2010.exe" $1 "$2"<br />
ein - Pfad natürlich ggf. anpassen<br><br />
* Startet des Zabbix Agenten Dienst neu<br />
net stop "zabbix agent"<br />
net start "zabbix agent"<br />
*Import eine der <code>.XML</code> Dateien in Zabbix und verknüpft diese mit dem Host.<br />
* Warten! Alle 3600 Sekunden = 1 Stunde wird die Abfrage gestartet.<br><br />
* Da erst die Aufträge gefunden werden und dann daurch die Items angelegt werden dauert es eine Weile bis der Agent davon weis.<br><br />
* Als Beschleunigung: Nachdem Ihr in Zabbix die Items sehen könnt startet den AGenten auf dem Server noch einmal neu. Wen Ihr noch einen Proxy dazwishen habt müsst ihr den Dienst auf diesen auch einmal neu starten ... oder einfach abwarten!<br><br />
<br><br />
<br><br />
----<br />
==Quellcode==<br />
Hier noch für Interessierte der Quellcode der <code>backupexec2010.exe</code>:<br><br />
<source lang="AutoIt"><br />
#NoTrayIcon<br />
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
#AutoIt3Wrapper_Icon=Icon256-32.ico<br />
#AutoIt3Wrapper_Outfile=BackupExec2010.exe<br />
#AutoIt3Wrapper_Change2CUI=y<br />
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates<br />
#AutoIt3Wrapper_Res_Fileversion=1.0.0.74<br />
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y<br />
#AutoIt3Wrapper_Res_LegalCopyright=2013 Bernhard Linz<br />
#AutoIt3Wrapper_Res_SaveSource=y<br />
#AutoIt3Wrapper_Res_Language=1031<br />
#AutoIt3Wrapper_Res_Field=Website|http://znil.net<br />
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs<br />
#AutoIt3Wrapper_Res_Field=See You|znil.net<br />
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****<br />
Opt('MustDeclareVars', 1)<br />
#Region ;************ Includes ************<br />
#Include <Array.au3><br />
#include <Constants.au3><br />
#include <Date.au3><br />
#EndRegion ;************ Includes ************<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; # backupexec2010.exe --> Tool for Check BackupJobs in Zabbix #<br />
; # 2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #<br />
; # Idea and Original at Zabbix Wiki #<br />
; # #<br />
; # Latest Version of this Program and Template in German: #<br />
; # http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs #<br />
; # #<br />
; # ________ .__ __. __ __ .__ __. _______ .___________. #<br />
; # | / | \ | | | | | | | \ | | | ____|| | #<br />
; # `---/ / | \| | | | | | | \| | | |__ `---| |----` #<br />
; # / / | . ` | | | | | | . ` | | __| | | #<br />
; # / /----.| |\ | | | | `----.__| |\ | | |____ | | #<br />
; # /________||__| \__| |__| |_______(__)__| \__| |_______| |__| #<br />
; # #<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
; find the 'bemcmd.exe' - take a look at Registry of Host<br />
Dim $SoftwareBasePaths[3] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _<br />
"HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _<br />
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0"]<br />
Global $bemcmdexe<br />
Dim $aparameter[6]<br />
$aparameter[0] = "-o23 -j -s18 -i" ; get a List of scheduled jobs<br />
$aparameter[1] = "-o23 -j -s16" ; get a list of current running jobs<br />
$aparameter[2] = '-o21 -e -j"Name of Job"' ; get last Exit-Code of a specific job by Name<br />
$aparameter[3] = '-o21 -e -i{ID of Job}' ; get last Exit-Code of a specific job by ID<br />
$aparameter[4] = "-o23 -j -s23 -i" ; get a List of jobs wich are linked to a master job<br />
$aparameter[5] = "-o23 -j -s25 -i" ; get a List of jobs wich dependant for an policy job<br />
<br />
<br />
Dim $stemp<br />
Dim $atemp<br />
Dim $aDateTemp<br />
Dim $aRuntimeTemp<br />
Dim $aBackupJobs_byName[1] = [ 0 ]<br />
Dim $aBackupJobs_byID[1] = [ 0 ]<br />
<br />
Dim $s_JSONOutput<br />
Dim $sRunCommand<br />
Dim $sJobStatus<br />
Dim $iJobStatus<br />
Dim $iJobhowlongago<br />
Dim $iJobBytes<br />
Dim $iJobRuntime<br />
Dim $iJobDirectorys<br />
Dim $iJobFiles<br />
Dim $iJobSkipped<br />
Dim $iJobCorrupt<br />
Dim $iJobInUse<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s_Header = _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| BackupExec2010.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF<br />
<br />
; 10 20 30 40 50 60 70 80<br />
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890<br />
Dim $s_HilfeText = _<br />
"Hilfsprogramm für Zabbix als UserParameter um Backup-Aufträge zu überwachen" & @CRLF & _<br />
"Getestet und entwickelt mit backupExec 2010 R3, wird aber auch mit vielen" & @CRLF & _<br />
"älteren Versionen funktionieren - solange es eine bemcmd.exe im Programm-" & @CRLF & _<br />
"Verzeichnis gibt." & @CRLF & _<br />
"---------------------------------------------------------------------------" & @CRLF & _<br />
@CRLF & _<br />
"Aufruf: " & @CRLF & _<br />
@CRLF & _<br />
@ScriptName & " <Option> <Parameter>" & @CRLF & _<br />
@CRLF & _<br />
"Optionen:" & @CRLF & _<br />
"---------" & @CRLF & _<br />
" /? oder -? : Diese Hilfe Anzeigen" & @CRLF & _<br />
@CRLF & _<br />
" discoverjobs : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge" & @CRLF & _<br />
" die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix" & @CRLF & _<br />
" Template für das Auto-Discovery genutzt. Zurück gegeben werden" & @CRLF & _<br />
" der Auftragsname und die eindeutige Job-ID (in { })." & @CRLF & _<br />
" Des weiteren werden alle Aufträge die an einen anderen Auftrag" & @CRLF & _<br />
" angehängts sind (Job State 23) und alle Aufträge die von einem" & @CRLF & _<br />
" anderen Job abhängig sind auf grund von Richtlinien (Jon State 25)" & @CRLF & _<br />
" erkannt und an das Template übergeben." & @CRLF & _<br />
@CRLF & _<br />
" jobstatus : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre" & @CRLF & _<br />
" nicht ein aktuell laufender Backup-Auftrag." & @CRLF & _<br />
" Bekannte Rückgabewerte für Trigger sind:" & @CRLF & _<br />
" 1 : Abgebrochen" & @CRLF & _<br />
" 3 : Erfolgreich (mit Ausnahmen)" & @CRLF & _<br />
" 6 : Fehlgeschlagen" & @CRLF & _<br />
" 19 : Erfolgreich" & @CRLF & _<br />
@CRLF & _<br />
" jobhowlongago : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des" & @CRLF & _<br />
" Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen" & @CRLF & _<br />
" das ein Auftrag nicht mehr wie geplant angelaufen ist." & @CRLF & _<br />
@CRLF & _<br />
" jobbytes : Gibt die gesamte gesicherte Datenmenge in Bytes zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobruntime : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobdirectorys : Gibt die Anzahl der gesicherten Verzeichnisse zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobfiles : Gibt die Anzahl der gesicherten Dateien zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobskipped : Gibt die Anzahl der übersprungenden Dateien zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobcorrupt : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück" & @CRLF & _<br />
@CRLF & _<br />
" jobinuse : Gibt die Anzahl von Dateien die in Benutzung waren und nicht" & @CRLF & _<br />
" gesichert werden konnten zurück" & @CRLF & _<br />
@CRLF & _<br />
"HINWEIS: Alle Rückgabewerte sind zum letzten beendeten Backup-Auftrag, nicht zu aktuell" & @CRLF & _<br />
" laufenden Aufträgen. Durch 'jobhowlongago' und 'jobruntime' kann aber erkannt" & @CRLF & _<br />
" wenn ein Job hängt - z.B. wenn der letzte Start des täglichen Backup mehr als" & @CRLF & _<br />
" 25h zurück liegt" & @CRLF & _<br />
@CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF & _<br />
"| BackupExec2010.exe ist FREEWARE!" & @CRLF & _<br />
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _<br />
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _<br />
"| http://http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs" & @CRLF & _<br />
"+------------------------------------------------------------------------------" & @CRLF<br />
<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ########################################<br />
; ######## ## ## ## ## ###### ######## #### ####### ## ## ###### ########################################<br />
; ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ########################################<br />
; ## ## ## #### ## ## ## ## ## ## #### ## ## ########################################<br />
; ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ########################################<br />
; ## ## ## ## #### ## ## ## ## ## ## #### ## ########################################<br />
; ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ########################################<br />
; ## ####### ## ## ###### ## #### ####### ## ## ###### ########################################<br />
; ########################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
Func _bemcmd($sbemparameter)<br />
Local $sRunCommand<br />
Local $outputBEMCMD<br />
Local $errorsBEMCMD<br />
Local $hBEMCMD<br />
Local $iBEMCMDmaxWaitTime = 20000<br />
Local $iBEMCMDmaxWaitTimeSTART<br />
Local $stdoutReadFEHLER<br />
; build the Command for run<br />
$sRunCommand = $bemcmdexe & " " & $sbemparameter<br />
; Start the timer for max wait time<br />
$iBEMCMDmaxWaitTimeSTART = TimerInit()<br />
; run the Command<br />
$hBEMCMD = Run($sRunCommand, "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)<br />
;get the output<br />
Do<br />
Sleep(5)<br />
; get the output<br />
$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)<br />
; get the errors<br />
$errorsBEMCMD = $errorsBEMCMD & StderrRead($hBEMCMD)<br />
; did we have an error while reading?<br />
$stdoutReadFEHLER = @error<br />
If $stdoutReadFEHLER <> "" Then<br />
; No error, go on<br />
If $outputBEMCMD = "" Then<br />
; but also no output, let us take a 2. try<br />
$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)<br />
If $outputBEMCMD = "" Then<br />
; anymore no output, oh oh<br />
If $stdoutReadFEHLER <> "" Then<br />
; but we have an error message<br />
ConsoleWriteError($errorsBEMCMD & @CRLF)<br />
EndIf<br />
EndIf<br />
EndIf<br />
EndIf<br />
Until $stdoutReadFEHLER Or TimerDiff($iBEMCMDmaxWaitTimeSTART) > $iBEMCMDmaxWaitTime<br />
;MsgBox(0,"",$outputBEMCMD)<br />
Return $outputBEMCMD<br />
EndFunc ;<== End _bemcmd()<br />
<br />
; ###################################################################################<br />
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird<br />
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt<br />
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins<br />
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM<br />
<br />
Func _ANSI2OEM($text)<br />
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')<br />
Return $text[2]<br />
;Return $text<br />
EndFunc ;==>_ANSI2OEM<br />
<br />
; ###################################################################################<br />
; Hilfsroutine die den Hilfetext ausgibt<br />
Func _HilfeAusgeben()<br />
ConsoleWrite(_ANSI2OEM($s_Header))<br />
ConsoleWrite(_ANSI2OEM($s_HilfeText))<br />
EndFunc ;==>_HilfeAusgeben<br />
<br />
<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
; ####################################################################################<br />
; ## ## ### #### ## ## ####################################################################################<br />
; ### ### ## ## ## ### ## ####################################################################################<br />
; #### #### ## ## ## #### ## ####################################################################################<br />
; ## ### ## ## ## ## ## ## ## ####################################################################################<br />
; ## ## ######### ## ## #### ####################################################################################<br />
; ## ## ## ## ## ## ### ####################################################################################<br />
; ## ## ## ## #### ## ## ####################################################################################<br />
; ####################################################################################<br />
; ##########################################################################################################################<br />
; ##########################################################################################################################<br />
<br />
<br />
If $CmdLine[0] > 0 Then<br />
If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Then<br />
_HilfeAusgeben()<br />
Exit 0<br />
EndIf<br />
EndIf<br />
<br />
<br />
; Ok, we need the bemcmd.exe, just find the BackupExec Installation Folder<br />
; we take 3 try - depends of we are a 32 or 64 bit exe and if we run on a 32 or 64 bit system<br />
$bemcmdexe = RegRead($SoftwareBasePaths[0], "InstallLocation")<br />
If $bemcmdexe = "" Then<br />
$bemcmdexe = RegRead($SoftwareBasePaths[1], "InstallLocation")<br />
If $bemcmdexe = "" Then<br />
$bemcmdexe = RegRead($SoftwareBasePaths[2], "InstallLocation")<br />
If $bemcmdexe = "" Then<br />
ConsoleWriteError("Error, no installed BackupExec 2010 found" & @CRLF)<br />
Exit 1<br />
EndIf<br />
EndIf<br />
EndIf<br />
$bemcmdexe = $bemcmdexe & "bemcmd.exe"<br />
<br />
<br />
If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then<br />
Dim $s_JSONOutput<br />
; Get all scheduled Jobs<br />
$stemp = _bemcmd($aparameter[0])<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then<br />
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))<br />
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1<br />
EndIf<br />
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then<br />
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))<br />
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1<br />
EndIf<br />
Next<br />
; Get all linked Jobs<br />
$stemp = _bemcmd($aparameter[4])<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then<br />
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))<br />
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1<br />
EndIf<br />
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then<br />
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))<br />
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1<br />
EndIf<br />
Next<br />
; Get all dependant policy jobs<br />
$stemp = _bemcmd($aparameter[5])<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then<br />
_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))<br />
$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1<br />
EndIf<br />
If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then<br />
_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))<br />
$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1<br />
EndIf<br />
Next<br />
<br />
$s_JSONOutput = '{"data":[' & @CRLF<br />
For $i = 1 To $aBackupJobs_byName[0]<br />
$s_JSONOutput = $s_JSONOutput & " " & '{' & '@CRLF' & _<br />
" " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & '@CRLF' & _<br />
" " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '"' & '@CRLF' & _<br />
" " & '},' & '@CRLF'<br />
Next<br />
$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen("," & "@CRLF")) & @CRLF & " " & ']' & @CRLF & '}'<br />
$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF)<br />
ConsoleWrite($s_JSONOutput & @CRLF)<br />
EndIf<br />
<br />
;MsgBox(0,"",$CmdLineRaw & @CRLF & $CmdLine[0] & @CRLF & $CmdLine[1] & @CRLF & $CmdLine[2])<br />
<br />
If $CmdLine[0] = 2 Then<br />
If $CmdLine[1] = "jobstatus" Then<br />
;MsgBox(0, "", "jobstatus von: " & $CmdLine[2])<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("JOB STATUS: ")) = "JOB STATUS: " Then<br />
$sJobStatus = StringReplace($atemp[$i], "JOB STATUS: ", "")<br />
$iJobStatus = StringRegExpReplace($sJobStatus, "[^0-9]*","")<br />
ConsoleWrite($iJobStatus & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobhowlongago" Then<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("START TIME: ")) = "START TIME: " Then<br />
$stemp = StringRegExpReplace($atemp[$i], "START TIME:\s*", "")<br />
<br />
$aDateTemp = StringSplit($stemp, " /")<br />
; [1] = Monat<br />
; [2] = Tag<br />
; [3] = Jahr<br />
; [4] = Uhrzeit als hh:mm:ss<br />
;_ArrayDisplay($aDateTemp)<br />
$iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[2] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)<br />
;MsgBox(0,"", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[0] & " " & $aDateTemp[4] & @CRLF & @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)<br />
ConsoleWrite($iJobhowlongago & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobbytes" Then<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("BYTES PROCESSED:")) = "BYTES PROCESSED:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "BYTES PROCESSED:\s*", "")<br />
$iJobBytes = StringReplace($stemp, ",", "")<br />
ConsoleWrite($iJobBytes & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobruntime" Then<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("ELAPSED TIME:")) = "ELAPSED TIME:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "ELAPSED TIME:\s*", "")<br />
$aRuntimeTemp = StringSplit($stemp,":")<br />
; [1] = Stunden<br />
; [2] = Minuten<br />
; [3] = Sekunden<br />
<br />
$iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600)<br />
<br />
ConsoleWrite($iJobRuntime & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobdirectorys" Then<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("DIRECTORIES PROCESSED:")) = "DIRECTORIES PROCESSED:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "DIRECTORIES PROCESSED:\s*", "")<br />
$iJobDirectorys = StringReplace($stemp, " ", "")<br />
ConsoleWrite($iJobDirectorys & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobfiles" Then<br />
; Get all scheduled Jobs<br />
;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
<br />
;_ArrayDisplay($atemp)<br />
<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("FILES PROCESSED:")) = "FILES PROCESSED:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "FILES PROCESSED:\s*", "")<br />
$iJobFiles = StringReplace($stemp, " ", "")<br />
ConsoleWrite($iJobFiles & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobskipped" Then<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("FILES SKIPPED:")) = "FILES SKIPPED:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "FILES SKIPPED:\s*", "")<br />
$iJobSkipped = StringReplace($stemp, " ", "")<br />
ConsoleWrite($iJobSkipped & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobcorrupt" Then<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("FILES CORRUPT:")) = "FILES CORRUPT:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "FILES CORRUPT:\s*", "")<br />
$iJobCorrupt = StringReplace($stemp, " ", "")<br />
ConsoleWrite($iJobCorrupt & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
If $CmdLine[1] = "jobinuse" Then<br />
$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))<br />
$atemp = StringSplit($stemp, @CRLF)<br />
For $i = 1 To $atemp[0]<br />
If StringLeft($atemp[$i],StringLen("FILES IN-USE:")) = "FILES IN-USE:" Then<br />
$stemp = StringRegExpReplace($atemp[$i], "FILES IN-USE:\s*", "")<br />
$iJobInUse = StringReplace($stemp, " ", "")<br />
ConsoleWrite($iJobInUse & @CRLF)<br />
Exit 0<br />
EndIf<br />
If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then<br />
ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)<br />
Exit 0<br />
EndIf<br />
Next<br />
EndIf<br />
<br />
EndIf<br />
Exit 0</source><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 11:03, 1. Apr. 2014 (CEST)<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Dienste&diff=9512Zabbix:Template BackupExec 2010 Dienste2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:BackupExec]]<br />
[[Kategorie:Zabbix]]<br />
[[Kategorie:Zabbix_Templates]]<br />
{{Hinweis| Das Template ist nun eigentlich überflüssig - nehmt lieber das hier: [[Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken]]}}<br><br />
Download: <big>'''[[Media:Znil-Template-BackupExec-2010.zip|Znil-Template-BackupExec-2010.zip]]'''</big><br><br />
<br><br />
----<br />
Diese Template nutze ich um bei BackupExec 2010 die laufenden Dienste zu überwachen.<br><br />
Es berücksichtigt<br />
* BackupExec Server Dienste<br />
* BackupExec Agenten Dienste<br />
* BackupExec Desktop und Laptop Option Dienste<br />
* BackupExec Deduplication Option Dinste<br />
Was Ihr nicht braucht schaltet halt ab oder löscht es wieder:<br><br />
<br><br />
Es muss auf dem zu überwachenden Host der Zabbix-Agent installiert sein!<br><br />
Ansonsten müsst Ihr nur den Host mit dem Template verbinden und das war es schon.<br><br />
<br><br />
Download: <big>'''[[Media:Znil-Template-BackupExec-2010.zip|Znil-Template-BackupExec-2010.zip]]'''</big><br><br />
<br><br />
nach dem Import findet Ihr 4 neue Templates in der Hostgruppe "'''Templates znil.net'''":<br />
znil Template BackupExec 2010 Agent Dienste<br />
znil Template BackupExec 2010 Agent Dienste ACTIVE AGENT<br />
znil Template BackupExec 2010 Server Dienste<br />
znil Template BackupExec 2010 Server Dienste ACTIVE AGENT<br />
Die mit ''''Server'''' im Namen sind für den BackupExec-Server selbst,<br><br />
die mit ''''Agent'''' im Namen für Hosts auf denen der BackupExec Agent installiert ist.<br><br />
<br><br />
Die ''''ACTIVE AGENT'''' Varianten sind die wo der Zabbix-Agent die Daten pusht - der Agent muss entsprechend konfiguriert sein.<br><br />
<br><br />
<br><br />
:[[Datei:ZabbixTemplate-BackupExec2010-001.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 20:45, 9. Nov. 2013 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=YubiKey_Slots_-_wie_greife_ich_auf_Slot_1_oder_2_zu%3F&diff=9510YubiKey Slots - wie greife ich auf Slot 1 oder 2 zu?2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:YubiKey]]<br />
Wenn in beiden Slots Funktionen programmiert sind für die man die Sensorfläche des YubiKeys berühren muss, so geht es wie folgt:<br><br />
* kurze Berührung = Funktion Slot 1<br />
* lange Berührung = Funktion Slot 2<br />
<br><br />
So kann man in Slot 1 z.B. die OTP Funktion nutzen und in Slot 2 ein statisches Passwort setzen.<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 19:44, 27. Okt. 2013 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=YubiKey_OTP_testen&diff=9509YubiKey OTP testen2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:YubiKey]]<br />
Unter<br />
http://demo.yubico.com/<br />
könnt Ihr die OTP Funktion eures YubiKey jederzeit gegen die WebAPI des Herstellers testen.<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 19:41, 27. Okt. 2013 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Xcache_mit_Plesk_und_die_xcache-Admin-Seite&diff=9508Xcache mit Plesk und die xcache-Admin-Seite2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Linux]]<br />
[[Kategorie:Plesk-Panel]]<br />
{{Warnung| Ja, wenn ihr diese Anleitung befolgt sieht alles fein aus ... aus xcache Sicht. Trotzdem wird der Cache ums verrecken nicht genutzt (obwohl sogar Mediawiki ihn erkennt). Da ist noch irgendetwas wegen Plesk was das verhindert. Ich nutze xcache inzwischen auch für meine ganzen Zabbix-Server - und da ist es eine ware Freude wie der Cache sich füllt}}<br><br />
<br><br />
<br><br />
XCache funktioniert mit Plesk scheinbar nicht - aber APC Cache funktioniert ganz wunderbar - nehmt doch also diesen! Anleitung hier:<br><br />
* [[APC Cache mit Plesk und die APC-Admin-Seite]]<br><br />
<br><br />
<br><br />
----<br />
Nachdem Ihr xcache wie folgt installiert habt:<br><br />
<br><br />
Einfach in einer Shell Sitzung per:<br />
apt-get install php5-xcache<br />
installieren. So wie die Meldungen sind ist es dann auch gleich aktiv. Ist es aber nicht.<br />
Bearbeitet noch die üblichen <code>php.ini</code> Dateien:<br><br />
nano /etc/php5/apache2/php.ini<br />
nano /etc/php5/cgi/php.ini<br />
nano /etc/php5/cli/php.ini<br />
und fügt ganz am Ende folgendes ein:<br><br />
[xcache]<br />
xcache.cacher = On<br />
xcache.size = 64M<br />
xcache.var_size = 64M<br />
<br />
Dann startet den Apache Webserver kurz neu:<br />
/etc/init.d/apache2 restart<br />
oder<br />
service apache2 restart<br />
<br><br />
<br><br />
könnt Ihr danach euch auch noch die Xcache-Webseite einrichten - das war etwas knifflig denn ich habe es ums verderben nicht geschafft mich an der Seite dann anzumelden ...<br><br />
Ihr braucht entweder eine Subdomain oder eine normale Domain in die es mit rein soll.<br><br />
In den Ordner dieser Domain kopiert Ihr die xcache-Dateien:<br />
cp -a /usr/share/xcache/htdocs/* /var/www/vhosts/h2321041.stratoserver.net/httpdocs/xcache<br />
oder<br />
cp -a /usr/share/xcache/htdocs/* /var/www/vhosts/h2321041.stratoserver.net/xcache.znil.net<br />
Die Dateien müssen dem Plesk-Benutzer des Webspace gehören, also noch den Besitzer anpassen:<br><br />
chown -R manfred:psaserv /var/www/vhosts/h2321041.stratoserver.net/xcache.znil.net/*<br />
nun bearbeitet Ihr die <code>xcache.ini</code>:<br />
nano /etc/php5/conf.d/xcache.ini<br />
und fügt ans Ende nur diese eine folgende Zeile ein:<br><br />
xcache.admin.enable_auth = Off<br />
Vergesst das ganze von anderen Webseiten mit einem User und dem MD5 Passwort - hat bei mir nie geklappt.<br><br />
Nun könnt Ihr im Webbrowser euch die Admin-Webseite zu xcache ansehen:<br />
http://h2321041.stratoserver.net/xcache<br />
http://xcache.znil.net<br />
:[[Datei:XCache-001.png]]<br><br />
<br><br />
<br><br />
Tja ... aber das da nun jeder ran kann ist doch blöd?<br><br />
ja ist es - aber wir sichern das einfach über die Plesk-Oberfläche ab!<br><br />
Geht in Plesk ind ie Übersicht der Domänen '''''Websites & Domains''''' und klickt die Domäne an zu welcher der xcache Ordner gehört.<br><br />
Dann geht dort auf {{key|Passwortgeschütze Verzeichnisse}}<br><br />
Dort fügt Ihr erst das Verzeichnis hinzu<br />
/xcache<br />
wenn es in einem Unterorder liegt (Aufruf mit .../xcache)<br />
oder nur <br />
/<br />
wenn diese direkt im Hauptordner der Domäne liegen.<br><br />
Wenn das Verzeichnis hinzugefügt ist, klickt es in der Liste unten an.<br><br />
Im neuen Dialog könnt Ihr nun einen Benutzer hinzufügen.<br />
Und schon erscheint beim Aufruf der xcache-Webseite ein Abfrage nach Benutzername und Passwort - und die funktioniert auch!<br><br />
<br><br />
Wenn wir nun die xcache Webseite öffnen und auf den Reiter '''''Diagnosis''''' gehen sehen wir nun noch folgende Fehlermeldung:<br><br />
:[[Datei:XCache-002.png]]<br><br />
SAPI Compatibility Error PHP_FCGI_CHILDREN<1<br />
PHP_FCGI_CHILDREN should be >= 1 and use 1 group of parent/childs model. See http://xcache.lighttpd.net/wiki/Faq<br />
Bei Plesk können wir aber die Variable <code>PHP_FCGI_CHILDREN</code> nicht setzen. Das macht man normalerweise im <code>cgi_warpper</code> - und der ist bei Plesk eine kompilierte Datei, kein Script.<br><br />
Man kann zwar die Variable trotzdem setzten - die binäre ausführbare Datei von Plesk ignoriert diese aber.<br><br />
Die Lösung ist: Wir ersetzen die binäre Datei von Plesk durch ein klassisches cgi-wrapper Skript:<br><br />
mv /var/www/cgi-bin/cgi_wrapper/cgi_wrapper /var/www/cgi-bin/cgi_wrapper/plesk-cgi_wrapper<br />
touch /var/www/cgi-bin/cgi_wrapper/cgi_wrapper<br />
chmod 755 /var/www/cgi-bin/cgi_wrapper/cgi_wrapper<br />
nano /var/www/cgi-bin/cgi_wrapper/cgi_wrapper<br />
und dann folgenden Inhalt in die Datei kopieren:<br><br />
#!/bin/sh<br />
export PHP_FCGI_CHILDREN=4<br />
export PHP_FCGI_MAX_REQUESTS=1000<br />
exec /usr/bin/php-cgi<br />
<br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 21:38, 15. Jul. 2014 (CEST)<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_laufende_Prozesse_auf_anderen_Server_oder_Rechner_anzeigen_lassen&diff=9507Windows laufende Prozesse auf anderen Server oder Rechner anzeigen lassen2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
[[Kategorie:Windows_7]]<br />
[[Kategorie:Windows_8]]<br />
[[Kategorie:Windows_Server_2000]]<br />
[[Kategorie:Windows_Server_2003]]<br />
[[Kategorie:Windows_Server_2008]]<br />
[[Kategorie:Windows_Server_2012_R2]]<br />
[[Kategorie:Windows_Vista]]<br />
[[Kategorie:Windows_XP]]<br />
Mit den folgenden Befehlen kann man sich die laufenden Prozesse auf einem anderen Server oder Rechner anzeigen lassen.<br><br />
Ich bin hierbei als ein berechtigter Benutzer (Domänen-Administrator) am Quell-Server angemeldet. Die anderen Geräte sind ebenfalls in der Domäne und die Firewall lässt die Anfragen durch.<br><br />
<br><br />
<u>'''per {{Key|tasklist}}:'''</u><br><br />
tasklist /S Rechnername /V<br />
<u>'''Beispielausgabe:'''</u><br><br />
Abbildname PID Sitzungsname Sitz.-Nr. Speichernutzung Benutzername<br />
========================= ======== ================ =========== =============== ========================================<br />
System Idle Process 0 Services 0 24 K NT-AUTORITÄT\SYSTEM<br />
System 4 Services 0 304 K Nicht zutreffend<br />
smss.exe 272 Services 0 596 K NT-AUTORITÄT\SYSTEM<br />
csrss.exe 336 Services 0 2.060 K NT-AUTORITÄT\SYSTEM<br />
csrss.exe 376 Console 1 6.740 K NT-AUTORITÄT\SYSTEM<br />
...<br />
...<br />
<br><br />
<br><br />
<u>'''per {{Key|wmic}}:'''</u><br><br />
wmic /NODE:Rechnername process get Caption, ProcessID, CommandLine<br />
<u>'''Beispielausgabe:'''</u><br><br />
Caption CommandLine Process<br />
496<br />
svchost.exe C:\Windows\system32\svchost.exe -k DcomLaunch 652<br />
svchost.exe C:\Windows\system32\svchost.exe -k RPCSS 744<br />
svchost.exe C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted 840<br />
svchost.exe C:\Windows\system32\svchost.exe -k netsvcs 884<br />
svchost.exe C:\Windows\system32\svchost.exe -k LocalService 948<br />
...<br />
...<br />
Den 2. Befehl hatte ich mir rausgesucht um den Pfad zur .exe und die Befehlszeile zu erhalten.<br><br />
Ersetzt man {{Key|CommandLine}} durch {{Key|ExecutablePath}} so bekommt man nur den Pfad zur .exe<br><br />
<br><br />
<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_USB_Stick_Partition_l%C3%B6schen_Partitionen_loeschen&diff=9506Windows USB Stick Partition löschen Partitionen loeschen2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
Ich hatte beim Aufräumen einen alten USB-Stick gefunden für den ich sogar noch eine verwendung hätte.<br><br />
Leider hatte dieser statt der laut Aufdruck versprochenen 1GB nur 500MB.<br><br />
Kurz in die Datenträgerverwaltung geschaut und die Ursache des Mysteriums gefunden:<br><br />
:[[Datei:USB-Stick-Partition-loeschen-001.png]]<br><br />
<br><br />
Tja, doch wie bekommt man den vollen Speicherlatz zurück? Datenträger vergrößern etc. funktioniert alles nicht, die Punkte sind alle ausgegraut, ebenso wie das Löschen<br><br />
<br><br />
Man muss mal eben zur Eingabeaufforderung greifen und dies Komandozeile löschen.<br><br />
Im Bild seht Ihr das es sich bei dem USB-Stick um den '''''Datenträger 5''''' handelt.<br><br />
<br><br />
Wir öffnen eine Eingabeaufforderung als Administrator ( {{Key|Win}} + {{Key|X}} und dann {{Key|A}} drücken ) und geben folgenden Befehl ein:<br><br />
diskpart<br />
Da wir wissen das es der '''''Datenträger 5 ''''' ist können wir diesen direkt auswählen:<br><br />
select disk 5<br />
Und nun löschen wir einfach alle Partitionen auf dem USB-Stick:<br />
clean<br />
<br><br />
:[[Datei:USB-Stick-Partition-loeschen-002.png]]<br><br />
<br><br />
Diskpart können wir nun mit<br />
exit <br />
beenden, in der Datenträgerverwaltung sind nun alle Partitionen gelöscht:<br><br />
:[[Datei:USB-Stick-Partition-loeschen-003.png]]<br><br />
<br><br />
Jetz kann man wieder einfach eine neue Partition anlegen.<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 18:55, 5. Jan. 2016 (CET)<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Teredo_und_ISATAP_deaktivieren&diff=9505Windows Teredo und ISATAP deaktivieren2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
Hat mich an meinem Notebook mal gerade wieder total genervt bei der Eingabe von {{Key|ipconfig /all}} (bin fast jedem Tag in einem anderem Netzwerk),<br><br />
so schaltet man es ab:<br><br />
netsh interface teredo set state disabled<br />
netsh interface isatap set state disabled<br />
<br><br />
<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Server_als_Zeitserver_NTP&diff=9504Windows Server als Zeitserver NTP2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
[[Kategorie:Windows_Server_2003]]<br />
[[Kategorie:Windows_Server_2008]]<br />
[[Kategorie:Windows_Server_2012_R2]]<br />
Hier eine Link-Sammlung zu Problemen:<br />
* Microsoft: [https://support.microsoft.com/de-de/help/816042/how-to-configure-an-authoritative-time-server-in-windows-server Konfigurieren eines autorisierenden Zeitservers in Windows Server]<br><br />
* Kurzfassung einer Lösung aus dem MS-Artikel: https://supportforums.cisco.com/discussion/11752136/cucm-installation-vmware-ntp-issue<br />
* NetApp Anforderung an Windows Server als Zeitserver: https://kb.netapp.com/support/s/article/how-to-determine-if-a-windows-domain-controller-is-a-suitable-ntp-server-for-data-ontap-8?language=en_US<br />
<br><br />
<br><br />
----<br />
<comments /></comments></div>BLinz2https://znil.net/index.php?title=Windows_Server_2012_R2_Internet_Explorer_11_IE11_startet_nicht_weisses_Fenster_Desktop_und_Published_Application&diff=9503Windows Server 2012 R2 Internet Explorer 11 IE11 startet nicht weisses Fenster Desktop und Published Application2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Abmeldeskripte]]<br />
[[Kategorie:Internet_Explorer]]<br />
[[Kategorie:Terminalserver]]<br />
[[Kategorie:Windows_Server_2012_R2]]<br />
==Problem==<br />
Beim Start des Internet Explorer 11 in einer RDP oder Citrix-Sitzung unter Windows Server 2012 R2 gibt es nur ein weißes Fenster welches sich nach ziemlich genau 20 Sekunden wieder schließt:<br><br />
:[[Datei:W2012R2-IE11-001.png|300px]]<br><br />
<br><br />
Auch die üblichen Tipps wie das Starten von<br><br />
C:\Windows\System32\ie4uinit.exe -BaseSettings<br />
ändern daran nichts.<br><br />
<br><br />
<br><br />
==Lösung Teil 1: Published Desktops==<br />
Nach langen probieren fand ich folgendende Lösung - und es ist doch die {{Key|ie4uinit.exe}} - aber anders:<br><br />
Bei der Abmeldung sollte/muss der folgende Registry-Schlüssel gelöscht werden:<br><br />
HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{89820200-ECBD-11cf-8B85-00AA005B4383}\<br />
Dieser Schlüssel steht für eine erfolgreiche Ausführung der {{Key|ie4uinit.exe}}. Wird das Programm - wie in anderen Tipps bereits vorgschlagen - nun noch einmal gestartet passiert nichts.<br><br />
===Löschen per Batch===<br />
Löschen können wir den Schlüssel zum Beispiel über eine Batchdatei mit folgenden Inhalt:<br><br />
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components\{89820200-ECBD-11cf-8B85-00AA005B4383}" /f<br />
<br><br />
===Löschen mit JumpingProfiles===<br />
Nutzen wir JumpingProfiles so tragen wir den Schlüssel einfach in die {{Key|FadeOut.dat}} zusätzlich mit ein.<br><br />
<br><br />
Wenn wir nur vollständige Desktops nutzen reicht dies nun schon. Windows startet die {{Key|ie4uinit.exe}} nun automatisch bei der nächsten Anmeldung.<br><br />
<br><br />
<br><br />
----<br />
==Lösung Teil 2: Published Applications==<br />
Hier haben wir das Problem das Windows die {{Key|ie4uinit.exe}} nicht für uns ausführt. Deshalb müssen wir den Aufruf in ein Startscript setzen das wir zum Beispiel per Gruppenrichtlinie starten:<br><br />
C:\Windows\System32\ie4uinit.exe -BaseSettings<br />
Wichtig ist das dieser Start noch vor dem Start des eigentlichen Programmes erfolgt, ggf. sollte deshalb zusätzlich die Gruppenrichtlinienoption<br />
Computer Configuration -> Policies -> Administrative Templates -> System -> Scripts -> Run logon scripts synchronously<br />
Computerkonfiguration -> Richtlinien -> Administrative Vorlagen -> System -> Skripts -> Anmeldeskripts gleichzeitig ausführen <br />
gesetzt sein.<br />
<br><br />
Den Schlüssel bei der Abmeldung aus Lösung 1 müssen wir zusätzlich löschen!<br><br />
Lösung 1 funktioniert aber auch weiterhin wenn wir die {{Key|ie4uinit.exe}} per eigenem Skript von Hand starten.<br />
<br><br />
==Starten der ie4uinit.exe per Script==<br />
Einfach folgenden Aufruf als StartScript in der Gruppenrichtlinie eintragen:<br><br />
C:\Windows\System32\ie4uinit.exe -BaseSettings<br />
<br><br />
==Starten der ie4uinit.exe per JumpingProfiles==<br />
Beispiel einer {{Key|GroupExecutable.dat}}: <br><br />
;============================================================<br />
; File: GroupExecutable.dat<br />
;============================================================<br />
;<br />
; Comment: Execute applications/scripts on logon and logoff<br />
;<br />
; Syntax: [<Profile version>:<Environment>]<br />
; #<Element><br />
; Executable = \\<Server>\<Share>\<File><br />
; Event = FIRST | LOGIN | LOGOUT | LAST<br />
; EventScope = GLOBAL | MACHINE | ENVIRONMENT | VERSION<br />
; Timer = <Timeout> (seconds)<br />
; Mode = SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | <br />
; SW_SHOWMINNOACTIVE | SW_SHOWNORMAL | <br />
; SW_HIDE<br />
;<br />
;============================================================<br />
<br />
[Header]<br />
JP version = 5.0.1.0<br />
JPManagerCore version = 5.0.1.0<br />
JPManager module version = 5.0.1.0<br />
<br />
[DEFAULT]<br />
<br />
;Zur Initialisierung des Internet Explorers 11<br />
#ie4uinit.exe<br />
Executable = C:\Windows\System32\ie4uinit.exe -BaseSettings<br />
Event = LOGIN<br />
Timer = 10<br />
Mode = SW_HIDE<br />
<br><br />
:[[Datei:W2012R2-IE11-002.png]]<br><br />
<br><br />
<br><br />
----<br />
<br />
==Kommenare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_SD-Karte_als_Festplatte_einbinden_und_Programme_auf_SD-Karte_installieren&diff=9502Windows SD-Karte als Festplatte einbinden und Programme auf SD-Karte installieren2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
Ich hab da so ein "Windows 8.1 mit Bing" Tablet erstanden ... so etwas war genau das was ich wollte.<br><br />
Meine Spar-Version hat aber nur 16GB interen Speicher .. wovon gleich fast 4GB weg waren für die Wiederherstellungsdateien, 2GB für die Auslagerungsdatei und noch ein GB für die Ruhezustandsdatei.<br><br />
Noch ein Office installliert, alle Update-Dateien und lokalen Installationsquellen wieder gelöscht ... und trotzdem "nur" noch 4GB frei.<br><br />
<br><br />
Glücklicherweise hat das Ding einen Kartenschacht für SD-Karten.<br><br />
<br><br />
Leider verweigern die meisten Programme die Installation dahin oder auch Dropbox weigert sich dort seinen Ordern für die Dateien abzulegen.<br><br />
<br><br />
Der Trick ist, die SD-Karte zusätzlich über einen Ordner auf Laufwerk C: einzubinden:<br><br />
<br><br />
[[Datei:SD-Karte-als-Festplatte-001.png]]<br><br />
Wie Ihr seht macht man das in der Datenträgerverwaltung.<br><br />
Bei mir kann ich über<br />
D:\<br />
C:\32GBSD\<br />
auf die Karte zugreifen.<br><br />
Ich probiere nun immer den <code>D:\</code> Pfad - und wenn ein Programm zickt nehme ich statt dessen den <code>C:\32GBSD\</code> Pfad.<br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Dom%C3%A4nencontroller_per_nslookup_finden&diff=9501Windows Domänencontroller per nslookup finden2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Anmeldeskripte]]<br />
[[Kategorie:Windows]]<br />
[[Kategorie:Windows_Server_2000]]<br />
[[Kategorie:Windows_Server_2003]]<br />
[[Kategorie:Windows_Server_2008]]<br />
Keinen Zugriff auf das Active Directory - aber man müsste mal wissen welche Domänencontroller es gibt?<br><br />
<br><br />
Nehmen wir doch <code>nslookup</code>!<br><br />
<br><br />
In diesem Beispiel heisst die Domäne<br />
testdomain.local<br />
der Aufruf von <code>nslookup</code> dazu wäre:<br />
nslookup -type=srv _ldap._tcp.dc._msdcs.'''testdomain.local'''<br />
<br><br />
<br><br />
In der Praxis sieht das dann z.B. so aus:<br><br />
<br />
<div style="width:643px; box-shadow:0 0 0 1px #eee inset, 0 0 15px rgba(0,0,0,0.9); background-color:#000000; border:1px solid #949494; right: 5px; padding-bottom:6px; bottom: 5px;"><br />
<h4 style="background:transparent no-repeat 6px 8px; color:#000; font:normal 16px; height:16px; overflow:hidden; padding:8px 0 6px 10px"><br />
<div style="float:left; padding-right:10px">[[Datei:Icon-CommandLine.png]]</div><div style="text-align:center; Color:#FFFFFF;">C:\Windows\system32\cmd.exe</div></h4><br />
<div style="box-shadow:0 0 0px 1px rgba(255,255,255,0.65); background-color:#000000; border:1px solid #949494; color:#C0C0C0; font-size:8px/12px; font-family:Courier New, Monospace; margin:0 6px; overflow:auto; padding:5px;"><br />
Microsoft Windows [Version 6.2.9200]<br><br />
(c) 2012 Microsoft Corporation. Alle Rechte vorbehalten.<br><br />
<br><br />
C:\Users\Blinz> nslookup -type=srv _ldap._tcp.dc._msdcs.testdomain.local<br><br />
<br><br />
Server: dc03.testdomain.local<br><br />
Address: 192.168.178.3<br><br />
<br><br />
_ldap._tcp.dc._msdcs.testdomain.local SRV service location:<br><br />
::::<nowiki> priority = 0</nowiki><br><br />
::::<nowiki> weight = 100</nowiki><br><br />
::::<nowiki> port = 389</nowiki><br><br />
::::<nowiki> svr hostname = dc02.testdomain.local</nowiki><br><br />
_ldap._tcp.dc._msdcs.testdomain.local SRV service location:<br><br />
::::<nowiki> priority = 0</nowiki><br><br />
::::<nowiki> weight = 100</nowiki><br><br />
::::<nowiki> port = 389</nowiki><br><br />
::::<nowiki> svr hostname = dc03.testdomain.local</nowiki><br><br />
dc02.testdomain.local internet address = 192.168.178.2<br><br />
dc03.testdomain.local internet address = 192.168.178.3<br><br />
<br><br />
C:\Users\BLinz>_<br><br />
</div><br />
</div><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 10:24, 12. Mär. 2014 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Datentr%C3%A4gerbereinigung_per_direkten_Befehl_aufrufen&diff=9500Windows Datenträgerbereinigung per direkten Befehl aufrufen2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
C:\Windows\system32\cleanmgr.exe /force full<br />
Siehe auch http://www.deskmodder.de/wiki/index.php/Datentr%C3%A4gerbereinigung_Windows_10_Alte_Daten_richtig_l%C3%B6schen<br />
<br><br />
<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Dateien_mit_zu_langen_Dateinamen_Pfadnamen_kopieren_Dateiname_zu_lang_Quelle_oder_Ziel&diff=9499Windows Dateien mit zu langen Dateinamen Pfadnamen kopieren Dateiname zu lang Quelle oder Ziel2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
Wenn Ihr eine Fehlermeldung wie<br />
Quellpfad ist zu lang<br />
Zielpfad ist zu lang<br />
Die Dateinamen wären zu lang für den Zielordner ...<br />
habt bieten sich folgende Lösungen an:<br><br />
<br><br />
<br><br />
==Variante 1: Netzlaufwerk mounten==<br />
Ihr sucht euch den Ordner der so nahe wie möglich an den Problematischen Dateien ist.<br><br />
<u>'''Beispiel:'''</u><br><br />
Auf dem Server '''''FILESERVER'''' gibt es eine Freigabe '''''SHARE''''' in der die Problematischen Dateien unter<br><br />
\\FILESERVER\SHARE\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\<br />
Der Pfad hat 158 Zeichen inklusive dem abschließenden Ordner '''''..\Muster\'''''<br><br />
Selbst wenn die Freigabe als Netzlaufwerk gemountet ist fällt ja nur der Anfang mit '''''\\FILESERVER\SHARE''''' weg was gerade mal 18 Zeichen spart.<br><br />
<br><br />
Deshalb verbindet euch den langen Pfad als Netzlaufwerk! Entweder in der Eingabeaufforderung (CMD.exe) per<br><br />
net use Y: "\\FILESERVER\SHARE\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\"<br />
oder im Datei-Explorer über "Netzlaufwerk verbinden":<br><br />
[[Datei:Windows-Pfade-ueber-256-Zeichen-001.png]]<br><br />
Aus den 158 Zeichen sind so nun 3 geworden, in diesem Fall nämlich<br><br />
Y:\<br />
Eventuell müsst Ihr das mit Quelle und Ziel machen. Nun könnt Ihr neu versuchen zu kopieren.<br><br />
Die Netzlaufwerke könnt Ihr im Anschluss per Rechtsklick -> Trennen wieder entfernen.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Variante 2: lokale Laufwerke==<br />
Falls die problematischen Dateien lokal liegen und Ihr nicht extra eine Freigabe für den vorherigen Trick erstellen wollt so nehmt den Befehl <code>Subst</code>.<br><br />
<u>'''Beispiel:'''</u><br><br />
Auf Rechner liegen die Daten lokal unter<br><br />
D:\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\<br />
was 142 Zeichen entspricht. Mit<br><br />
subst Y: "D:\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\"<br />
habt Ihr den Ordner nun direkt unter Y:, verkürzt auf 3 Zeichen.<br><br />
Hinterher werden Ihr Y: mit<br />
subst Y: /D<br />
wieder los.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Variante 3: Robocopy==<br />
Das gute Robocopy nutzt - in den neueren Versionen - die Windows-Unicode Methoden und kann auf diese Weise mit Pfaden umgehen die bis zu 32.000 Zeichen haben.<br><br />
Mit<br><br />
robocopy \\Server\Freigabe\Quellordner\ \\Server\Freigabe\Zielordner /E /COPYALL<br />
könnt Ihr also die Dateien an den neuen Ort kopieren.<br />
<code>/E</code> steht dabei für ''"mit allen (auch leeren) Unterordnern"'',<br><br />
<code>/COPYALL</code> für ''"inklusive Berechtigungen und Attributen"'''<br><br />
Hierbei werden am Ziel schon vorhandene Dateien und Ordner NICHT kopiert!<br><br />
<br><br />
Die schärfere Variante wäre<br><br />
robocopy \\Server\Freigabe\Quellordner\ \\Server\Freigabe\Zielordner /MIR /COPYALL<br />
welche dafür sorgt das Quell- und Zielverzeichnis hinterher 1:1 gleich sind- ACHTUNG, am Ziel werden dabei ggf. auch Dateien oder Ordner gelöscht!<br />
<br><br />
<br><br />
----<br />
==Variante 4: Vorherige Versionen / Previous Versions==<br />
Das ist ja alles schön und gut - aber was mache ich wenn die Daten aus den "vorherigen Versionen" Stammen? <code>net use</code> funktioniert da nicht und robocopy auch nicht!<br><br />
Öffnet die entsprechende vorherige Version:<br><br />
[[Datei:Windows-Pfade-ueber-256-Zeichen-002.png]]<br><br />
<br><br />
Und lasst euch dann die Eigenschaften des Ordners anzeigen. Aus diesen kopiert ihr euch den Pfad:<br><br />
[[Datei:Windows-Pfade-ueber-256-Zeichen-003.png]]<br><br />
<br><br />
Beispielsweise ist der kopierte Pfad also<br />
\\FILESERVER\SHARE\@GMT-2015.09.04-05.00.18\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\<br />
<code>net use</code> funktioniert nicht - aber erstaunlicherweise <code>subst</code>:<br><br />
subst Y: "\\FILESERVER\SHARE\@GMT-2015.09.04-05.00.18\Mitarbeiter\Mustermann\Archiv\Meine eigenen Dokumente\In Microsoft Word erstellt\Anschreiben an Kunden mit Grafik\Firmen im Ausland\Muster\"<br />
und schon haben wir den Snapshot / die vorherige Version als Laufwerk '''Y:'''<br><br />
[[Datei:Windows-Pfade-ueber-256-Zeichen-004.png]]<br><br />
<br><br />
Sieht zwar komisch aus - funktioniert aber!<br><br />
y: werdet Ihr dann mit<br><br />
subst Y: /D<br />
wieder los.<br><br />
<br><br />
<br><br />
----<br />
<br />
==Variante 4: Mischung aus allem==<br />
In der Praxis habe ich es oft das ich<br><br />
* das Ziel verkürze per <code>net use</code><br><br />
* die Quelle eine vorherige Version ist die mir per <code>subst</code> mounte<br><br />
* und ich das ganze per <code>robocopy Quelle Ziel /E /COPYALL</code> kopiere<br />
<br><br />
<br><br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Dateien_Ordner_l%C3%B6schen_Dateiname_Verzeichnisname_zu_lang&diff=9498Windows Dateien Ordner löschen Dateiname Verzeichnisname zu lang2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows]]<br />
Falls Ihr mal einen Ordner löschen wollt aber nicht könnt weil euch Windows immer mault das der Dateiname / Pfadname zu lang ist:<br><br />
Robocopy kann das! Siehe auch https://znil.net/index.php?title=Windows_Dateien_mit_zu_langen_Dateinamen_Pfadnamen_kopieren_Dateiname_zu_lang_Quelle_oder_Ziel#Variante_3:_Robocopy<br><br />
1. Öffnet eine Eingabaufforderung<br />
2. erstellt einen leeren(!) Ordner:<br />
mkdir c:\leererOrdner<br />
3. gleicht den Problemordner nun mit dem leeren Ordner ab:<br />
robocopy c:\leererOrdner\ C:\Pfad_zum\Problem\Ordner\ /MIR<br />
<br><br />
Robocopy löscht euch nun zuverlässig alle Dateien im Zielordner!<br><br />
<br><br />
<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows_Anmeldescript_wird_nicht_abgearbeitet&diff=9497Windows Anmeldescript wird nicht abgearbeitet2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Abmeldeskripte]]<br />
[[Kategorie:Anmeldeskripte]]<br />
[[Kategorie:Batch]]<br />
[[Kategorie:Windows]]<br />
Ihr habt ein Anmeldescript, entweder direkt dem Benutzer zugeweisen oder per Gruppenrichtlinie?<br><br />
und das Drecksding arbeitet das Ding einfach nicht ab obwohl alles darin richtig ist?<br><br />
Andere Scripte werden abgerarbeitet, nur eben dieses nicht?<br><br />
<br><br />
Tja, willkomen in der Welt der Zeichensätze!<br><br />
<br><br />
<u>'''Lösung:'''</u><br><br />
<br><br />
Haut endlich <code>Notepad</code> in die Tonne und nehmt einen Editor der mit verschiedenen Zeichensätzen besser umgehen kann!<br><br />
Ich persönlich nutze gerne [http://notepad-plus-plus.org/ notepad++], aber UltraEdit & Co. gehen auch.<br><br />
<br><br />
Dann öffnet mit einem solchen Editor mal eure problematische Batchdatei und geht oben auf {{Key|Kodierung}}:<br><br />
:[[Datei:Anmeldescript-ANSI-UTF8-001.png]]<br><br />
<br><br />
Da haben wir es ja - es steht auf <code>UTF-8</code> - es muss aber auf <code>ANSI</code> stehen!<br><br />
Ändert es indem Ihr einfach <code>ANSI</code> auswählt, speichert die Datei und testet es noch einmal - nun wird es gehen!<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 08:52, 11. Mär. 2014 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_alle_Versionen_-_Remote_Kennwort_%C3%A4ndern_(lokale_oder_Dom%C3%A4nenbenutzer)&diff=9495Windows:Windows alle Versionen - Remote Kennwort ändern (lokale oder Domänenbenutzer)2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows_7]]<br />
Wie ändere ich das Kennwort auf einem anderen Rechner oder in einer anderen Domäne ohne dort direkt angemeldet zu sein?<br><br />
<br><br />
Eigentlich ganz simpel:<br><br />
<br><br />
----<br />
<br><br />
Als erstes den Sicherheitsdialog aufrufen und dort '''"Kennwort ändern"''' auswählen - '''[STRG] + [ALT] + [ENF]'''<br><br />
<br><br />
[[Datei:XP+W7-Kennwort-Remote-aendern-001.png]] - [[Datei:XP+W7-Kennwort-Remote-aendern-003.png]]<br><br />
<br><br />
<br><br />
Und dann gebt Ihr bei der Domäne enifach die andere Domäne oder den Namen des anderen Rechners an (Anmelden an:):<br><br />
<br><br />
[[Datei:XP+W7-Kennwort-Remote-aendern-002.png]] - [[Datei:XP+W7-Kennwort-Remote-aendern-004.png]]<br><br />
<br><br />
<br><br />
Wenn es nicht klappt:<br><br />
* Ihr solltet den Namen der anderen Domäne oder den Rechnernamen anpingen können. Er muss halt einen Weg dorthin kennen<br />
* Statt der anderen Domäne / Remotedomäne könnt Ihr auch einen Domänencontroller-Namen nehmen. Auf Domänencontrollern gibt es keine lokalen Benutzer, stattdessen wird der Domänenbenutzer geändert<br />
* Wenn auch das nicht will weil euer Rechner (bzw. der DNS Server den Ihr nutzt) das nicht richtig auflösen kann, so nehmt die IP-Adresse (ohne Gewähr)<br />
<br><br />
Siehe auch: http://support.microsoft.com/?kbid=149176<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 16:08, 31. Jan. 2012 (CET)<br><br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_Vista_/_Windows_7_gespeicherte_Kennw%C3%B6rter_f%C3%BCr_Proxy,_Webseiten,_Outlook_l%C3%B6schen&diff=9494Windows:Windows Vista / Windows 7 gespeicherte Kennwörter für Proxy, Webseiten, Outlook löschen2017-08-06T18:52:08Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]]<br />
An diversen Stellen in Windows kann man Benutzernamen und Kennwort speichern lassen - ja ja ist unsicher, aber auch ich nutze das an 2 bis 3 Stellen aus bequemlichkeit, z.B.:<br><br />
* Proxy Authentifizierung<br />
* Outlook Anywhere Anmeldung<br />
* Zugriff auf geschützte Webseiten<br />
<br><br />
Nun wollte ich aber mich an einem Proxy mit einem anderen Benutzer anmelden - doch wo und wie kann man das?<br><br />
<br><br />
----<br />
'''<u><big>Lösung:</big></u>'''<br><br />
<br><br />
'''''Start''''' drücken und '''''Tresor''''' eintippen:<br><br />
<br><br />
[[Datei:Windows7-Kennwoerter-wieder-loeschen-001.png]]<br><br />
<br><br />
Den einsamen Eintrag '''''Verwalten Sie Windows-Anmeldeinformationen.''''' auswählen.<br><br />
<br><br />
[[Datei:Windows7-Kennwoerter-wieder-loeschen-002.png]]<br><br />
<br><br />
Nun könnt Ihr in der Liste den gewünschten Eintrag suchen, diesen rechts aufklappen und dann löschen wählen:<br><br />
<br><br />
[[Datei:Windows7-Kennwoerter-wieder-loeschen-003.png]]<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 09:34, 21. Mär. 2012 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_Server_2008_R2_als_VPN_Einwahlserver_f%C3%BCr_Windows_7_hinter_Firewall_mit_Boardmitteln&diff=9493Windows:Windows Server 2008 R2 als VPN Einwahlserver für Windows 7 hinter Firewall mit Boardmitteln2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Internet]]<br />
<br />
Folgendes Szenario:<br />
* Windows Server 2008 R2 als VPN Einwahlserver<br />
* Server ist nicht direkt sondern hinter Router / Firewall (hier Fritz!Box) im Internet<br />
* Ports wurden per NAT auf den Server geschaltet<br />
{{Trennlinie-01}}<br />
== Teil 1: Windows Server 2008 R2 Rolle nachinstallieren==<br />
Als ersten müssen wir die Rollen nachinstallieren:<br />
* Netzwerkrichtlinien- und Zugriffsdienste<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-001.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-002.png]]<br><br />
<br><br />
Nur die Rollendienste<br />
* Routing- und RAS-Dienste<br />
** RAS<br />
** Routing<br />
werden benötigt:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-003.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-004.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-005.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-006.png]]<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 2: Routing und RAS konfigurieren und aktivieren ==<br />
Nachdem die Rolle installiert wurde finden wir diese im Server Manager wieder.<br><br />
Die Auswahl erweitern auf<br />
* Server Manager<br />
** Rollen<br />
*** Netzwerkrichtlinien- und Zugriffsdienste<br />
**** Routing und RAS<br />
und dann mit Rechtsklick das Menü öffnen und<br />
* Routing und RAS konfigurieren und aktivieren<br />
wählen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-007.png]]<br><br />
<br><br />
Es öffnet sich ein Assistent:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-008.png]]<br><br />
<br><br />
Wir wählen die<br><br />
* Benutzerdefinierte Konfiguration:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-009.png]]<br><br />
<br><br />
Der Haken bei<br><br />
* VPN-Zugriff<br />
reicht für unsere Zwecke (Die Benutzer können nach der Einwahl nur auf den Server zugreifen auf dem sie sich eingewählt haben, z.B. auf Freigaben oder per RDP)<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-010.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-011.png]]<br><br />
<br><br />
Nun kann auch der Dienst gestartet werden:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-012.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-013.png]]<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 3: IP-Adressen für Einwahl bereitstellen ==<br />
Falls wir keinen DHCP Server für die Einwahl haben können wir auch für diese Benutzer auch "manuell" einen Bereich mit Adressen angeben.<br><br />
Wir gehen wieder per Rechstklick auf <code>'''Routing und RAS'''</code> und wählen diesmal die <code>'''Eigenschaften'''</code>:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-015.png]]<br><br />
<br><br />
* Wir gehen auf den Reiter <code>'''IPv4'''</code><br />
* Aktivieren den Haken bei <code>'''IPv4-Weiterleitung aktivieren'''</code><br />
* Aktivieren unter <code>'''IPv4-Adresszuweisung'''</code> den <code>'''Statischen Adresspool'''</code><br />
* Klicken auf <code>'''Hinzufügen'''</code>:<br />
[[Datei:W2008R2-als-VPN-PPTP-Server-016.png]]<br><br />
<br><br />
Und geben eine Start- und End-IP-Adresse ein - Die Anzahl der Adressen ermittelt er von alleine:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-017.png]]<br><br />
<br><br />
Nach einem Klick auf <code>'''OK'''</code> hat er es übernommen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-018.png]]<br><br />
<br><br />
Einfach nochmal <code>'''OK'''</code> und wir sind fertig damit.<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 4: Regel / Richlinie für die Einwahl erstellen ==<br />
Ganz so einfach kommt noch niemand rein - es muss erst eine Richtlinie geben die das erlaubt. Vordefiniert gibt es noch keine (was auch gut so ist :-)<br><br />
Alternativ kann man auch den Haken bei dem jeweiligen Benutzer setzen´(siehe Teil 4 - Alternativ)<br><br />
<br><br />
Wir erweitern im Server-Manager bis zu<br />
* Server Manager<br />
** Rollen<br />
*** Netzwerkrichtlinien- und Zugriffsdienste<br />
**** Routing und RAS<br />
***** RAS-Protokollierung und - Richtlinien<br />
Wieder ein Rechtsklick darauf und <code><big>'''NPS starten</big></code> wählen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-025.png]]<br><br />
<br><br />
Es öffnet sich die Konsole <code><big>'''Netzwerkrichtlinienserver'''</big></code>.<br><br />
Wir erweitern die Auswahl bis auf<br />
* NPS<br />
** Netzwerkrechtlinien<br />
und wählen per Rechtsklick im Optionsmenü <code><big>'''Neu'''</big></code>:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-026.png]]<br><br />
<br><br />
Wir denken uns einen passenden Namen aus, die Auswahl wie im Bild gezeigt:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-027.png]]<br><br />
<br><br />
Wir brauchen mindestens eine Bedingung die Zutrifft und damit die Einwahl dann erlaubt, also einmal auf Hinzufügen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-028.png]]<br><br />
<br><br />
Die Mitgliedschaft in einer bestimmten Gruppe z.B.:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-029.png]]<br><br />
<br><br />
Nun eine Gruppe auswählen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-030.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-031.png]]<br><br />
<br><br />
Und weiter geht es:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-032.png]]<br><br />
<br><br />
Jetzt unbedingt <big><code>Zugriff gewährt</code></big> auswählen - deshalb machen wir das ja nur!<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-033.png]]<br><br />
<br><br />
Als Methoden habe ich die im Bild dargestellten verwendet, er nimmt bei der Einwahl <big>'''MS-CHAP'''</big>, an v2 Arbeite ich noch.<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-034.png]]<br><br />
<br><br />
Für Fortgeschrittende: man kann auch noch ein Zertifikat hinzufügen (Erst hinzufügen, danach bearbeiten und das gewünschte Zertifikat auswählen)<br><br />
<br><br />
Ab jetzt klicken wir eigentlich immer nur auf <big><code>'''Weiter'''</code></big>:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-035.png]]<br><br />
<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-036.png]]<br><br />
<br><br />
Und Fertig:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-037.png]]<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 4 Alternativ: Benutzern die Einwahl im Active Directory erlauben ==<br />
Statt der NPS-Richtlinie geht es auch wie folgt:<br><br />
Dazu rufen wir unter <code><big>'''Active Directory-Benutzer und -Computer'''</big></code> die Eigenschaften des Benutzers auf:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-014.png]]<br><br />
<br><br />
Unter <code><big>Einwählen</big></code> die Option auf <big><code>Zugriff gestatten</code></big> stellen.<br><br />
Ich muss aber zugeben, das es bei meinen Test's ohne Richtlinie nicht ging - die musste es immer geben, ansonsten gab es einen Fehler das es keine passende Richtline gab :-)<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 4 Alternativ: L2TP/IPSec nutzen statt PPTP ==<br />
Wer L2TP/IPSec statt PPTP zur Einwahl nutzen will (und damit verschlüsselte Verbindungen) schaut einmal hier:<br><br />
[http://support.microsoft.com/kb/926179 Gewusst wie:Konfigurieren von einem L2TP/IPsec-Server hinter einem NAT-T-Gerät in Windows Vista und Windows Server 2008]<br><br />
Gilt für 2008 R2 und Windows 7/8 noch genauso<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
<br />
== Teil 5: Ports und Protokolle auf der Firewall freischalten und NAT-ten für PPTP ==<br />
für '''PPTP''' musste ich folgende Ports und Protokolle auf meiner Fritz!Box freischalten:<br />
Port 1723 Protokoll TCP<br />
Port 47 Protokoll GRE<br />
[[Datei:W2008R2-als-VPN-PPTP-Server-038.png]]<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-039.png]]<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-040.png]]<br><br><br />
Zumindest die Fritz!Box leitet den GRE Verkehr dann pauschal an den Host durch.<br><br />
<br><br />
<br><br />
{{Trennlinie-01}}<br />
== Teil 6: Einwahl unter Windows 7 konfigurieren ==<br />
Wir öffnen das <code><big>Netzwerk- und Freigabecenter</big></code>:<br><br />
Und wählen <big><code>Neue Verbindung oder neues Netzwerk einrichten</code></big>:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-041.png]]<br><br />
<br><br />
<code><big>Verbindung mit dem Arbeitsplatz herstellen</big></code>:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-019.png]]<br><br />
<br><br />
den oberen Punkt, <code><big>Die Internetverbindung (VPN) verwenden</big></code> auswählen:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-020.png]]<br><br />
<br><br />
Internetadresse ist dann die öffentliche IP-Adresse oder DNS-Name des Routers/Firewall:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-021.png]]<br><br />
<br><br />
Benutzername, Passwort und Domäne angeben:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-022.png]]<br><br />
<br><br />
und Warten - er probiert die verschiedenen VPN Möglichkeiten durch bis es passt:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-023.png]]<br><br />
<br><br />
Und Hurra!:<br><br />
[[Datei:W2008R2-als-VPN-PPTP-Server-024.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 16:29, 12. Jun. 2012 (CEST)<br />
{{Trennlinie-01}}<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_Server_2008_R2_-_dcpromo_h%C3%A4ngt_/_dauert_lange_/_Bluescreen_/_Rechner_Server_friert_ein&diff=9492Windows:Windows Server 2008 R2 - dcpromo hängt / dauert lange / Bluescreen / Rechner Server friert ein2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_Server_2008]]<br />
Gerade auf meinem neuen Testsystem gehabt:<br><br />
<br><br />
nach dem Start von '''''dcpromo''''' (also wenn er Anfängt die Domäne zu erstellen) hängt sich der Server weg, nach langer Zeit (>20 Minuten) kommt ein Bluescreen),<br><br />
die Festplattenleuchte leuchtet durchgehend (kein Flackern wie bei normalen Zugriff) ...<br><br />
<br><br />
<u>'''Ursache:'''</u> Windows versucht den Schreibcache für die Festplatte zu deaktivieren.<br><br />
<br><br />
<u>'''Lösung:'''</u><br><br />
* Deaktiviere den Schreibcache der Festplatte vorher manuell in der Systemsteuerung/Hardware in den Eigenschaften der Festplatten (unter Laufwerken)<br><br />
* hängt sich der Rechner dabei auch weg -> stelle im BIOS um von AHCI auf IDE und versuche es noch einmal<br />
<br><br />
und schon hat es bei mir geklappt (nach 2 Stunden suche ....)<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 23:23, 3. Mai 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_Server_2008_R2_-_Aero_Desing_aktivieren_%2B_Snipping_Tool_%2B_Windows_Sidebar_nutzen&diff=9491Windows:Windows Server 2008 R2 - Aero Desing aktivieren + Snipping Tool + Windows Sidebar nutzen2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Windows_Server_2008]]<br />
'''<u>Hinweis:</u>''' Wenn Ihr nur die Sidebar nutzen wollt müsst Ihr trotzdem die Desktopdarstellung installieren. Aber der Dienst '''''Designs''''' muss nicht unbedingt laufen.<br><br />
{{Warnung| Seit einem Update für den Internet-Explorer 10 und Internet-Explorer 11 funktionieren die Aero-Effekte in Windows Server 2008 R2 nicht mehr. Es bleibt also nur das Snipping-Tool und die Minianwendungen}}<br><br />
<br><br />
----<br />
1. Als erstes fügt Ihr im Server-Manager das Feature '''''Desktopdarstellung (installiert)''''' hinzu:<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-001.png]]<br><br />
<br><br />
----<br />
2. Nach einem Neustart und der Beendigung der Konfiguration habt Ihr das '''''Snipping Tool''''' schon wieder zur verfügung (im Startmenü einfach '''''Snipping''''' eintippen.<br><br />
----<br />
3. Wenn wir das transparente Aero Design noch haben wollen, so müssen wir den Dienst '''''Designs''''' noch starten (am besten auf Automatisch setzen)<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-002.png]]<br><br />
<br><br />
Und schon können wir in den Einstellungen auch Aero wählen (damit es auffälliger ist habe ich hier eine rote Fensterfarbe verwendet):<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-003.png]]<br><br />
<br><br />
----<br />
4. Es fehlen noch die anderen üblichen Effekte wie Schatten etc. Im Startmenü '''''System''''' eingeben und auswählen, dann die '''''Erweiterten Systemeinstellungen''''' aufrufen:<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-004.png]]<br><br />
<br><br />
Weiter geht es mit den Einstellungen zur Leistung:<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-005.png]]<br><br />
<br><br />
Dort stellen wir auf '''''Für optimale Darstellung anpassen''''' und schon ist alles "schick":<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-006.png]]<br><br />
<br><br />
----<br />
5. Die '''''Windows Sidebar''''' ist schon aufwendiger. Die Webseite [http://www.win2008r2workstation.com/win2008r2/sidebar http://www.win2008r2workstation.com/] stellt hierfür einen Download mit passenden Installationsscript zur Verfügung. Leider ist deren Version für ein Windows Server 2008 R2 SP1 auf Englisch - was auf einem "deutschen" Windows Server 2008 R2 zu Problemen führt.<br><br />
Ich habe die Dateien angepasst, hier ist die Version für ein deutsches '''Windows Server 2008 R2 SP1''': [http://znil.net/images/manuellerUpload/Windows_Sidebar_Deutsch_2008R2SP1.zip Windows_Sidebar_Deutsch_2008R2SP1.zip]<br><br />
<br><br />
Die ZIP-Datei entpacken und das darin enthaltene Skript aufrufen:<br><br />
<br><br />
[[Datei:sidebar_01.png]]<br><br />
(Schönen Dank für den Screenshot an www.win2008r2workstation.com, das Original findet ihr im Link im Abschnitt zuvor)<br><br />
<br><br />
Ohne Neustart könnt Ihr nun per Rechtsklick auf den leeren Desktop die Minianwendungen aufrufen:<br><br />
<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-007.png]]<br><br />
<br><br />
(Ich habe schon ein paar mehr installiert)<br><br />
[[Datei:WindowsServer2008_Aero+SnippingTool+Sidebar-008.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 01:11, 6. Mai 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_7_/_Server_2008_/_Server_2008_R2_-_Liste_aller_Management_Controls_(MMC)_*.msc&diff=9490Windows:Windows 7 / Server 2008 / Server 2008 R2 - Liste aller Management Controls (MMC) *.msc2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_XP]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]]<br />
Liste aller *.msc Dateien und Ihre Funktion - ohne Anspruch auf Vollständigkeit / wird nach Bedarf erweitert.<br />
----<br />
==adsiedit.msc (ADSI-Edit)==<br />
<big>'''Active Directory-Dienstschnittstellen-Editor (ADSI-Edit)'''</big> -> quasi das RegEdit für das AD.<br><br />
[[Datei:Adsiedit.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==azman.msc (Autorisierungs-Manager)==<br />
<big>'''Autorisierungs-Manager'''</big><br><br />
[[Datei:Azman.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==certmgr.msc (Zertifikate - Aktueller Benutzer)==<br />
<big>'''Zertifikate - Aktueller Benutzer'''</big><br><br />
[[Datei:Certmgr.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==certsrv.msc (Zertifizierungsstelle)==<br />
<big>'''Zertifizierungsstelle'''</big><br><br />
[[Datei:Certsrv.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==certtmpl.msc (Zertifikatvorlagenkonsole)==<br />
<big>'''Zertifikatvorlagenkonsole'''</big><br><br />
[[Datei:Certtmpl.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==comexp.msc (Komponentendienste)==<br />
<big>'''Komponentendienste'''</big><br><br />
[[Datei:Comexp.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==compmgmt.msc (Computerverwaltung)==<br />
<big>'''Computerverwaltung'''</big><br><br />
[[Datei:Compmgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==devmgmt.msc (Geräte-Manager)==<br />
<big>'''Geräte-Manager'''</big><br><br />
[[Datei:Devmgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==diskmgmt.msc (Datenträgerverwaltung)==<br />
<big>'''Datenträgerverwaltung'''</big><br><br />
[[Datei:Diskmgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==dnsmgmt.msc (DNS-Manager)==<br />
<big>'''DNS-Manager'''</big><br><br />
[[Datei:Dnsmgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==domain.msc (Active Directory-Domänen und Vertrauensstellungen)==<br />
<big>'''Active Directory-Domänen und Vertrauensstellungen'''</big><br><br />
[[Datei:Domain.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==dsa.msc==<br />
<big>''' '''</big><br><br />
[[Datei:]]<br><br />
<br><br />
<br><br />
----<br />
==dssite.msc (Active Directory-Benutzer und -Computer)==<br />
<big>'''Active Directory-Benutzer und -Computer'''</big><br><br />
[[Datei:Dsa.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==eventvwr.msc (Ereignisanzeige)==<br />
<big>'''Ereignisanzeige'''</big><br><br />
[[Datei:Eventvwr.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==fsmgmt.msc (Freigegebene Ordner)==<br />
<big>'''Freigegebene Ordner'''</big><br><br />
[[Datei:Fsmgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==gpedit.msc (Editor für lokale Gruppenrichtlinien)==<br />
<big>'''Editor für lokale Gruppenrichtlinien'''</big><br><br />
[[Datei:Gpedit.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==gpmc.msc (Gruppenrichtlinienverwaltung)==<br />
<big>'''Gruppenrichtlinienverwaltung'''</big><br><br />
[[Datei:Gpmc.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==gpme.msc (Gruppenrichtlinienobjekt suchen)==<br />
<big>'''Gruppenrichtlinienobjekt suchen'''</big><br><br />
[[Datei:Gpme.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==gptedit.msc (Gruppenrichtlinieneditor)==<br />
<big>'''Gruppenrichtlinieneditor'''</big><br><br />
Gibt einen Fehler wenn man ihn direkt startet - er weis dann nämlich nicht womit - wird von den anderen .msc gesatartet<br><br />
[[Datei:Gptedit.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==lusrmgr.msc (Lokale Benutzer und Gruppen)==<br />
<big>'''Lokale Benutzer und Gruppen'''</big><br><br />
[[Datei:Lusrmgr.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==NAPCLCFG.MSC (NAP-Clientkonfiguration)==<br />
<big>'''NAP-Clientkonfiguration'''</big><br><br />
[[Datei:NAPCLCFG.MSC.png]]<br><br />
<br><br />
<br><br />
----<br />
==perfmon.msc (Leistungsüberwachung)==<br />
<big>'''Leistungsüberwachung'''</big><br><br />
[[Datei:Perfmon.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==pkiview.msc (Unternehmens PKI)==<br />
<big>'''Unternehmens PKI'''</big><br><br />
[[Datei:Pkiview.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==rsop.msc (Richtlinienergebnissatz)==<br />
<big>'''Richtlinienergebnissatz'''</big><br><br />
[[Datei:Rsop.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==secpol.msc (Lokale Sicherheitsrichtlinie)==<br />
<big>'''Lokale Sicherheitsrichtlinie'''</big><br><br />
[[Datei:Secpol.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==ServerManager (Server-Manager).msc==<br />
<big>'''Server-Manager'''</big><br><br />
[[Datei:ServerManager.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==services.msc (Dienste)==<br />
<big>'''Dienste'''</big><br><br />
[[Datei:Services.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==storagemgmt.msc (Freigabe- und Speicherverwaltung)==<br />
<big>'''Freigabe- und Speicherverwaltung'''</big><br><br />
[[Datei:Storagemgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==storexpl.msc (Speicher-Explorer)==<br />
<big>'''Speicher-Explorer'''</big><br><br />
[[Datei:Storexpl.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==tapimgmt.msc (Telefonie)==<br />
<big>'''Telefonie'''</big><br><br />
[[Datei:Tapimgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==taskschd.msc (Aufgabenplanung)==<br />
<big>'''Aufgabenplanung'''</big><br><br />
[[Datei:Taskschd.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==tpm.msc ("Trusted Platform Module"-Management (TPM)")==<br />
<big>'''"Trusted Platform Module"-Management (TPM)"'''</big><br><br />
[[Datei:Tpm.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==tsadmin.msc (Remotedesktopdienste-Manager)==<br />
<big>'''Remotedesktopdienste-Manager'''</big><br><br />
[[Datei:Tsadmin.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==tsconfig.msc (Konfiguration des Remotedesktop-Sitzungshosts)==<br />
<big>'''Konfiguration des Remotedesktop-Sitzungshosts'''</big><br><br />
[[Datei:Tsconfig.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
<br />
==tsmmc.msc (Remotedesktops)==<br />
<big>'''Remotedesktops'''</big><br><br />
Simple Verwaltungskonsole für RDP Verbindungen<br><br />
[[Datei:Tsmmc.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==wbadmin.msc (Windows Server-Sicherung)==<br />
<big>'''Windows Server-Sicherung'''</big><br><br />
[[Datei:Wbadmin.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==WF.msc (Windows-Firewall mit erweiterter Sicherheit)==<br />
<big>'''Windows-Firewall mit erweiterter Sicherheit'''</big><br><br />
[[Datei:WF.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
==WmiMgmt.msc (Windows-Verwaltungsinstrumentation)==<br />
<big>'''Windows-Verwaltungsinstrumentation'''</big><br><br />
[[Datei:WmiMgmt.msc.png]]<br><br />
<br><br />
<br><br />
----<br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 23:04, 13. Mai 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_7_/_2008_R2_-_Eingabeaufforderung_per_Rechtsklick_auf_beliebigen_Ordnern_%C3%B6ffnen&diff=9489Windows:Windows 7 / 2008 R2 - Eingabeaufforderung per Rechtsklick auf beliebigen Ordnern öffnen2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]]<br />
Unter Windows XP habe ich mir immer einen Registry-Schlüssel angepasst, der einen per Rechtsklick auf einen Ordner ein "DOS-Box hier" präsentierte.<br><br />
<br><br />
Ab Windows Vista / 7 / 2008 / 2008 R2 ist es leichter: Einfach die '''[SHIFT]''' Taste gedrückt halten und dann einen Rechtsklick auf den Ordner:<br><br />
<br><br />
[[Datei:Eingabeaufforderung-per-Rechtsklick-001.png]]<br><br />
<br><br />
<br><br />
[[Datei:Eingabeaufforderung-per-Rechtsklick-002.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 09:11, 12. Apr. 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_2008_/_2008_R2_/_Vista_/_7_-_%C3%9Cbersicht_%C3%BCber_Dienste_mit_Beschreibung_und_net_start_Aufruf&diff=9488Windows:Windows 2008 / 2008 R2 / Vista / 7 - Übersicht über Dienste mit Beschreibung und net start Aufruf2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]]<br />
Die nachfolgende Sammlung umfasst nicht nur Windows-Dienste sondern auch andere (Exchange 2010, Google Updater, BackupExec, AMD Grafikkarten etc.)<br><br />
Die Sammlung erhebt keinen Anspruch auf Vollständigkeit und wird von Zeit zu Zeit ergänzt<br><br />
Erstellt habe ich dies als ich mal wieder den Namen des Dienstes zu einer .exe Datei gesucht habe - und für ein Batchprogramm mit den ich Dienste nach dem Neustart noch Nachstarte.<br />
----<br />
==Active Directory-Domänendienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Domänencontrollerdienst der Active Directory-Domänendienste. Wird dieser Dienst angehalten, ist eine Benutzeranmeldung beim Netzwerk nicht möglich. Wird dieser Dienst deaktiviert, können alle explizit von diesem Dienst abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NTDS<br />
<br><br><br />
----<br />
==Active Directory-Webdienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Mit diesem Dienst wird eine Webdienstschnittstelle für Instanzen des Verzeichnisdiensts (AD DS und AD LDS) bereitgestellt, die lokal auf diesem Server ausgeführt werden. Wenn dieser Dienst angehalten oder deaktiviert wird, kann von Clientanwendungen wie Active Directory-PowerShell nicht auf Verzeichnisdienstinstanzen zugegriffen werden, die lokal auf diesem Server ausgeführt werden. Die Instanzen können auch nicht mehr von den Anwendungen verwaltet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ADWS<br />
<br><br><br />
----<br />
==Active Directory-Zertifikatdienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Erstellt, verwaltet und entfernt X.509-Zertifikate für Anwendungen wie z.B. S/MIME und SSL. Wenn der Dienst beendet wird, werden keine Zertifikate erstellt. Wenn der Dienst deaktiviert wird, können alle anderen Dienste, die explizit davon abhängen, nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\certsrv.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start CertSvc<br />
<br><br><br />
----<br />
==AMD External Events Utility==<br />
<u>'''Beschreibung:'''</u><br><br />
Gehört zum AMD Grafikkartentreiber (z.B. für in CPU integrierten Grafikchip)<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\atiesrxx.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AMD External Events Utility<br />
<br><br><br />
----<br />
==AMD FUEL Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Gehört zum AMD Grafikkartentreiber (z.B. für in CPU integrierten Grafikchip)<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files\ATI Technologies\ATI.ACE\Fuel\Fuel.Service.exe /launchService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AMD FUEL Service <br />
==Anmeldedienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Unterstützt einen sicheren Kanal zwischen diesem Computer und dem Domänencontroller zum Authentifizieren von Benutzern und Diensten. Möglicherweise wird der Computer Benutzer und Dienste nicht authentifizieren und der Domänencontroller kann keine DNS-Einträge registrieren, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Netlogon<br />
<br><br><br />
----<br />
==Anmeldeinformationsverwaltung==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das sichere Speichern und Abrufen von Anmeldeinformationen für Benutzer, Anwendungen und Sicherheitsdienstpakete.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start VaultSvc<br />
<br><br><br />
----<br />
==Anschlussumleitung für Remotedesktopdienst im Benutzermodus==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht die Umleitung von Druckern, Laufwerken und Anschlüssen für RDP-Verbindungen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start UmRdpService<br />
<br><br><br />
----<br />
==Anwendungserfahrung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verarbeitet Anwendungskompatibilitäts-Cacheanforderungen beim Start von Anwendungen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AeLookupSvc<br />
<br><br><br />
----<br />
==Anwendungshost-Hilfsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Verwaltungsdienste, z. B. Konfigurationsverlauf und Anwendungspool-Kontozuordnung, für IIS bereit. Wenn der Dienst beendet wurde, ist es nicht möglich, den Konfigurationsverlauf zu verwenden und Dateien oder Verzeichnisse mit anwendungspoolspezifischen Zugriffssteuerungseinträgen zu sperren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k apphost<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AppHostSvc<br />
<br><br><br />
----<br />
==Anwendungsidentität==<br />
<u>'''Beschreibung:'''</u><br><br />
Bestimmt und überprüft die Identität einer Anwendung. Durch Deaktivierung dieses Diensts wird verhindert, dass AppLocker erzwungen wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AppIDSvc<br />
<br><br><br />
----<br />
==Anwendungsinformationen==<br />
<u>'''Beschreibung:'''</u><br><br />
Erleichtert das Ausführen von interaktiven Anwendungen mit zusätzlichen Administratorrechten. Wird dieser Dienst angehalten, können die Benutzer keine Anwendungen mit zusätzlichen Administratorrechten starten, die zum Ausführen gewünschter Benutzeraufgaben erforderlich sind.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Appinfo<br />
<br><br><br />
----<br />
==Anwendungsverwaltung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verarbeitet Installations-, Deinstallations- und Auflistungsanforderungen für Software, die über Gruppenrichtlinien bereitgestellt wird. Benutzer können Software, die über Gruppenrichtlinien bereitgestellt wird, nicht installieren, deinstallieren oder auflisten, wenn der Dienst deaktiviert ist. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AppMgmt<br />
<br><br><br />
----<br />
==Arbeitsstationsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Erstellt und wartet Clientnetzwerkverbindungen mit Remoteservern unter Verwendung des SMB-Protkolls. Diese Verbindungen sind nicht mehr verfügbar, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start LanmanWorkstation<br />
<br><br><br />
----<br />
==ASP.NET-Zustandsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt die Unterstützung für nicht aktive Sitzungszustände von ASP.NET bereit. Wenn der Dienst angehalten wird, werden nicht aktive Anforderungen nicht verarbeitet. Wenn der Dienst deaktiviert ist, können die explizit abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_state.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start aspnet_state<br />
<br><br><br />
----<br />
==Aufgabenplanung==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht einem Benutzer, automatische Aufgaben auf diesem Computer zu konfigurieren und zu planen. Der Dienst hostet auch mehrere Windows-systemkritische Aufgaben. Wenn dieser Dienst beendet oder deaktiviert wird, werden diese Vorgänge nicht zu den geplanten Zeiten ausgeführt. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Schedule<br />
<br><br><br />
----<br />
==Automatische Konfiguration (verkabelt)==<br />
<u>'''Beschreibung:'''</u><br><br />
Mit dem Dienst für die automatische Konfiguration von Kabelnetzwerken (DOT3SVC) wird eine IEEE 802.1X-Authentifizierung an Ethernet-Schnittstellen ausgeführt. Wenn bei der aktuellen verkabelten Netzwerkbereitstellung die 802.1X-Authentifizierung erzwungen wird, muss der DOT3SVC-Dienst so konfiguriert werden, dass eine Konnektivität auf der 2. Schicht hergestellt bzw. Zugriff auf Netzwerkressourcen ermöglicht wird. Der DOT3SVC-Dienst wirkt sich nicht auf Kabelnetzwerke aus, bei denen die 802.1X-Authentifizierung nicht erzwungen wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start dot3svc<br />
<br><br><br />
----<br />
==Backup Exec Agent Browser==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht der Backup Exec-Auftragsengine, auf dem Netzwerk verfügbare Backup Exec Agents zu finden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\benetns.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecAgentBrowser<br />
<br><br><br />
----<br />
<br />
==Backup Exec Deduplication Engine==<br />
<u>'''Beschreibung:'''</u><br><br />
Processes all data that goes through the PureDisk Deduplication Engine<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\spoold.exe" --start<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start spoold<br />
<br><br><br />
----<br />
<br />
==Backup Exec Deduplication Manager==<br />
<u>'''Beschreibung:'''</u><br><br />
Manages the PureDisk Deduplication Engine<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\spad.exe" --start<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start spad<br />
<br><br><br />
----<br />
<br />
==Backup Exec Device & Media Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Enthält mehrere COM-Server-Benutzeroberflächen zum Verwalten von und Zugriff auf Geräte und Medien.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\pvlsvr.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecDeviceMediaService<br />
<br><br><br />
----<br />
<br />
==Backup Exec DLO Administration Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Handles administrative tasks for the DLO database and clients.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
<br />
"C:\Program Files\Symantec\Backup Exec\DLO\DLOAdminSvcu.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DLOAdminSvcu<br />
<br><br><br />
----<br />
<br />
==Backup Exec DLO Maintenance Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Supports DLO clients by handling data intensive operations from the server.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files\SymanteC:\Backup ExeC:\DLO\DLOAdminSvcu.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DLOMaintenanceSvc<br />
<br><br><br />
----<br />
<br />
==Backup Exec Error Recording Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Backup Exec Error Recording Service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\bedbg.exe" --s<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start bedbg<br />
<br><br><br />
----<br />
<br />
==Backup Exec Job Engine==<br />
<u>'''Beschreibung:'''</u><br><br />
Erhält Auftragsanforderungen vom Backup Exec-Server und verschiebt Daten zu dem angegebenen Medium.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\bengine.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecJobEngine<br />
<br><br><br />
----<br />
==Backup Exec Management Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Backup Exec Management Service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\BackupExecManagementService.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecManagementService<br />
<br><br><br />
----<br />
<br />
==Backup Exec PureDisk Filesystem Service==<br />
<u>'''Beschreibung:'''</u><br><br />
This component provides Backup and Restore functionality via an installable filesystem service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\PDVFSService.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start PDVFSService<br />
<br><br><br />
----<br />
<br />
==Backup Exec Remote Agent for Windows Servers==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Backup and Restore-Dienste für Backup Exec zur Verfügung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\beremote.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecAgentAccelerator<br />
<br><br><br />
----<br />
<br />
==Backup Exec Server==<br />
<u>'''Beschreibung:'''</u><br><br />
Setzt Auftragsplanung, Serverkonfiguration, Auftragsdefinitionen, Auftragsverlauf und Backup Exec Management SDK um.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\beserver.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BackupExecRPCService<br />
<br><br><br />
----<br />
<br />
==Basisfiltermodul==<br />
<u>'''Beschreibung:'''</u><br><br />
Das Basisfiltermodul ist ein Dienst, der Firewall- und IPsec-Richtlinien überwacht und eine Benutzermodusfilterung implementiert. Durch das Beenden oder Deaktivieren des BFM-Diensts wird die Sicherheit des Systems erheblich beeinträchtigt. Darüber hinaus zeigen die IPsec-Verwaltungs- und Firewallanwendungen ein unerwartetes Verhalten.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceNoNetwork<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BFE<br />
<br><br><br />
----<br />
==Benachrichtigungsdienst für Systemereignisse==<br />
<u>'''Beschreibung:'''</u><br><br />
Überwacht Systemereignisse und benachrichtigt Abonnenten des COM+-Ereignissystems bei diesen Ereignissen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SENS<br />
<br><br><br />
----<br />
==Benutzerprofildienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Dieser Dienst ist für das Laden und Aufhebung von Benutzerprofilen. Wenn dieser Dienst beendet oder deaktivert wird, können Benutzer sich nicht mehr an- oder abmelden, haben Anwendungen Probleme beim Abruf von Benutzerdaten und Komponenten können keine Ereignisbenachrichtigungen erhalten.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ProfSvc<br />
<br><br><br />
----<br />
==Blockebenen-Sicherungsmodul==<br />
<u>'''Beschreibung:'''</u><br><br />
Der WBENGINE-Dienst wird von der Windows-Sicherung verwendet, um Sicherungs- und Wiederherstellungsvorgänge auszuführen. Wenn dieser Dienst vom Benutzer beendet wird, kann beim derzeit ausgeführten Sicherungs- und Wiederherstellungsvorgang ein Fehler auftreten. Wenn dieser Dienst deaktiviert wird, werden die Sicherungs- und Wiederherstellungsvorgänge auf diesem Computer, für die die Windows-Sicherung verwendet wird, möglicherweise deaktiviert.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Windows\system32\wbengine.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wbengine<br />
<br><br><br />
----<br />
<br />
==CNG-Schlüsselisolation==<br />
<u>'''Beschreibung:'''</u><br><br />
Der CNG-Schlüsselisolationsdienst wird im LSA-Prozess gehostet. Der Dienst stellt eine Schlüsselprozessisolation für private Schlüssel und zugehörige Kryptografievorgänge gemäß den Anforderungen der allgemeinen Kriterien bereit. Der Dienst speichert und verwendet langlebige Schlüssel in einem sicheren Prozess in Übereinstimmung mit den Anforderungen der allgemeinen Kriterien.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start KeyIso<br />
<br><br><br />
----<br />
==COM+-Ereignissystem==<br />
<u>'''Beschreibung:'''</u><br><br />
Unterstützt den Systemereignis-Benachrichtigungsdienst (SENS), mit dem Ereignisse automatisch an abonnierende COM-Komponenten verteilt werden. Nach dem Beenden des Dienstes wird SENS geschlossen, so dass keine weiteren Anmelde- und Abmeldebenachrichtigungen bereitgestellt werden können. Nach dem Deaktivieren des Dienstes können alle Dienste nicht mehr gestartet werden, die explizit auf diesem Dienst basieren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start EventSystem<br />
<br><br><br />
----<br />
==COM+-Systemanwendung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet die Komponentenkonfiguration und -überwachung von COM+-basierten Komponenten. Nach dem Beenden des Dienstes sind die meisten COM+-basierten Komponenten nicht ordnungsgemäß funktionsfähig. Nach dem Deaktivieren dieses Dienstes werden alle Dienste nicht gestartet, die explizit auf diesem Dienst basieren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\dllhost.exe /Processid:{02D4B3F1-FD88-11D1-960D-00805FC79235}<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start COMSysApp<br />
<br><br><br />
----<br />
==Computerbrowser==<br />
<u>'''Beschreibung:'''</u><br><br />
Führt eine aktuelle Liste der Computer im Netzwerk und gibt diese an als Browser fungierende Computer weiter. Diese Liste wird nicht aktualisiert oder gewartet, falls der Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Browser<br />
<br><br><br />
----<br />
==CrushFTP Server==<br />
CrushFTP Server<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:/Program Files/Java/jre7/bin/java" "-classpath" "C:\Program Files (x86)\CrushFTP6_PC\service\wrapper.jar" "-Xrs" "-Dwrapper.service=true" "-Dwrapper.working.dir=C:\Program Files (x86)\CrushFTP6_PC" "-Dwrapper.config=C:\Program Files (x86)\CrushFTP6_PC\service\wrapper.conf" "-Dwrapper.additional.1x=-Xrs" "org.rzo.yajsw.boot.WrapperServiceBooter" <br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start "CrushFTP Server"<br />
<br />
==CrushFTPRestart==<br />
CrushFTPRestart<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:/Program Files/Java/jre7/bin/java" "-classpath" "C:\Program Files (x86)\CrushFTP6_PC\service\wrapper.jar" "-Xrs" "-Dwrapper.service=true" "-Dwrapper.working.dir=C:\Program Files (x86)\CrushFTP6_PC" "-Dwrapper.config=C:\Program Files (x86)\CrushFTP6_PC\service\wrapper_update.conf" "-Dwrapper.additional.1x=-Xrs" "org.rzo.yajsw.boot.WrapperServiceBooter" <br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start CrushFTPRestart<br />
<br><br><br />
----<br />
<br />
==Dateireplikation==<br />
<u>'''Beschreibung:'''</u><br><br />
Synchronisiert Ordner mit Dateiservern, die den Dateireplikationsdienst (File Replication Service, FRS) anstelle der neueren DFS-Replikationstechnologie verwenden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\ntfrs.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NtFrs<br />
<br><br><br />
----<br />
==DCOM-Server-Prozessstart==<br />
<u>'''Beschreibung:'''</u><br><br />
Mit dem DCOMLAUNCH-Dienst werden COM- und DCOM-Server in Objektaktivierungsanforderungen gestartet. Wenn dieser Dienst angehalten oder deaktiviert wird, werden Programme, für die COM oder DCOM verwendet wird, nicht ordnungsgemäß ausgeführt. Es wird dringend empfohlen, den DCOMLAUNCH-Dienst auszuführen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k DcomLaunch<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DcomLaunch<br />
<br><br><br />
----<br />
==Defragmentierung==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Funktionen zur Datenträgerfragmentierung bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k defragsvc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start defragsvc<br />
<br><br><br />
----<br />
==Designs==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt die Designverwaltung zur Verfügung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Themes<br />
<br><br><br />
----<br />
==DFS-Namespace==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das Gruppieren freigegebener Ordner, die sich auf unterschiedlichen Servern befinden, in logisch strukturierten Namespaces. Jeder Namespace wird den Benutzern als einzelner freigegebener Ordner mit einer Reihe von Unterordnern angezeigt.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\dfssvc.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Dfs<br />
<br><br><br />
----<br />
==DFS-Replikation==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das Synchronisieren von Ordnern auf mehreren Servern über LAN- oder WAN-Netzwerkverbindungen. Dieser Dienst verwendet das RDC-Protokoll (Remote Differential Compression), um nur die Teile der Dateien zu aktualisieren, die seit der letzten Replikation geändert wurden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\DFSRs.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DFSR<br />
<br><br><br />
----<br />
==DHCP-Client==<br />
<u>'''Beschreibung:'''</u><br><br />
Registriert und aktualisiert IP-Adressen und DNS-Einträge für diesen Computer. Dieser Computer kann keine dynamischen IP-Adressen und DNS-Aktualisierungen empfangen, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Dhcp<br />
<br><br><br />
----<br />
==Diagnosediensthost==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Diagnosediensthost wird vom Diagnoserichtliniendienst als Host für Diagnosen verwendet, die im Kontext eines lokalen Diensts ausgeführt werden müssen. Wird dieser Dienst beendet, funktionieren alle davon abhängigen Diagnosen nicht mehr ordnungsgemäß.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WdiServiceHost<br />
<br><br><br />
----<br />
==Diagnoserichtliniendienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Diagnoserichtliniendienst ermöglicht die Problemerkennung, Problembehandlung und Lösung für Windows-Komponenten. Wenn dieser Dienst beendet wird, funktioniert die Diagnose nicht mehr.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DPS<br />
<br><br><br />
----<br />
==Diagnosesystemhost==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Diagnosesystemhost wird vom Diagnoserichtliniendienst als Host für Diagnosen verwendet, die im Kontext eines lokalen Systems ausgeführt werden müssen. Wird dieser Dienst beendet, funktionieren alle davon abhängigen Diagnosen nicht mehr ordnungsgemäß.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WdiSystemHost<br />
<br><br><br />
----<br />
==DisplayLinkManager==<br />
<u>'''Beschreibung:'''</u><br><br />
Manages DisplayLink Graphics Adapters according to Windows display properties<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\DisplayLink Core Software\DisplayLinkManager.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DisplayLinkService<br />
<br><br><br />
----<br />
<br />
==Distributed Transaction Coordinator==<br />
<u>'''Beschreibung:'''</u><br><br />
Koordiniert Transaktionen, die sich über mindestens zwei Ressourcenverwaltungen wie Datenbanken, Nachrichtenwarteschlangen oder Dateisysteme erstrecken. Wenn der Dienst beendet ist, treten bei diesen Transaktionen Fehler auf. Wenn der Dienst deaktiviert ist, können abhängige Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\msdtc.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSDTC<br />
<br><br><br />
----<br />
==DNS-Client==<br />
<u>'''Beschreibung:'''</u><br><br />
Der DNS-Clientdienst (dnscache) speichert DNS-Namen (Domain Name System) zwischen und registriert den vollständigen Computernamen für diesen Computer. Wenn der Dienst beendet wird, werden DNS-Namen weiterhin aufgelöst. Die Ergebnisse von DNS-Namenabfragen werden jedoch nicht zwischengespeichert, und der Name des Computers wird nicht registriert. Wenn der Dienst deaktiviert ist, können alle explizit von ihm abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Dnscache<br />
<br><br><br />
----<br />
==DNS-Server==<br />
<u>'''Beschreibung:'''</u><br><br />
Aktiviert DNS-Clients, sodass diese DNS-Namen durch Antworten auf DNS-Abfragen auflösen, und dynamische DNS-Aktualisierungsanforderungen. DNS-Aktualisierungen werden nicht durchgeführt, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\dns.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start DNS<br />
<br><br><br />
----<br />
==Druckwarteschlange==<br />
<u>'''Beschreibung:'''</u><br><br />
Lädt Dateien zum späteren Drucken in den Arbeitsspeicher.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\spoolsv.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Spooler<br />
<br><br><br />
----<br />
==Dyn Updater==<br />
<u>'''Beschreibung:'''</u><br><br />
Synchronizes DNS records from Dyn.com with this computer's global IP address.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\Dyn Updater\DynUpSvc.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Dyn Updater <br />
==Enumeratordienst für tragbare Geräte==<br />
<u>'''Beschreibung:'''</u><br><br />
Erzwingt Gruppenrichtlinien für Wechsel-Massenspeichergeräte. Ermöglicht Anwendungen wie Windows Media Player und dem Bildimport-Assistenten, Inhalte unter Verwendung von Wechsel-Massenspeichergeräten zu übertragen und zu synchronisieren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WPDBusEnum<br />
<br><br><br />
----<br />
==Erkennung interaktiver Dienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Aktiviert die Benutzerbenachrichtigung von Benutzereingaben für interaktive Dienste. Dies ermöglicht den Zugriff auf Dialogfelder, die von interaktiven Diensten erstellt werden, wenn sie angezeigt werden. Wenn dieser Dienst beendet wird, funktionieren Benachrichtigungen über neue interaktive Dienstdialogfelder nicht mehr, und der Zugriff auf Dialogfelder von interaktiven Diensten ist eventuell nicht möglich. Wenn dieser Dienst deaktiviert wird, funktionieren weder die Benachrichtigung über noch der Zugriff auf Dialogfelder von interaktiven Diensten.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\UI0Detect.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start UI0Detect<br />
<br><br><br />
----<br />
==Extensible Authentication-Protokoll==<br />
<u>'''Beschreibung:'''</u><br><br />
Der EAP-Dienst (Extensible Authentication Protocol) stellt in folgenden Szenarios eine Netzwerkauthentifizierung bereit: 802.1X (verkabelt und drahtlos), VPN und NAP (Network Access Protection). EAP stellt darüber hinaus APIs (Application Programming Interface, Anwendungsprogrammierschnittstelle) bereit, die von Netzwerkzugriffclients, einschließlich Drahtlosclients und VPN-Clients, beim Authentifizierungsvorgang verwendet werden. Wenn Sie diesen Dienst deaktivieren, kann dieser Computer nicht mehr auf Netzwerke zugreifen, die eine EAP-Authentifizierung verwenden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start EapHost<br />
<br><br><br />
----<br />
==Formularbasierter Microsoft Exchange-Authentifizierungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht eine formularbasierte Authentifizierung bei Outlook Web App und der Exchange-Systemsteuerung. Wenn dieser Dienst beendet wird, führen Outlook Web App und die Exchange-Systemsteuerung keine Benutzerauthentifizierung durch.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\ExFBA.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeFBA<br />
<br><br><br />
----<br />
<br />
==Funktionssuchanbieter-Host==<br />
<u>'''Beschreibung:'''</u><br><br />
Der FDPHOST-Dienst dient zum Hosten der Netzwerkerkennungsanbieter für die Funktionssuche (Function Discovery, FD). Von diesen FD-Anbietern werden Netzwerkerkennungsdienste für das Simple Services Discovery-Protokoll (SSDP) und das Web Services - Discovery (WS-D)-Protokoll bereitgestellt. Durch Beenden oder Deaktivieren des FDPHOST-Diensts wird bei Verwendung von FD die Netzwerkerkennung für diese Protokolle deaktiviert. Ist dieser Dienst nicht verfügbar, können mit Netzwerkdiensten, von denen FD und diese Erkennungsprotokolle verwendet werden, keine Netzwerkgeräte oder -ressourcen gesucht werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start fdPHost<br />
<br><br><br />
----<br />
==Funktionssuche-Ressourcenveröffentlichung==<br />
<u>'''Beschreibung:'''</u><br><br />
Veröffentlicht diesen Computer und die daran angeschlossenen Ressourcen, damit sie über das Netzwerk gesucht werden können. Wenn dieser Dienst beendet wird, werden die Netzwerkressourcen nicht mehr veröffentlicht, damit sie von anderen Computern im Netzwerk gesucht werden können.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start FDResPub<br />
<br><br><br />
----<br />
==Gatewaydienst auf Anwendungsebene==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet Unterstützung für Protokoll-Plug-Ins von Drittanbietern für die gemeinsame Nutzung der Internetverbindung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\alg.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ALG<br />
<br><br><br />
----<br />
==Gemeinsame Nutzung der Internetverbindung==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet allen Computern in Heim- und kleinen Firmennetzwerken Dienste für die Netzwerkadressübersetzung, Adressierung, Namensauflösung und Eindringschutz.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SharedAccess<br />
<br><br><br />
----<br />
==Geschützter Microsoft Exchange-Diensthost==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt einen Host für mehrere Microsoft Exchange-Dienste bereit, die von anderen Diensten aus geschützt werden müssen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\Microsoft.Exchange.ProtectedServiceHost.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeProtectedServiceHost<br />
<br><br><br />
----<br />
<br />
==Geschützter Speicher==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet geschützten Speicher für schützenswerte Daten, z. B. Kennwörter, und verhindert den Zugriff durch nicht autorisierte Dienste, Prozesse oder Benutzer.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ProtectedStorage<br />
<br><br><br />
----<br />
==Google Update-Dienst (gupdate)==<br />
<u>'''Beschreibung:'''</u><br><br />
Hält Ihre Google-Software auf dem neuesten Stand. Falls dieser Service deaktiviert oder angehalten wird, wird Ihre Google-Software nicht aktualisiert. Das heißt, dass eventuell auftretende Sicherheitslücken nicht behoben und bestimmte Funktionen möglicherweise nicht ausgeführt werden können. Dieser Service deinstalliert sich selbst, wenn er nicht von einer Google-Software verwendet wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Google\Update\GoogleUpdate.exe" /svc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start gupdate<br />
<br><br><br />
----<br />
<br />
==Google Update-Dienst (gupdatem)==<br />
<u>'''Beschreibung:'''</u><br><br />
Hält Ihre Google-Software auf dem neuesten Stand. Falls dieser Service deaktiviert oder angehalten wird, wird Ihre Google-Software nicht aktualisiert. Das heißt, dass eventuell auftretende Sicherheitslücken nicht behoben und bestimmte Funktionen möglicherweise nicht ausgeführt werden können. Dieser Service deinstalliert sich selbst, wenn er nicht von einer Google-Software verwendet wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Google\Update\GoogleUpdate.exe" /medsvc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start gupdatem<br />
<br><br><br />
----<br />
<br />
==Gruppenrichtlinienclient==<br />
<u>'''Beschreibung:'''</u><br><br />
Von dem Dienst werden Einstellungen angewendet, die von Administratoren mithilfe der Gruppenrichtlinienkomponente für den Computer und Benutzer konfiguriert wurden. Wenn der Dienst beendet oder deaktiviert wurde, werden die Einstellungen nicht angewendet, und Anwendungen sowie Komponenten können nicht über Gruppenrichtlinien verwaltet werden. Alle Komponenten oder Anwendungen, die von der Gruppenrichtlinienkomponente abhängen, funktionieren möglicherweise nicht mehr, falls der Dienst beendet oder deaktiviert wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start gpsvc<br />
<br><br><br />
----<br />
==Hilfsprogramm für spezielle Verwaltungskonsole==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Administratoren über die Notverwaltungsdienste (Emergency Management Services, EMS) den Remotezugriff auf eine Eingabeaufforderung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start sacsvr<br />
<br><br><br />
----<br />
==IIS-Verwaltungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht diesem Server die Verwaltung von FTP-Diensten in der Metabasis. Wenn dieser Dienst beendet wird, kann der Server weder Metabasis- noch FTP-Sites ausführen. Wenn dieser Dienst deaktiviert wird, können keine Dienste gestartet werden, die explizit von ihm abhängen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\inetsrv\inetinfo.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start IISADMIN<br />
<br><br><br />
----<br />
==IKE- und AuthIP IPsec-Schlüsselerstellungsmodule==<br />
<u>'''Beschreibung:'''</u><br><br />
Die IKEEXT-Diensthosts der Schlüsselerstellungsmodule für IKE (Internet Key Exchange) und Auth-IP (Authenticated Internet Protocol ). Diese Schlüsselerstellungsmodule werden zur Authentifizierung und zum Schlüsselaustausch in Internet Protocol Security (IPsec) verwendet. Wenn Sie den IKEEXT-Dienst anhalten oder deaktivieren, wird der IKE/AuthIP-Schlüsselaustausch mit Peercomputern deaktiviert. IPsec ist im Allgemeinen für die Verwendung von IKE/AuthIP konfiguriert, und das Anhalten oder Deaktivieren des IKEEXT-Diensts kann zu einem IPsec-Fehler führen und die Sicherheit des Systems gefährden. Es wird jedoch dringend empfohlen, den IKEEXT-Dienst auszuführen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start IKEEXT<br />
<br><br><br />
----<br />
==Input Director Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Input Director Background Process<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\Input Director\IDWinService.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start InputDirector<br />
<br><br><br />
----<br />
==Input Director Vista Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Input Director Vista Helper Service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\Input Director\IDVistaService.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start IDVistaService<br />
<br><br><br />
----<br />
==Integritätsschlüssel- und Zertifikatverwaltung==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt ein X.509-Zertifikat und Schlüsselverwaltungsdienste für den NAP-Agent (Network Access Protection) bereit. Die Durchsetzungstechnologien, die X.509-Zertifikate verwenden, funktionieren ohne diesen Dienst möglicherweise nicht ordnungsgemäß.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start hkmsvc<br />
<br><br><br />
----<br />
==Intelligenter Hintergrundübertragungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Überträgt Dateien im Hintergrund unter Verwendung von sich in Leerlauf befindender Netzwerkbandbreite. Falls dieser Dienst deaktiviert wird, können von BITS abhängige Anwendungen wie Windows Update oder MSN Explorer Programme und andere Informationen nicht automatisch heruntergeladen werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start BITS<br />
<br><br><br />
----<br />
==IP-Hilfsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Tunnelkonnektivität mithilfe von IPv6-Übergangstechnologien (IP6-zu-IP4, ISATAP, Portproxy und Teredo) und IP-HTTPS bereit. Wenn der Dienst beendet wird, verfügt der Computer nicht über die durch diese Technologien ermöglichten Konnektivitätsvorteile.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetSvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start iphlpsvc<br />
<br><br><br />
----<br />
==IPsec-Richtlinien-Agent==<br />
<u>'''Beschreibung:'''</u><br><br />
IPsec (Internet Protocol Security) unterstützt die Peerauthentifizierung auf Netzwerkebene, Datenursprungsauthentifizierung, Datenvertraulichkeit (Verschlüsselung) und Schutz vor Wiedergabeangriffen. Dieser Dienst erzwingt die IPsec-Richtlinien, die mit dem Snap-In ==IP-Sicherheitsrichtlinien== oder mit dem Befehlszeilentool ==netsh ipsec== erstellt wurden. Wenn Sie diesen Dienst beenden, können Probleme mit der Netzwerkkonnektivität auftreten, wenn die Richtlinie IPsec-Verbindungen erfordert. Zudem ist die Remoteverwaltung der Windows-Firewall nicht verfügbar, wenn dieser Dienst beendet wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k NetworkServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start PolicyAgent<br />
<br><br><br />
----<br />
==Kerberos-Schlüsselverteilungscenter==<br />
<u>'''Beschreibung:'''</u><br><br />
Auf Domänencontrollern ermöglicht dieser Dienst Benutzern, sich unter Verwendung des Kerberos-Authentifizierungsprotokolls am Netzwerk anzumelden. Wenn dieser Dienst auf einem Domänencontroller beendet wird, werden sich Benutzer nicht mehr am Netzwerk anmelden können. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start kdc<br />
<br><br><br />
----<br />
==Konfiguration für Remotedesktops==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Remotedesktop-Konfigurationsdienst (RDCS, Remote Desktop Configuration Service) ist für alle Konfigurations- und Sitzungsverwaltungsaktivitäten im Zusammenhang mit den Remotedesktopdiensten und Remotedesktop zuständig, die den SYSTEM-Kontext erfordern. Dazu gehören die sitzungsspezifischen temporären Ordner, Remotedesktopthemen und Remotedesktopzertifikate.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SessionEnv<br />
<br><br><br />
----<br />
==Kryptografiedienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet vier Verwaltungsdienste: den Katalogdatenbankendienst, der die Signaturen von Windows-Dateien bestätigt und die Installation neuer Programme ermöglicht; den geschützten Stammdienst, der diesem Computer vertrauenswürdige Zertifikate von Stammzertifizierungsstellen hinzufügt und diese daraus entfernt; den automatischen Aktualisierungsdienst für die Stammzertifizierung, der Stammzertifikate vom Windows Update abruft und Szenarien wie SSL aktiviert; und den Schlüsseldienst, von dem die Registrierung dieses Computers für Zertifikate unterstützt wird. Wird dieser Dienst beendet, funktionieren diese Verwaltungsdienste nicht ordnungsgemäß. Wird dieser Dienst deaktiviert, können alle ausdrücklich von diesem Dienst abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start CryptSvc<br />
<br><br><br />
----<br />
==KtmRm für Distributed Transaction Coordinator==<br />
<u>'''Beschreibung:'''</u><br><br />
Koordiniert Transaktionen zwischen dem Distributed Transaction Coordinator (MSDTC) und dem Kerneltransaktions-Manager (KTM). Wenn dieser Dienst nicht benötigt wird, sollten Sie ihn nicht starten. Wenn dieser Dienst benötigt wird, wird er von MSDTC und KTM automatisch gestartet. Wenn der Dienst deaktiviert ist, treten bei allen MSDTC-Transaktionen, die mit einem Kernelressourcen-Manager kommunizieren, Fehler auf, und Dienste, die von diesem explizit abhängig sind, können nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetworkServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start KtmRm<br />
<br><br><br />
----<br />
==Leistungsindikator-DLL-Host==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Remotebenutzern und 64-Bit-Prozessen die Abfrage von Leistungsindikatoren, die von 32-Bit-DLLs bereitgestellt werden. Wenn dieser Dienst beendet wird, können nur lokale Benutzer und 32-Bit-Prozesse die von den 32-Bit-DLLs bereitgestellten Leistungsindikatoren abfragen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\SysWow64\perfhost.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start PerfHost<br />
<br><br><br />
----<br />
==Leistungsprotokolle und -warnungen==<br />
<u>'''Beschreibung:'''</u><br><br />
"Leistungsprotokolle und -warnungen" sammelt Leistungsdaten von lokalen oder Remotecomputern basierend auf vorkonfigurierten Zeitplanparameter und schreibt die Daten dann in ein Protokoll oder löst eine Warnung aus. Wenn dieser Dienst beendet wird, werden keine Leistungsinformationen erfasst. Wenn dieser Dienst deaktiviert wird, können alle ausdrücklich von diesem Dienst abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start pla<br />
<br><br><br />
----<br />
<br />
==LiveUpdate==<br />
<u>'''Beschreibung:'''</u><br><br />
LiveUpdate Haupt-Engine<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\PROGRA~2\Symantec\LiveUpdate\LuComServer_3_3.EXE"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start LiveUpdate<br />
<br><br><br />
----<br />
<br />
==Microsoft .NET Framework NGEN v2.0.50727_X64==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft .NET Framework NGEN<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorsvw.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start clr_optimization_v2.0.50727_64<br />
<br><br><br />
----<br />
==Microsoft .NET Framework NGEN v2.0.50727_X86==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft .NET Framework NGEN<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start clr_optimization_v2.0.50727_32<br />
<br><br><br />
----<br />
==Microsoft .NET Framework NGEN v4.0.30319_X64==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft .NET Framework NGEN<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorsvw.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start clr_optimization_v4.0.30319_64<br />
<br><br><br />
----<br />
==Microsoft .NET Framework NGEN v4.0.30319_X86==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft .NET Framework NGEN<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorsvw.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start clr_optimization_v4.0.30319_32<br />
<br><br><br />
----<br />
==Microsoft Exchange Active Directory-Topologie==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt den Exchange-Diensten Active Directory-Topologieinformationen zur Verfügung. Wenn dieser Dienst beendet wurde, können die meisten Exchange-Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeADTopologyService.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeADTopology<br />
<br><br><br />
----<br />
<br />
==Microsoft Exchange EdgeSync==<br />
<u>'''Beschreibung:'''</u><br><br />
Repliziert Konfigurations- und Empfängerdaten von den Hub-Transport-Servern an die Edge-Transport-Server.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\Microsoft.Exchange.EdgeSyncSvc.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeEdgeSync<br />
<br><br><br />
----<br />
==Microsoft Exchange IMAP4==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt IMAP (Internet Message Access Protocol)-Dienste für Clients zur Verfügung. Wenn dieser Dienst beendet wird, können Clients mithilfe des IMAP4-Protokolls keine Verbindung mehr mit diesem Computer herstellen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\PopImap\Microsoft.Exchange.Imap4Service.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeImap4<br />
<br><br><br />
----<br />
==Microsoft Exchange POP3==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt POP3-Dienste (Post Office Protocol, Version 3) für Clients zur Verfügung. Wenn dieser Dienst beendet wird, kann von Clients mithilfe des POP3-Protokolls keine Verbindung mit diesem Computer mehr hergestellt werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\PopImap\Microsoft.Exchange.Pop3Service.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangePop3<br />
<br><br><br />
----<br />
==Microsoft Exchange Server Extension for Windows Server Backup==<br />
<u>'''Beschreibung:'''</u><br><br />
Enables Windows Server Backup users to back up and recover application data for Microsoft Exchange Server.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\wsbexchange.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wsbexchange<br />
<br><br><br />
----<br />
==Microsoft Exchange-Adressbuch==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Clientadressbuchverbindungen für Exchange.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\Microsoft.Exchange.AddressBook.Service.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeAB<br />
<br><br><br />
----<br />
==Microsoft Exchange-Antispamupdate==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Antispam-Updatesdienst von Microsoft Forefront Protection 2010 für Exchange Server<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\Microsoft.Exchange.AntispamUpdateSvc.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeAntispamUpdate<br />
<br><br><br />
----<br />
==Microsoft Exchange-Dateiverteilung==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft Exchange-Dateiverteilungsdienst.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeFDS.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeFDS<br />
<br><br><br />
----<br />
==Microsoft Exchange-Diensthost==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt einen Host für zahlreiche Microsoft Exchange-Dienste bereit<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\Microsoft.Exchange.ServiceHost.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeServiceHost<br />
<br><br><br />
----<br />
==Microsoft Exchange-Einschränkungen==<br />
<u>'''Beschreibung:'''</u><br><br />
Beschränkt die Rate der Benutzervorgänge.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeThrottling.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeThrottling<br />
<br><br><br />
----<br />
==Microsoft Exchange-Informationsspeicher==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet den Microsoft Exchange-Informationsspeicher. Hierzu gehören Postfachdatenbanken und Öffentliche Ordner-Datenbanken. Wenn dieser Dienst angehalten wird, sind Postfachdatenbanken und Öffentliche Ordner-Datenbanken auf diesem Computer nicht verfügbar. Wenn dieser Dienst deaktiviert wird, können explizit von ihm abhängige Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\store.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeIS<br />
<br><br><br />
----<br />
==Microsoft Exchange-Mailübergabe==<br />
<u>'''Beschreibung:'''</u><br><br />
Übermittelt Nachrichten vom Postfachserver an die Hub-Transport-Server.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeMailSubmission.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeMailSubmission<br />
<br><br><br />
----<br />
==Microsoft Exchange-Postfach-Assistenten==<br />
<u>'''Beschreibung:'''</u><br><br />
Führt die Hintergrundverarbeitung von Postfächern im Exchange-Informationsspeicher aus.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeMailboxAssistants.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeMailboxAssistants<br />
<br><br><br />
----<br />
==Microsoft Exchange-Postfachreplikation==<br />
<u>'''Beschreibung:'''</u><br><br />
Verarbeitet Verschiebungsanforderungen für Postfach.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeMailboxReplication.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeMailboxReplication<br />
<br><br><br />
----<br />
==Microsoft Exchange-Replikation==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Microsoft Exchange-Replikationsdienst stellt Replikationsfunktionen für Postfachdatenbanken auf Postfachservern in einer Datenbankverfügbarkeitsgruppe bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\msexchangerepl.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeRepl<br />
<br><br><br />
----<br />
==Microsoft Exchange-RPC-Clientzugriffsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Client-RPC-Verbindungen für Exchange.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\Microsoft.Exchange.RpcClientAccess.Service.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeRPC<br />
<br><br><br />
----<br />
==Microsoft Exchange-Suchindizierung==<br />
<u>'''Beschreibung:'''</u><br><br />
Fördert die Indizierung von Postfachinhalten, wodurch die Leistung der Inhaltssuche verbessert wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\Microsoft.Exchange.Search.ExSearch.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeSearch<br />
<br><br><br />
----<br />
==Microsoft Exchange-Systemaufsicht==<br />
<u>'''Beschreibung:'''</u><br><br />
Leitet Verzeichnissuchvorgänge an einen globalen Katalogserver für Legacy-Outlook-Clients weiter, generiert E-Mail-Adressen und Offlineadressbücher, aktualisiert Frei/Gebucht-Informationen für Legacy-Clients und verwaltet Berechtigungen und Gruppenmitgliedschaften für den Server. Wenn dieser Dienst deaktiviert wird, können explizit von ihm abhängige Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\bin\mad.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeSA<br />
<br><br><br />
----<br />
==Microsoft Exchange-Transport==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Microsoft Exchange-Transportdienst<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeTransport.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeTransport<br />
<br><br><br />
----<br />
==Microsoft Exchange-Transportprotokollsuche==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Fähigkeiten zur Remotesuche für Microsoft Exchange-Transportprotokolldateien bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeTransportLogSearch.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeTransportLogSearch<br />
<br><br><br />
----<br />
==Microsoft Exchange-Überwachung==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Anwendungen das Aufrufen von Exchange-Diagnose-Cmdlets.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\Microsoft.Exchange.Monitoring.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSExchangeMonitoring<br />
<br><br><br />
----<br />
==Microsoft iSCSI Software Target==<br />
<u>'''Beschreibung:'''</u><br><br />
Enables this computer to serve as an iSCSI target.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft iSCSI Software Target\WinTarget.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WinTarget<br />
<br><br><br />
----<br />
==Microsoft iSCSI-Initiator-Dienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Internet SCSI (iSCSI)-Sitzungen, die es zwischen diesem Computer und iSCSI-Remotezielgeräten gibt. Falls dieser Dienst angehalten wird, kann sich dieser Computer nicht an iSCSI-Zielen anmelden und auf diese zugreifen. Falls der Dienst deaktiviert wird, kann keiner der Dienste, die explizit von diesem Dienst abhängig sind, gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSiSCSI<br />
<br><br><br />
----<br />
==Microsoft Search (Exchange)==<br />
<u>'''Beschreibung:'''</u><br><br />
Quickly creates full-text indexes on content and properties of structured and semi-structured data to allow fast linguistic searches on this data<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft\Exchange Server\V14\Bin\msftesql.exe" -Exchange -s:Exchange -f:Exchange<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start msftesql-Exchange <br />
==Microsoft SharePoint Workspace Audit Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Microsoft SharePoint Workspace Audit Service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft Office\Office14\GROOVE.EXE" /auditservice<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Microsoft SharePoint Workspace Audit Service <br />
==Microsoft-Softwareschattenkopie-Anbieter==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet softwarebasierte Volumeschattenkopien des Volumeschattenkopie-Dienstes. Softwarebasierte Volumeschattenkopien können nicht verwaltet werden, wenn dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k swprv<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start swprv<br />
<br><br><br />
----<br />
==Mouse without Borders Service==<br />
<u>'''Beschreibung:'''</u><br><br />
Mouse without Borders Service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Microsoft Garage\Mouse without Borders\MouseWithoutBordersSvc.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MouseWithoutBordersSvc<br />
<br><br><br />
----<br />
==Multimediaklassenplaner==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht eine relative Prioritätseinstufung von Aufgaben basierend auf systemweiten Aufgabenprioritäten. Dies ist vor allem für Multimediaanwendungen bestimmt. Wenn dieser Dienst angehalten wird, werden die einzelnen Aufgaben auf die jeweilige Standardpriorität zurückgesetzt.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MMCSS<br />
<br><br><br />
----<br />
==MySQL==<br />
<u>'''Beschreibung:'''</u><br><br />
MySQL<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
== C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld== --defaults-file=== C:\Program Files\MySQL\MySQL Server 5.1\my.ini== MySQL<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MySQL<br />
<br><br><br />
----<br />
==NAP-Agent (Network Access Protection)==<br />
<u>'''Beschreibung:'''</u><br><br />
Mit dem NAP-Agent-Dienst (Network Access Protection) werden Integritätsinformationen für Clientcomputer in einem Netzwerk gesammelt und verwaltet. Mit den vom NAP-Agent gesammelten Informationen wird sichergestellt, dass der Clientcomputer über die erforderliche Software und die erforderlichen Einstellungen verfügt. Wenn ein Clientcomputer mit der Integritätsrichtlinie nicht kompatibel ist, kann dessen Netzwerkzugriff eingeschränkt werden, bis die Konfiguration aktualisiert wird. Je nach Konfiguration der Integritätsrichtlinie können Clientcomputer automatisch aktualisiert werden, sodass Benutzer schnell vollständigen Netzwerkzugriff wiedererlangen, ohne den Computer manuell aktualisieren zu müssen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start napagent<br />
<br><br><br />
----<br />
==Net.Msmq-Listeneradapter==<br />
<u>'''Beschreibung:'''</u><br><br />
Empfängt Aktivierungsanforderungen über die Protokolle ==net.msmq== und ==msmq.formatname== und übergibt sie an den Windows-Prozessaktivierungsdienst.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\SMSvcHost.exe" -NetMsmqActivator<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NetMsmqActivator<br />
<br><br><br />
----<br />
==Net.Pipe-Listeneradapter==<br />
<u>'''Beschreibung:'''</u><br><br />
Empfängt Aktivierungsanforderungen über das Protokoll ==net.pipe== und übergibt sie an den Windows-Prozessaktivierungsdienst.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\SMSvcHost.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NetPipeActivator<br />
<br><br><br />
----<br />
==Net.Tcp-Listeneradapter==<br />
<u>'''Beschreibung:'''</u><br><br />
Empfängt Aktivierungsanforderungen über das Protokoll ==net.tcp== und übergibt sie an den Windows-Prozessaktivierungsdienst.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\SMSvcHost.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NetTcpActivator<br />
<br><br><br />
----<br />
==Net.Tcp-Portfreigabedienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht es, TCP-Ports über das Protokoll ==Net.Tcp== freizugeben.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SMSvcHost.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NetTcpPortSharing<br />
<br><br><br />
----<br />
==Netzwerklistendienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Identifiziert die Netzwerke, mit denen der Computer eine Verbindung hergestellt hat, sammelt und speichert Eigenschaften für diese Netzwerke, und benachrichtigt Anwendungen, wenn sich diese Eigenschaften ändern.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start netprofm<br />
<br><br><br />
----<br />
==Netzwerkspeicher-Schnittstellendienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Dieser Dienst stellt Netzwerkbenachrichtigungen (z. B. beim Hinzufügen/Löschen von Schnittstellen) für Benutzermodusclients bereit. Wenn Sie diesen Dienst beenden, wird die Netzwerkkonnektivität getrennt. Wenn dieser Dienst deaktiviert wird, können andere Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start nsi<br />
<br><br><br />
----<br />
==Netzwerkverbindungen==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Objekte im Ordner ==Netzwerk- und Wählverbindungen==, in dem LAN- und Remoteverbindungen angezeigt werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Netman<br />
<br><br><br />
----<br />
==NLA (Network Location Awareness)==<br />
<u>'''Beschreibung:'''</u><br><br />
Sammelt und speichert Konfigurationsinformationen für das Netzwerk und benachrichtigt Programme, wenn diese Informationen geändert werden. Wenn dieser Dienst beendet wird, sind die Konfigurationsinformationen möglicherweise nicht verfügbar. Wenn dieser Dienst deaktiviert wird, können Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NlaSvc<br />
<br><br><br />
----<br />
==No-IP DUC Service==<br />
<u>'''Beschreibung:'''</u><br><br />
The No-IP DUC Service operates a background service to monitor your IP and submit updates to your account when the graphical version of the update client is not actively running on your system.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\No-IP\DUC30.exe -service<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start NoIPDUCService3<br />
<br><br><br />
----<br />
==Office 64 Source Engine==<br />
<u>'''Beschreibung:'''</u><br><br />
Speichert Installationsdateien, die für Updates und Reparieren verwendet werden, und ist zum Herunterladen von Setup-Updates und Watson-Fehlerberichten erforderlich.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ose64<br />
<br><br><br />
----<br />
==Office Software Protection Platform==<br />
<u>'''Beschreibung:'''</u><br><br />
Office Software Protection Platform Service (unlocalized description)<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Common Files\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPSVC.EXE"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start osppsvc<br />
<br><br><br />
----<br />
==Offlinedateien==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Offlinedateiendienst führt Wartungsaktivitäten am Offlinedateiendienst aus, reagiert auf Benutzeranmelde- und -abmeldeereignisse, implementiert die internen Komponenten der öffentlichen API, leitet interessante Ereignisse an Empfänger weiter, die an Offlineaktivitäten interessiert sind, und ändert den Cachestatus.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start CscService<br />
<br><br><br />
----<br />
==PC Monitor==<br />
<u>'''Beschreibung:'''</u><br><br />
Monitors the state of your computer.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\PC Monitor\PCMonitorSrv.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start PC Monitor <br />
==Plug & Play==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht dem Computer, Hardwareänderungen zu erkennen und sich ohne oder mit geringer Benutzerinteraktion darauf einzustellen. Beenden oder Deaktivieren dieses Dienstes wird die Systemstabilität beeinträchtigen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k DcomLaunch<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start PlugPlay<br />
<br><br><br />
----<br />
==PnP-X-IP-Busenumerator==<br />
<u>'''Beschreibung:'''</u><br><br />
Der PnP-X-Busenumeratordienst verwaltet den virtuellen Netzwerkbus. Er sucht mithilfe der SSDP/WS-Suchprotokolle nach den mit dem Netzwerk verbundenen Geräten und sorgt dafür, dass sie in PnP als vorhanden gekennzeichnet sind. Wenn dieser Dienst beendet oder deaktiviert wird, wird das Vorhandensein von NCD-Geräten in PnP nicht verwaltet. Alle PnP-X-basierten Szenarios funktionieren in diesem Fall nicht mehr.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start IPBusEnum<br />
<br><br><br />
----<br />
==POPcon: Exchange POP3 Connector==<br />
<u>'''Beschreibung:'''</u><br><br />
POPcon: Exchange POP3 Connector<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\POPcon\POPconSrv.exe -service<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start POPcon<br />
<br><br><br />
----<br />
==PostgreSQL Server 8.3==<br />
<u>'''Beschreibung:'''</u><br><br />
PostgreSQL service<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Symantec\Backup Exec\pddb\bin\pg_ctl.exe" runservice -N postgresql-8.3 -D "M:\Deduplizierungsspeicher\databases\pddb\data" -w<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start postgresql-8.3<br />
<br><br><br />
----<br />
==RAS-Verbindungsverwaltung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Einwähl- und VPN-Verbindungen zwischen diesem Computer und dem Internet oder anderen Remotenetzwerken. Wenn dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RasMan<br />
<br><br><br />
----<br />
==Registrierungsdienst für Microsoft Fibre Channel- Plattform==<br />
<u>'''Beschreibung:'''</u><br><br />
Registriert die Plattform mit allen verfügbaren Fibre Channel-Fabrics und verwaltet die Registrierungen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start FCRegSvc<br />
<br><br><br />
----<br />
==Remotedesktopdienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Benutzern das Herstellen einer interaktiven Verbindung mit einem Remotecomputer. Remotedesktop und Remotedesktop-Hostserver können nur zusammen mit diesem Dienst verwendet werden. Wenn Sie die Remoteverwendung dieses Computers verhindern möchten, deaktivieren Sie die Kontrollkästchen auf der Registerkarte ==Remote== in den Systemsteuerungsoptionen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k termsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TermService<br />
<br><br><br />
----<br />
==Remoteprozeduraufruf (RPC)==<br />
<u>'''Beschreibung:'''</u><br><br />
Der RPCSS-Dienst wird als Dienststeuerungs-Manager für COM- und DCOM-Server verwendet. Von ihm werden Objektaktivierungsanforderungen, Objektexporterauflösungen und die verteilte Garbage Collection für COM- und DCOM-Server ausgeführt. Wenn dieser Dienst angehalten oder deaktiviert wird, werden Programme, für die COM oder DCOM verwendet wird, nicht ordnungsgemäß ausgeführt. Es wird dringend empfohlen, den RPCSS-Dienst auszuführen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k rpcss<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RpcSs<br />
<br><br><br />
----<br />
==Remoteregistrierung==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Remotebenutzern, Registrierungseinstellungen dieses Computers zu verändern. Wenn dieser Dienst beendet wird, kann die Registrierung nur von lokalen Benutzern dieses Computers verändert werden. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k regsvc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RemoteRegistry<br />
<br><br><br />
----<br />
==Ressourcen-Manager für Dateiserver==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Dienste für die Verwaltung von Kontingenten und Dateiraster bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost -k srmsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SrmSvc<br />
<br><br><br />
----<br />
==Richtlinie zum Entfernen der Scmartcard==<br />
<u>'''Beschreibung:'''</u><br><br />
Lässt eine Konfiguration des Systems zu, bei der der Benutzerdesktop bei Entfernen der Smartcard gesperrt wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SCPolicySvc<br />
<br><br><br />
----<br />
==Richtlinienergebnissatzanbieter==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt einen Netzwerkdienst bereit, der Anforderungen zum Simulieren der Anwendung von Gruppenrichtlinieneinstellungen auf einen Zielbenutzer oder -computer in verschiedenen Situationen verarbeitet und einen sich daraus ergebenden Satz von Richtlinieneinstellungen berechnet.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\RSoPProv.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RSoPProv<br />
<br><br><br />
----<br />
==Routing und RAS==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet Routingdienste in LAN- und WAN-Netzwerkumgebungen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RemoteAccess<br />
<br><br><br />
----<br />
==RPC-/HTTP-Lastenausgleichsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Koordiniert Netzwerkdatenverkehr zwischen einem Array aus RPC-Proxys und Back-End-Servern, die RPC/HTTP verwenden, und leitet diesen weiter. Wird dieser Dienst beendet, während RPC-Proxys den Lastenausgleich verwenden, ist die optionale RPC-Proxykomponente möglicherweise nicht in der Lage, den korrekten Back-End-Server zu finden. Bei RPC/HTTP verwendenden Clients, die eine Verbindung zum RPC-Proxy herstellen, werden unter Umständen Fehlermeldungen angezeigt, oder es tritt eine Verlangsamung der Verbindungszeiten auf. Wird dieser Dienst deaktiviert, können alle Dienste, die ausdrücklich von diesem Dienst abhängig sind, nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k RPCHTTPLBS<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RPCHTTPLBS<br />
<br><br><br />
----<br />
==RPC-Endpunktzuordnung==<br />
<u>'''Beschreibung:'''</u><br><br />
Löst RPC-Schnittstellen-IDs für den Transport von Endpunkten auf. Wenn dieser Dienst angehalten oder deaktiviert wird, können Programme, für die Remoteprozeduraufruf-Dienste (Remote Procedure Call, RPC) verwendet werden, nicht ordnungsgemäß ausgeführt werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k RPCSS<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RpcEptMapper<br />
<br><br><br />
----<br />
==RPC-Locator==<br />
<u>'''Beschreibung:'''</u><br><br />
Unter Windows 2003 und früheren Windows-Versionen wird mit dem RPC-Locatordienst (Remote Procedure Call) die RPC-Namensdienstdatenbank verwaltet. Unter Windows Vista und höheren Windows-Versionen stellt dieser Dienst keine Funktionalität bereit und ist nur für Zwecke der Anwendungskompatibilität vorhanden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\locator.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RpcLocator<br />
<br><br><br />
----<br />
==Sekundäre Anmeldung==<br />
<u>'''Beschreibung:'''</u><br><br />
Aktiviert das Starten von Prozessen mit verschiedenen Anmeldeinformationen. Wenn dieser Dienst beendet wird, wird dieser Typ von Anmeldezugriff nicht mehr verfügbar sein. Wenn dieser Dienst deaktiviert wird, können alle Dienste, die explizit von diesem Dienst abhängen, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start seclogon<br />
<br><br><br />
----<br />
==Server==<br />
<u>'''Beschreibung:'''</u><br><br />
Unterstützt Datei-, Drucker- und Named-Piped-Freigabe für diesen Computer über das Netzwerk. Diese Funktionen sind nicht mehr verfügbar, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start LanmanServer<br />
<br><br><br />
----<br />
==Server für Threadsortierung==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet eine nach Reihenfolge geordnete Ausführung einer Gruppe von Threads innerhalb eines bestimmten Zeitraums.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start THREADORDER<br />
<br><br><br />
----<br />
==Serverdienst für verteilte Scanvorgänge==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das Senden gescannter Dokumente von Scannern an den Scanserver und leitet diese an die vorgesehenen Ziele.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k WSDScanServer<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ScanServer<br />
<br><br><br />
----<br />
==Shellhardwareerkennung==<br />
<u>'''Beschreibung:'''</u><br><br />
Zeigt Meldungen für Hardwareereignisse für automatische Wiedergabe an.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start ShellHWDetection<br />
<br><br><br />
----<br />
==Sicherheitskonto-Manager==<br />
<u>'''Beschreibung:'''</u><br><br />
Durch den Start dieses Diensts wird anderen Diensten signalisiert, dass die Sicherheitskontenverwaltung (SAM) bereit ist, Anforderungen anzunehmen. Wenn Sie diesen Dienst deaktivieren, wird verhindert, dass andere Dienste im System benachrichtigt werden, wenn die Sicherheitskontenverwaltung bereit ist. Dies kann wiederum dazu führen, dass diese Dienste nicht korrekt gestartet werden. Dieser Dienst sollte nicht deaktiviert werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SamSs<br />
<br><br><br />
----<br />
==Sitzungs-Manager für Desktopfenster-Manager==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Start- und Wartungsdienste für den Desktopfenster-Manager bereit<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start UxSms<br />
<br><br><br />
----<br />
==Smartcard==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet den Zugriff auf Smartcards, die von diesem Computer gelesen werden. Wenn dieser Dienst beendet wird, wird dieser Computer keine Smartcards mehr lesen können. Falls dieser Dienst deaktiviert wird, können die von diesem Dienst explizit abhängigen Dienste nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SCardSvr<br />
<br><br><br />
----<br />
==SNMP-Trap==<br />
<u>'''Beschreibung:'''</u><br><br />
Empfängt Trap-Nachrichten, die von lokalen oder Remote-SNMP-Agent generiert wurden, und leitet die Nachrichten an SNMP-Verwaltungsprogramme, die auf diesem Computer ausgeführt werden, weiter. SNMP-basierte Programme auf diesem Computer empfangen keine SNMP-Trap-Nachrichten, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\snmptrap.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SNMPTRAP<br />
<br><br><br />
----<br />
==Software Protection==<br />
<u>'''Beschreibung:'''</u><br><br />
Aktiviert das Herunterladen, die Installation und die Durchsetzung digitaler Lizenzen für Windows und Windows-Anwendungen. Wenn der Dienst deaktiviert wird, werden das Betriebssystem und lizenzierte Anwendungen in einem Benachrichtigungsmodus ausgeführt. Es wird dringend empfohlen, den Softwareschutzdienst nicht zu deaktivieren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\sppsvc.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start sppsvc<br />
<br><br><br />
----<br />
==Speicherbericht-Manager für Dateiserver==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Dienste zur Konfiguration, Zeitplanung und Erstellung von Speicherberichten bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\srmhost.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SrmReports<br />
<br><br><br />
----<br />
==SPP-Benachrichtigungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Softwarelizenzaktivierung und -benachrichtigung zur Verfügung<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start sppuinotify<br />
<br><br><br />
----<br />
==SQL Server (BKUPEXEC)==<br />
<u>'''Beschreibung:'''</u><br><br />
Provides storage, processing and controlled access of data and rapid transaction processing.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe" -sBKUPEXEC<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSSQL$BKUPEXEC<br />
<br><br><br />
----<br />
==SQL Server Active Directory Helper==<br />
<u>'''Beschreibung:'''</u><br><br />
Enables integration with Active Directories.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqladhlp90.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MSSQLServerADHelper<br />
<br><br><br />
----<br />
==SQL Server Browser==<br />
<u>'''Beschreibung:'''</u><br><br />
Provides SQL Server connection information to client computers.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SQLBrowser<br />
<br><br><br />
----<br />
==SQL Server VSS Writer==<br />
<u>'''Beschreibung:'''</u><br><br />
Provides the interface to backup/restore Microsoft SQL server through the Windows VSS infrastructure.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
"C:\Program Files\Microsoft SQL Server\90\Shared\sqlwriter.exe"<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SQLWriter<br />
<br><br><br />
----<br />
==SSDP-Suche==<br />
<u>'''Beschreibung:'''</u><br><br />
Sucht nach Netzwerkgeräten und -diensten, die das SSDP-Suchprotokoll verwenden, z. B. UPnP-Geräte. Kündigt zudem SSDP-Geräte und -dienste an, die auf dem lokalen Computer ausgeführt werden. Wenn dieser Dienst gestoppt wird, werden SSDP-basierte Geräte nicht entdeckt. Wenn dieser Dienst deaktiviert ist, können alle Dienste, die explizit von diesem Dienst abhängen, nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SSDPSRV<br />
<br><br><br />
----<br />
==SSTP-Dienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Unterstützt SSTP (Secure Socket Tunneling-Protokoll), um über VPN eine Verbindung mit Remotecomputern herzustellen. Wenn dieser Dienst deaktiviert ist, können Benutzer SSTP nicht für den Zugriff auf Remoteserver verwenden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start SstpSvc<br />
<br><br><br />
----<br />
==Standortübergreifender Messagingdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht den Nachrichtenaustausch zwischen Computern, die Windows Server-Standorte ausführen. Wenn dieser Dienst beendet wird, werden keine Nachrichten mehr ausgetauscht oder Routinginformationen für andere Dienste berechnet. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\ismserv.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start IsmServ<br />
<br><br><br />
----<br />
==Stromversorgung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet die Energierichtlinie und die Zustellung der Energierichtlinienbenachrichtigung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k DcomLaunch<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Power<br />
<br><br><br />
----<br />
==Tablet PC-Eingabedienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht die Stift- und Freihandfunktionalität von Tablet PC.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k TabletInputServiceGroup<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TabletInputService<br />
<br><br><br />
----<br />
==TCP/IP-NetBIOS-Hilfsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet Unterstützung für den NetBIOS-über-TCP/IP-Dienst (NetBT) und die NetBIOS-Namensauflösung für Clients im Netzwerk, so dass Benutzer Daten gemeinsam nutzen, drucken und sich am Netzwerk anmelden können. Diese Funktionen sind nicht mehr verfügbar, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start lmhosts<br />
<br><br><br />
----<br />
==Telefonie==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet Telefonie-API-Unterstützung (TAPI) für Programme, die lokale und über das LAN auf Servern, die diesen Dienst ebenfalls ausführen, angebundene Telefoniegeräte steuern.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k tapisrv<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TapiSrv<br />
<br><br><br />
----<br />
==Telnet==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht einem Remotebenutzer, sich an diesem Computer anzumelden und Programme auszuführen. Unterstützt verschiedene TCP/IP-Telnet-Clients, einschließlich UNIX-basierten und Windows-basierten Computern. Wenn dieser Dienst angehalten wird, ist der Remotezugriff möglicherweise nicht mehr verfügbar. Wenn dieser Dienst deaktiviert wird, können alle Dienste, die explizit von diesem Dienst abhängen, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\tlntsvr.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TlntSvr<br />
<br><br><br />
----<br />
==TPM-Basisdienste==<br />
<u>'''Beschreibung:'''</u><br><br />
Aktiviert den Zugriff auf das TPM (Trusted Platform Module). Es bietet hardwarebasierte kryptographische Dienste für Systemkomponenten und -anwendungen. Wird dieser Dienst beendet oder deaktiviert, können von den Anwendungen keine durch das TPM geschützten Schlüssel verwendet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TBS<br />
<br><br><br />
----<br />
==TRIGONE Remote System Monitor Server==<br />
<u>'''Beschreibung:'''</u><br><br />
<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Program Files (x86)\TRIGONE\Remote System Monitor Server\RemoteSystemMonitorService.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RemoteSystemMonitorService<br />
<br><br><br />
----<br />
==Überwachung verteilter Verknüpfungen (Client)==<br />
<u>'''Beschreibung:'''</u><br><br />
Hält Verknüpfungen für NTFS-Dateien auf einem Computer oder zwischen Computern in einem Netzwerk aufrecht.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TrkWks<br />
<br><br><br />
----<br />
==Unterstützung in der Systemsteuerung unter Lösungen für Probleme==<br />
<u>'''Beschreibung:'''</u><br><br />
Dieser Dienst bietet Unterstützung für das Anzeigen, Senden und Löschen von Problemberichten auf Systemebene für das Applet ==Lösungen für Probleme== in der Systemsteuerung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wercplsupport<br />
<br><br><br />
----<br />
==UPnP-Gerätehost==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht es, dass UPnP-Geräte auf diesem Computer gehostet werden können. Wenn dieser Dienst gestoppt wird, sind alle gehosteten UPnP-Geräte nicht mehr betriebsbereit, und es können keine weiteren gehosteten Geräte hinzugefügt werden. Wenn dieser Dienst deaktiviert ist, können alle Dienste, die explizit von diesem Dienst abhängen, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start upnphost<br />
<br><br><br />
----<br />
==Verbindungsschicht-Topologieerkennungs-Zuordnungsprogramm==<br />
<u>'''Beschreibung:'''</u><br><br />
Erstellt eine Netzwerkübersicht, die Computer- und Gerätetopologieinformationen (d.h. Konnektivitätsinformationen) und Metadaten enthält, die jeden Computer und jedes Gerät beschreiben. Wenn dieser Dienst deaktiviert wird, wird die Netzwerkübersicht nicht mehr richtig funktionieren.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start lltdsvc<br />
<br><br><br />
----<br />
==Verschlüsselndes Dateisystem (EFS)==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt die Kerntechnologie für die Dateiverschlüsselung dar, die zum Speichern von verschlüsselten Dateien auf NTFS-Dateisystemvolumes verwendet wird. Wenn dieser Dienst angehalten oder deaktiviert wird, können Anwendungen nicht auf verschlüsselte Dateien zugreifen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\lsass.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start EFS<br />
<br><br><br />
----<br />
==Verwaltung für automatische RAS-Verbindung==<br />
<u>'''Beschreibung:'''</u><br><br />
Erstellt eine Verbindung zu einem Remotenetzwerk, wenn ein Programm eine Remote-DNS- oder -NetBIOS-Adresse referenziert.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start RasAuto<br />
<br><br><br />
----<br />
==Virtueller Datenträger==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Verwaltungsdienste für Datenträger, Volumes, Dateisysteme und Speicherarrays bereit.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\vds.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start vds<br />
<br><br><br />
----<br />
==Volumeschattenkopie==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet und implementiert Volumeschattenkopien, die zu Sicherungs- und anderen Zwecken verwendet werden. Wenn dieser Dienst beendet wird, werden keine Schattenkopien für Sicherungen verfügbar sein und die Sicherung kann eventuell fehlschlagen. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\vssvc.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start VSS<br />
<br><br><br />
----<br />
==WebClient==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht Windows-basierten Programmen, Internet-basierte Dateien zu erstellen, darauf zuzugreifen und sie zu verändern. Wenn dieser Dienst beendet wird, werden diese Funktionen nicht mehr zur Verfügung stehen. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k WebClientGroup<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WebClient<br />
<br><br><br />
----<br />
==Windows CardSpace==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht die sichere Erstellung, Verwaltung und Veröffentlichung digitaler Identitäten.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
== C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\infocard.exe==<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start idsvc<br />
<br><br><br />
----<br />
==Windows Defender==<br />
<u>'''Beschreibung:'''</u><br><br />
Schutz gegen Spyware und möglicherweise unerwünschte Software<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k secsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WinDefend<br />
<br><br><br />
----<br />
==Windows Driver Foundation - Benutzermodus-Treiberframework==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Benutzermodus-Treiberhostprozesse.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wudfsvc<br />
<br><br><br />
----<br />
==Windows Installer==<br />
<u>'''Beschreibung:'''</u><br><br />
Fügt Anwendungen, die als ein Windows Installer-Paket (*.msi) angeboten werden, hinzu bzw. ändert oder entfernt sie. Wenn dieser Dienst deaktiviert ist, können alle Dienste, die explizit davon abhängen, nicht gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\msiexec.exe /V<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start msiserver<br />
<br><br><br />
----<br />
==Windows Modules Installer==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das Installieren, Ändern und Entfernen von Windows-Updates und optionalen Komponenten. Wenn dieser Dienst deaktiviert ist, können beim Installieren oder Deinstallieren von Windows-Updates auf diesem Computer Fehler auftreten.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\servicing\TrustedInstaller.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start TrustedInstaller<br />
<br><br><br />
----<br />
==Windows Presentation Foundation-Schriftartcache 3.0.0.0==<br />
<u>'''Beschreibung:'''</u><br><br />
Optimiert die WPF-Anwendungen (Windows Presentation Foundation), indem häufig verwendete Schriftartdaten zwischengespeichert werden. WPF-Anwendungen starten diesen Dienst, wenn er nicht bereits gestartet wurde. Der Dienst kann deaktiviert werden, dadurch wird jedoch die Leistung der WPF-Anwendungen vermindert.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\Microsoft.Net\Framework64\v3.0\WPF\PresentationFontCache.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start FontCache3.0.0.0<br />
<br><br><br />
----<br />
==Windows Update==<br />
<u>'''Beschreibung:'''</u><br><br />
Erkennung, Herunterladen und Installation von Updates für Windows und andere Programme. Wenn der Dienst deaktiviert ist, können ==Windows Update== bzw. die Funktion ==automatische Updates== nicht verwendet werden. Außerdem können Programme dann die Windows Update Agent-Programmierschnittstelle (WUA API) nicht verwenden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wuauserv<br />
<br><br><br />
----<br />
==Windows-Audio==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Audioinhalte für Windows-basierte Programme. Wenn dieser Dienst beendet wird, funktionieren Audiogeräte und -effekte nicht ordnungsgemäß. Wenn dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst explizit abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AudioSrv<br />
<br><br><br />
----<br />
==Windows-Audio-Endpunkterstellung==<br />
<u>'''Beschreibung:'''</u><br><br />
Verwaltet Audiogeräte für den Windows-Audiodienst. Wenn dieser Dienst beendet wird, funktionieren Audiogeräte und -effekte nicht ordnungsgemäß. Wenn dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst explizit abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start AudioEndpointBuilder<br />
<br><br><br />
----<br />
==Windows-Bilderfassung (WIA)==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Bilderfassungsdienste für Scanner und Kameras zur Verfügung<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k imgsvc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start stisvc<br />
<br><br><br />
----<br />
==Windows-Dienst für Schriftartencache==<br />
<u>'''Beschreibung:'''</u><br><br />
Optimiert die Leistung von Anwendungen durch Speichern häufig verwendeter Schriftartendaten. Dieser Dienst wird von Anwendungen gestartet, wenn er nicht bereits ausgeführt wird. Er kann deaktiviert werden, dadurch wird jedoch die Leistung von Anwendungen herabgesetzt.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceAndNoImpersonation<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start FontCache<br />
<br><br><br />
----<br />
==Windows-Ereignisprotokoll==<br />
<u>'''Beschreibung:'''</u><br><br />
Dieser Dienst verwaltet Ereignisse und Ereignisprotokolle. Er unterstützt die Protokollierung, Abfrage und Abonnierung von Ereignissen sowie die Archivierung von Ereignisprotokollen und die Verwaltung von Ereignismetadaten. Er kann Ereignisse im XML- und Nur-Text-Format anzeigen. Durch das Beenden dieses Dienstes können die Sicherheit und Zuverlässigkeit des Systems beeinträchtigt werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start eventlog<br />
<br><br><br />
----<br />
==Windows-Ereignissammlung==<br />
<u>'''Beschreibung:'''</u><br><br />
Dieser Dienst verwaltet permanente Abonnements für Ereignisse von Remotequellen, die das WS-Verwaltungsprotokoll unterstützen. Hierzu gehören Windows Vista-Ereignisprotokolle sowie Hardware- und IPMI-fähige Ereignisquellen. Der Dienst speichert weitergeleitete Ereignisse in einem lokalen Ereignisprotokoll. Falls dieser Dienst beendet oder deaktiviert wird, können Ereignisabonnements nicht erstellt und weitergeleitete Ereignisse nicht angenommen werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Wecsvc<br />
<br><br><br />
----<br />
==Windows-Farbsystem==<br />
<u>'''Beschreibung:'''</u><br><br />
Vom WcsPlugInService-Dienst werden Plug-In-Module von Drittanbietern für Farbgerätemodelle und Palettenzuordnungsmodelle des Windows-Farbsystems gehostet. Diese Plug-In-Module sind herstellerspezifische Erweiterungen zu den standardmäßigen Farbgerätemodellen und Palettenzuordnungsmodellen des Windows-Farbsystems. Wird der WcsPlugInService-Dienst angehalten oder deaktiviert, wird dieses Erweiterungsfeature deaktiviert, und vom Windows-Farbsystem wird die Verarbeitung nach dem Grundmodell anstatt nach der vom Hersteller gewünschten Verarbeitung verwendet. Dies kann zu ungenauem Farbrendering führen.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k wcssvc<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WcsPlugInService<br />
<br><br><br />
----<br />
==Windows-Fehlerberichterstattungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht das Berichterstatten über Fehler bei nicht mehr funktionierenden und reagierenden Programmen und das Angeben von Lösungen. Ermöglicht außerdem das Generieren von Protokollen für Diagnose- und Reparaturdienste. Wenn dieser Dienst beendet wird, funktioniert die Fehlerberichterstattung möglicherweise nicht ordnungsgemäß, und die Ergebnisse von Diagnosediensten und Reparaturen werden möglicherweise nicht angezeigt.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k WerSvcGroup<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WerSvc<br />
<br><br><br />
----<br />
==Windows-Firewall==<br />
<u>'''Beschreibung:'''</u><br><br />
Die Windows-Firewall trägt zum Schutz des Computers bei, indem der Zugriff durch nicht autorisierte Benutzer auf den Computer über das Internet bzw. ein Netzwerk verhindert wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalServiceNoNetwork<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start MpsSvc<br />
<br><br><br />
----<br />
==Windows-Prozessaktivierungsdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Windows-Prozessaktivierungsdienst (WAS) bietet Dienste zur Prozessaktivierung, Ressourcenverwaltung und Zustandsverwaltung von Anwendungen mit Nachrichtenunterstützung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k iissvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WAS<br />
<br><br><br />
----<br />
==Windows-Remoteverwaltung (WS-Verwaltung)==<br />
<u>'''Beschreibung:'''</u><br><br />
Der Windows-Remoteverwaltungsdienst (WinRM) implementiert das WS-Verwaltungsprotokoll für die Remoteverwaltung. Die WS-Verwaltung ist ein Webdienstprotokoll für die Remoteverwaltung von Software und Hardware. Der WinRM-Dienst hört das Netzwerk auf WS-Verwaltungsanforderungen ab und verarbeitet diese. Er muss mit dem Befehlszeilentool ==winrm== oder über Gruppenrichtlinien mit einem Listener konfiguriert werden, damit er das Netzwerk abhört. Er bietet Zugriff auf WMI-Daten und ermöglicht die Ereigniserfassung. Die Erfassung und Abonnierung von Ereignissen setzt voraus, dass der Dienst ausgeführt wird. WinRM-Nachrichten verwenden HTTP und HTTPS als Transportprotokoll. Der WinRM-Dienst ist nicht von IIS abhängig, ist jedoch zur Freigabe eines Anschlusses mit IIS auf demselben Computer vorkonfiguriert. Das URL-Präfix ==/wsman== ist für den WinRM-Dienst reserviert. Um Konflikte mit IIS zu vermeiden, sollten Administratoren sicherstellen, dass für in IIS gehostete Websites nicht das URL-Präfix ==/wsman== verwendet wird.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\System32\svchost.exe -k NetworkService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WinRM<br />
<br><br><br />
----<br />
==Windows-Verwaltungsinstrumentation==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet eine standardmäßige Schnittstelle und Objektmodell zum Zugreifen auf Verwaltungsinformationen über das Betriebssystem, Geräte, Anwendungen und Dienste. Die meiste Windows-basierte Software kann nicht ordnungsgemäß ausgeführt werden, falls dieser Dienst beendet wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start Winmgmt<br />
<br><br><br />
----<br />
==Windows-Zeitgeber==<br />
<u>'''Beschreibung:'''</u><br><br />
Behält Datums- und Zeitsynchronisation auf allen Clients und Servern im Netzwerk bei. Wird dieser Dienst beendet, sind Datums- und Zeitsynchronisation nicht verfügbar. Wird dieser Dienst deaktiviert, können keine explizit von der Synchronisation abhängigen Dienste gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start W32Time<br />
<br><br><br />
----<br />
==WinHTTP-Web Proxy Auto-Discovery-Dienst==<br />
<u>'''Beschreibung:'''</u><br><br />
WinHTTP implementiert den HTTP-Clientstapel und bietet Entwicklern eine Win32-API und COM-Automatisierungskomponente zum Senden von HTTP-Anforderungen und zum Empfangen von Antworten. Außerdem unterstützt WinHTTP die automatische Erkennung von Proxykonfigurationen über die entsprechende Implementierung des WPAD-Protokolls (Web Proxy Auto-Discovery).<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalService<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start WinHttpAutoProxySvc<br />
<br><br><br />
----<br />
==WMI-Leistungsadapter==<br />
<u>'''Beschreibung:'''</u><br><br />
Bietet Leistungsbibliotheksinformationen der Windows-Verwaltungsinstrumentationsanbieter für Clients im Netzwerk. Dieser Dienst wird nur ausgeführt, wenn das Leistungsdaten-Hilfsprogramm aktiviert ist.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\wbem\WmiApSrv.exe<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start wmiApSrv<br />
<br><br><br />
----<br />
==WWW-Publishingdienst==<br />
<u>'''Beschreibung:'''</u><br><br />
Stellt Webverbindungen und Webverwaltung mithilfe des Internetinformationsdienste-Managers zur Verfügung.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k iissvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start W3SVC<br />
<br><br><br />
----<br />
==Zertifikatverteilung==<br />
<u>'''Beschreibung:'''</u><br><br />
Kopiert Benutzerzertifikate und Stammzertifikate von Smartcards in den Zertifikatspeicher des aktuellen Benutzers. Erkennt, wenn eine Smartcard in einen Smartcardleser eingelegt wird und installiert ggf. den Smartcard-Plug & Play-Minitreiber.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k netsvcs<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start CertPropSvc<br />
<br><br><br />
----<br />
==Zugriff auf Eingabegeräte==<br />
<u>'''Beschreibung:'''</u><br><br />
Ermöglicht einen Standardeingabezugriff auf Eingabegeräte (HID-Geräte), der die Verwendung von vordefinierten Abkürzungstasten auf Tastaturen, Fernbedienungen und anderen Multimediageräten aktiviert und unterstützt. Wenn dieser Dienst beendet wird, werden die von diesem Dienst gesteuerten Abkürzungstasten nicht mehr funktionieren. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.<br />
<br><br><u>'''Pfad zur EXE-Datei:'''</u><br><br />
C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted<br />
<u>'''Start des Dienstes per Batch:'''</u><br><br />
net start hidserv<br />
<br><br><br />
----<br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 21:27, 1. Jun. 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Windows_2000_/_2003_/_2008_(R2)_/_XP_/_Vista_/_7_Festplatte_erweitern_im_laufenden_Betrieb_mit_Diskpart&diff=9486Windows:Windows 2000 / 2003 / 2008 (R2) / XP / Vista / 7 Festplatte erweitern im laufenden Betrieb mit Diskpart2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_XP]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]<br />
Gerade unter VMware ist es leichtes, eine Festplatte einer laufenden VM zu erweitern. Dazu die Einstellungen der VM bearbeiten und für die betreffende Festplatte einfach einen größeren Wert einstellen.<br><br />
<br><br />
Das geht nicht immer mit der Bootpartition (C:\) und am besten wenn wir für jeden Laufwerksbuchstaben auch eine eigene Festplattendatei verwenden.<br><br />
<br><br />
Ist die Platte vergrößert gehen wir wie folgt vor (siehe auch Bilder):<br><br />
* Eingabeaufforderung öffnen und folgende Befehle eintippen<br />
diskpart : Einfach Enter drücken, es startet eine interaktive Sitzung<br />
select disk 1 : Nummer der Festplatte - siehe Festplattenmanager<br />
select partition 1 : Nummer der Partition darauf - idealerweise gibt es nur eine<br />
select volume 1 : bei Primären Partitionen immer 1, Erweiterte Partitionen könnten mehrer haben<br />
extend : Erweitern!<br />
exit : Fertig!<br />
<br><br />
Nachfolgend einmal mit Beispielbildern:<br><br />
<br><br />
[[Datei:Windows-Festplatte-erweitern-diskpart-001.png]]<br><br />
<br><br />
[[Datei:Windows-Festplatte-erweitern-diskpart-002.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 20:44, 7. Jun. 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Robocopy_unter_Linux%3F%C2%B4&diff=9485Windows:Robocopy unter Linux?´2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:MediaWiki]][[Kategorie:Internet]][[Kategorie:Batch]][[Kategorie:Web]][[Kategorie:Linux]]<br />
Als schneller Helfer:<br><br />
<br><br />
robocopy Quellverzeichnis Zielverzeichnis /MIR /R:1<br />
entspricht unter Linux zu 99,9% diesem Befehl:<br />
nc -avx --delete --progress Quellverzeichnis/ Zielverzeichnis<br />
die Option<br />
--delete<br />
löscht im Gegensatz zu Robocopy bereits vor dem kopieren alle nicht mehr vorhandenen Dateien (Sprich erst den Platz freigeben und dann kopieren).<br><br />
Soll es wie unter Windows beim Kopieren erfolgen, so nimm<br />
--del<br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 11:37, 20. Jun. 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Rechner_oder_Server_per_Batch/Script_remote_neu_starten&diff=9484Windows:Rechner oder Server per Batch/Script remote neu starten2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_XP]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]][[Kategorie:Batch]]<br />
<big>'''Die fertigen Batch-Dateien stehen weiter unten!'''</big><br />
{{Trennlinie-02}}<br />
In jedem Windows ist der Befehl<br />
shutdown<br />
eingebaut. Diese kann sowohl den lokalen Rechner als auch andere Rechner im Netzwerk herunterfahren oder neu starten.<br><br />
<br><br />
Am besten funktioniert das natürlich innerhalb einer Domäne.<br><br />
<br><br />
Zusätzlich zu allen Parametern kann man ggf. noch<br />
/f<br />
angeben - das schliesst ggf. alle Anwendungen ohne Rückfrage. Word würde also z.B. geschlossen ohne das Dokument zu speichern.<br><br />
<br><br />
----<br />
= Beispiel Neustart =<br />
<br><br />
shutdown /r /M \\SERVER1 /t 60 /c "Neustart Test per shutdown.exe" /d p:0:0<br />
<br />
shutdown : Der eigenliche Befehl<br />
/r : Neu starten<br />
/M \\SERVER1 : welcher Rechner soll neu gestartet werden? Hier '''SERVER1'''<br />
/t 60 : Wartezeit in Sekunden vor dem Neustart<br />
/c "Neustart Test ..." : Kommentar, wir im Ereignisprotokoll eingetragen<br />
/d p:0:0 : Grund für den Neustart - hier: '''''Anderer Grund (geplant)'''''<br />
<br><br />
<br><br />
----<br />
= Beispiel Herunterfahren =<br />
<br><br />
shutdown /s /M \\SERVER1 /t 10 /c "Nur so" /d p:0:0<br />
<br />
shutdown : Der eigenliche Befehl<br />
/s : Herunterfahren<br />
/M \\SERVER1 : welcher Rechner soll heruntergefahren werden? Hier '''SERVER1'''<br />
/t 10 : Wartezeit in Sekunden vor dem Neustart<br />
/c "Nur so" : Kommentar, wir im Ereignisprotokoll eingetragen<br />
/d p:0:0 : Grund für den Neustart - hier: '''''Anderer Grund (geplant)'''''<br />
<br><br />
<br><br />
----<br />
= Batchdatei für Neustart mehrer Rechner Variante 1 =<br />
Bei dieser Variante haben wir nur eine einzige Datei. Die Namen der Rechner stehen direkt im Script.<br><br />
<br><br />
'''[[Media:RechnerNeuStartenV1.txt|RechnerNeuStartenV1.txt]]'''<br><br />
<br><br />
<source lang="DOS"><br />
@echo off<br />
REM ** RechnerNeuStartenV1.cmd ***********************************************<br />
REM ** 2012 von Bernhard Linz für znil.net ***********************************<br />
REM ** admin@znil.de *********************************************************<br />
<br />
REM ## 1. Wartezeit zwischen Neustart der einzelnen Rechner angeben:<br />
set WARTEZEIT=30<br />
REM ## 2. Wieviele Sekunden soll der Benutzer eine Warnung bekommen?<br />
set WARNUNGSZEIT=600<br />
<br />
REM ## 3. Namen der Rechner die neu gestartet werden soll<br />
REM ## NetBIOS, DNS-Name oder IP-Adresse<br />
REM ## Zeilen kopieren , immer das 'call :RESTART' davor lassen<br />
call :RESTART PC100<br />
call :RESTART PC120.domain.local<br />
call :RESTART 192.168.169.170<br />
call :RESTART Mailserver<br />
call :RESTART Fileserver<br />
<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
REM ## ab hier nichts ändern #################################################<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
<br />
goto ENDE<br />
<br />
REM ** Hauptschleife<br />
:RESTART<br />
echo.<br />
echo Verarbeite Rechner/Server: %1<br />
echo Warte %WARTEZEIT% Sekunden ...<br />
ping -n %WARTEZEIT% %1 >NUL<br />
echo Initiiere Neustart mit Warnung von %WARNUNGSZEIT% fuer den Benutzer ...<br />
shutdown /r /M \\%1 /t %WARNUNGSZEIT% /f /c "RechnerNeuStartenV1.cmd" /d p:0:0<br />
echo Neustart initiiert!<br />
REM /f ist eigentlich überflüssig - macht er sowieso wenn /t einen Wert größer 0 hat<br />
goto :EOF<br />
<br />
REM ##########################################################################<br />
:ENDE<br />
</source><br />
<br><br />
<br><br />
----<br />
<br />
= Batchdatei für Neustart mehrer Rechner Variante 2 =<br />
Bei dieser Variante lesen wir die Namen der Rechner aus einer zweiten Textdatei ein. In der Textdatei muss pro Zeile ein Rechnername stehen.<br><br />
<br><br />
'''[[Media:RechnerNeuStartenV2.txt|RechnerNeuStartenV2.txt]]'''<br><br />
<br><br />
<source lang="DOS"><br />
@echo off<br />
@echo off<br />
REM ** RechnerNeuStartenV2.cmd ***********************************************<br />
REM ** 2012 von Bernhard Linz für znil.net ***********************************<br />
REM ** admin@znil.de *********************************************************<br />
<br />
REM ## 1. Name der Textdatei aus der die Rechner ausgelesen werden sollen,<br />
REM ## Nur ein Name pro Zeile<br />
set LISTE=Reboot_XP-test.txt<br />
<br />
REM ## 2. Wieviele Sekunden soll der Benutzer eine Warnung bekommen?<br />
set WARNUNGSZEIT=600<br />
<br />
REM ## 3. Wartezeit zwischen Neustart der einzelnen Rechner angeben:<br />
set WARTEZEIT=30<br />
<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
REM ## ab hier nichts ändern #################################################<br />
REM ##########################################################################<br />
REM ##########################################################################<br />
<br />
for /F "eol=# tokens=1" %%i in (%LISTE%) do call :RESTART %%i<br />
<br />
goto ENDE<br />
<br />
REM ** Hauptschleife<br />
:RESTART<br />
echo.<br />
echo Verarbeite Rechner/Server: %1<br />
echo Warte %WARTEZEIT% Sekunden ...<br />
ping -n %WARTEZEIT% %1 >NUL<br />
echo Initiiere Neustart mit Warnung von %WARNUNGSZEIT% fuer den Benutzer ...<br />
shutdown /r /M \\%1 /t %WARNUNGSZEIT% /f /c "RechnerNeuStartenV2.cmd" /d p:0:0<br />
echo Neustart initiiert!<br />
REM /f ist eigentlich überflüssig - macht er sowieso wenn /t einen Wert größer 0 hat<br />
goto :EOF<br />
<br />
REM ##########################################################################<br />
:ENDE<br />
</source><br />
<br><br />
<br><br />
{{Trennlinie-02}}<br />
--[[Benutzer:BLinz|Bernhard Linz]] 12:19, 23. Apr. 2012 (CEST)<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Per_Batch_Berechtigungen_auf_Ordner_inklusive_Unterordner_setzen_mit_icacls&diff=9483Windows:Per Batch Berechtigungen auf Ordner inklusive Unterordner setzen mit icacls2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Batch]]<br />
{{Hinweis| Am 09.10.2013 wurde dieser Artikel überarbeitet und erweitert}}<br><br />
Ich habe öfters die Anforderung, Rechte von Ordner und Dateien per Batch / Skript neu zu setzen. Irgendwie erfinde ich das Rad dabei jedesmal neu - deshalb schreibe ich hier nun endlich mal eine Lösung für das nächste mal nieder :-)<br><br />
<br><br />
Ich führe hier die aus meiner Sicht wichtigsten Parameter auf - den Rest bitte der <code>'''icacls'''</code> Hilfe entnehmen.<br><br />
<code>'''icacls'''</code> ist übrigends bei Windows dabei - das muss nicht erst heruntergeladen werden :-)<br><br />
----<br />
== Allgeiner Aufruf von icalcs ==<br />
=== Rechte gewähren ===<br />
icacls [Pfad]Datei-oder-Ordner /grant Benutzer-oder-Gruppe:[(CI)(OI)](Rechte)<br />
Bedeutungen<br />
icacls : Der eigentliche Befehl (in Windows eingebaut)<br />
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?<br />
/grant : Wir wollen Rechte gewähren<br />
Benutzer-oder-Gruppe : z.B. "Jeder", "Domain\Domänen-Benutzer"<br />
: : Wichtig! Der Doppelpunkt zwischen Gruppe/Benutzer und den Rechten<br />
(CI)(OI) : Veerben auf alle Unterordner und Dateien (macht nur bei Ordner sinn)<br />
(Rechte) : (F) = Vollzugriff<br />
(M) = Ändern<br />
(RX) = Lesen und Ausführen<br />
(N) = Keinen Zugriff<br />
<br><br />
<br><br />
=== Rechte entziehen / Benutzer entfernen ===<br />
Die einfachste Form ist, neben dem setzen von (N) das wir den Benutzer / die Gruppe von der Datei entfernen:<br><br />
icacls [Pfad]Datei-oder-Ordner /remove Benutzer-oder-Gruppe<br />
Bedeutungen:<br />
icacls : Der eigentliche Befehl (in Windows eingebaut)<br />
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?<br />
/remove : Wir wollen einen Benutzer oder Gruppe entfernen<br />
Benutzer-oder-Gruppe : z.B. "Jeder", "Domain\Domänen-Benutzer"<br />
<br><br />
<br><br />
----<br />
=== Vererbung ein oder ausschalten ===<br />
Wer versucht einen Benutzer wie im Abschnitt zuvor zu entfernen kann auf das Problem stoßen das es einfach nicht klappen will.<br><br />
<code>icacls.exe</code> meldet zwar ein '''''"1 Dateien erfolgreich verarbeitet"''''' - aber wenn wir nachsehen ist der Benutzer immer noch drin.<br><br />
Warum? Der Lösung kommen wir näher wenn wir es von Hand im Explorer machen - da gibt es nämlich dann eine Fehlermeldung '''''"... kann nicht entfernt werden da dieses Objekt übergeordnete Berechtigungen übernimmt."'''''<br><br />
Der Benutzer oder die Gruppe steht also schon weiter oben im Baum und ist hier nur dank Veerbung angelangt.<br><br />
Die Lösung ist also, die Veerbung ab dieser Stelle zu unterbrechen:<br><br />
icacls [Pfad]Datei-oder-Ordner /inheritance:d<br />
Bedeutungen:<br />
icacls : Der eigentliche Befehl (in Windows eingebaut)<br />
[Pfad]Datei-oder-Ordner : Für welche Datei oder Ordner?<br />
/inheritance:d : d -> deaktiviert die Vererbung, kopiert aber die ACL (REchte sind wie zuvor, nur ohne Vererbung von oben<br />
r -> entfernt die vererbten ACLs. Testen! Ggf. kann nur noch der Besitzer kann dann darauf zugreifen / Änderungen vornehmen<br />
e -> aktiviert die Vererbung<br />
Für den Hausgebrauch emfehle ich die Verwendung von "/inheritance:d" und dem anschliessendem entfernen der nichtgewollten Benutzern.<br><br />
<br><br />
<br><br />
----<br />
== Beispiele ==<br />
=== Ordner: Jeder Vollzugriff (inklusive Unterordner) ===<br />
icacls D:\Beispielordner /grant Jeder:(CI)(OI)(F)<br />
Vorher:<br><br />
[[Datei:Rechte-mit-icacls-setzen-001.png]]<br><br />
Befehl:<br><br />
[[Datei:Rechte-mit-icacls-setzen-002.png]]<br><br />
Nachher:<br><br />
[[Datei:Rechte-mit-icacls-setzen-003.png]] [[Datei:Rechte-mit-icacls-setzen-004.png]]<br><br />
<br><br />
in englischen Versionen müsst Ihr "Everyone" statt "Jeder" nehmen.<br><br />
<br><br />
<br><br />
----<br />
=== Ordner: Domänengruppe Ändern (inklusive Unterordner) ===<br />
icacls D:\Beispielordner /grant znil\Beispielgruppe:(CI)(OI)(M)<br />
<br><br />
<br><br />
----<br />
=== Ordner: Benutzer lesen und Ausführen (inklusive Unterordner) ===<br />
icacls D:\Beispielordner /grant Benutzer:(CI)(OI)(RX)<br />
Entspricht der lokalen Gruppe Benutzer (im Englischen: User)<br />
<br><br />
<br><br />
----<br />
--[[Benutzer:BLinz|Bernhard Linz]] 09:22, 9. Okt. 2013 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Ordnerumleitungen_per_Gruppenrichtlinie_-_die_richtigen_Rechte_f%C3%BCr_den_Stammordner&diff=9481Windows:Ordnerumleitungen per Gruppenrichtlinie - die richtigen Rechte für den Stammordner2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Gruppenrichtlinien]]<br />
Wenn wir Ordnerumleitungen nutzen, leiten wir in der Regeln auf einen Stammordner nach Schema:<br />
\\SERVER\Freigabe\<br />
um.<br><br />
Windows erstellt dann idealerweise für jeden einzelnen Benutzer ein eigenes Verzeichnis - gleich mit den passenden Berechtigungen so das nur der Benutzer selbst und der Administrator darauf zugreifen kann. (Administratoren Zugriff wird in der Gruppenrichtline konfiguriert).<br><br />
<br><br />
Jedoch muss der Stammordner bestimmte Grundberechtigungen aufweisen damit das ganze automatisch Funktioniert.<br><br />
<br><br />
<big>'''Grundberechtigungen Stammordner:'''</big><br><br />
{| class="wikitable"<br />
|- style="background-color:#FFC000;font-size: 1.2em; font-weight:bold" valign="top"<br />
| width="25%" | Benutzerkonto<br />
| width="25%" | Standardwerte für die Ordnerumleitung<br />
| width="25%" | Erforderliche Mindestberechtigungen<br />
|- style="font-size:1em"<br />
| Ersteller/Besitzer<br />
| Vollzugriff; Zugriff auf diesen Ordner, Unterordner und Dateien<br />
| Vollzugriff; Zugriff auf diesen Ordner, Unterordner und Dateien<br />
|- style="font-size:1em"<br />
| Administratoren<br />
| Keine Berechtigungen<br />
| Keine Berechtigungen<br />
|- style="font-size:1em"<br />
| Jeder<br />
| Keine Berechtigungen<br />
| Keine Berechtigungen<br />
|- style="font-size:1em"<br />
| Lokales System<br />
| Vollzugriff; Zugriff auf diesen Ordner, Unterordner und Dateien<br />
| Vollzugriff; Zugriff auf diesen Ordner, Unterordner und Dateien<br />
|- style="font-size:1em"<br />
| Sicherheitsgruppen von Benutzern, die Daten auf dem freigegebenen Netzwerkserver speichern müssen (Also dort einen Ordner bekommen sollen, kann natürlich auch bei "'''Jeder'''" eingestellt werden)<br />
| N/V<br />
| Ordner auflisten/Daten lesen, Ordner erstellen/Daten anhängen - Nur diesen Ordner<br />
|}<br />
<br><br />
{{Hinweis|Am besten funktioniert es wenn Ihr die Gruppe '''Jeder''' verwendet wie oben vorgschlagen. Also diese Gruppe entsprechend der letzten Tabellenzeile berechtigen!}}<br />
<br><br />
<big>'''Grundberechtigungen Freigabe:'''</big><br><br />
{| class="wikitable"<br />
|- style="background-color:#FFC000;font-size:1.2em;font-weight:bold" valign="top"<br />
| width="25%" | Benutzerkonto<br />
| width="25%" | Standardwerte für die Ordnerumleitung<br />
| width="25%" | Erforderliche Mindestberechtigungen<br />
|- style="font-size:1em"<br />
| Jeder<br />
| Vollzugriff<br />
| Keine Berechtigungen (Sicherheitsgruppe verwenden)<br />
|- style="font-size:1em"<br />
| Sicherheitsgruppen von Benutzern, die Daten auf dem freigegebenen Netzwerkserver speichern müssen<br />
| N/V<br />
| Vollzugriff<br />
|}<br />
<br><br />
Quelle: http://technet.microsoft.com/de-de/library/cc781907(WS.10).aspx<br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] 16:13, 3. Feb. 2012 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:IIS_7.x_Hostheader_bei_SSL_einsetzen&diff=9480Windows:IIS 7.x Hostheader bei SSL einsetzen2017-08-06T18:52:07Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_Server_2008]][[Kategorie:Internet]]<br />
Leider kann man über die grafische Oberfläche keine Hostheader für SSL konfigurieren.<br><br />
Es geht aber über folgende Zeile in der Eingabeaufforderung (Beachtet den Pfad!):<br />
c:\Windows\System32\inetsrv>appcmd set site /site.name:"Name der Seite im IIS" /+bindings.[protocol='https',bindingInformation='*:443:prefix.gewünschter-Seitenname.suffix']<br />
Beispiel:<br />
c:\Windows\System32\inetsrv>appcmd set site /site.name:"clipperz" /+bindings.[protocol='https',bindingInformation='*:443:clipperz.znil.de']<br />
Die Seite im IIS heisst "clipperz" und ist nun über den DNS-Namen "clipperz.znil.de" zu ereichen.<br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 01:13, 7. Mai 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Gruppenrichtlinen_-_Vertrauensw%C3%BCrdige_Zertifikate_/_Stammzertifikate_per_Gruppenrichtlinie_(GPO)_verteilen&diff=9478Windows:Gruppenrichtlinen - Vertrauenswürdige Zertifikate / Stammzertifikate per Gruppenrichtlinie (GPO) verteilen2017-08-06T18:52:06Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Gruppenrichtlinien]]<br />
Wenn folgende Medung dank selbstsignierter zertifikate stört (hier von einem VMware View Connection Server):<br><br />
<br><br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-001.png]]<br><br />
<br><br />
Diese Medlung bekommt man weg wenn man das Zertifikat zu den "Vertrauenswürden Stammzertifizierungsstellen" hinzufügt.<br><br />
Einfacher ist es, wenn der Administrator dies für alle macht - natürlich per Gruppenrichtline (GPO)!<br><br />
<br><br />
----<br />
Dazu öffen wir den Gruppenrichtlinien-Editor:<br><br />
<br><br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-002.png]]<br><br />
<br><br />
und gehen zu<br />
Computerkonfiguration<br />
+-> Richtlinien <br />
+-> Windows-Einstellungen <br />
+-> Sicherheitseinstellungen <br />
+-> Richtlinien für öffentliche Schlüssel<br />
+-> Vertrauenswürdige Stammzertifizierungsstellen<br />
öffnen das Kontextmenü mit der rechten Maustaste und wählen '''"Hinzufügen"'''<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-003.png]]<br><br />
<br><br />
Einen sinnvollen Namen vergeben ...<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-004.png]]<br><br />
<br><br />
Der Assistent öffnet sich - Weiter<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-005.png]]<br><br />
<br><br />
Das Zertifikat auswählen...<br><br />
<br><br />
<br><br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-006.png]]<br><br />
<br><br />
Den Speicher können wir hier nicht auswählen - aber es sollte dieser sein!<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-007.png]]<br><br />
<br><br />
und Fertig stellen ...<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-008.png]]<br><br />
<br><br />
Dann sollte es so aussehen.<br><br />
<br><br />
<br><br />
----<br />
'''<big>Gegenprobe - prüfen ob es geklappt hat!</big>''''<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-009.png]]<br><br />
<br><br />
Auf einem Client schnell die Gruppenrichtlinien aktualisieren mit:<br><br />
gpupdate /force<br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-010.png]]<br><br />
<br><br />
und im Anschluss die Management Console gestartet mit<br><br />
mmc<br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-011.png]]<br><br />
<br><br />
Snap-In hinzufügen ...<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-012.png]]<br><br />
<br><br />
Das Zertifikate Snap-In ...<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-013.png]]<br><br />
<br><br />
Für das Computerkonto (Zertifikat gilt für alle Benutzer an '''''diesem''''' Computer!)<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-014.png]]<br><br />
<br><br />
wahrscheinlich der lokale Computer :-) Wie Ihr seht können wir aber auch andere abfragen.<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-015.png]]<br><br />
<br><br />
Wenn es dann so aussieht fehlt nur noch ein '''"OK"'''<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-016.png]]<br><br />
<br><br />
Und sollten dann an dieser Stelle unser Zertifikat wiederfinden.<br><br />
<br><br />
<br><br />
----<br />
[[Datei:Windows-Zertifakte-per-Gruppenrichtlinie-verteilen-017.png]]<br><br />
<br><br />
Noch ein schneller Test im Webbrowser - Hurra! Nichts rot und das Schloss-Symbol<br><br />
<br><br />
<br><br />
----<br />
--[[Benutzer:BLinz|Bernhard Linz]] 10:38, 7. Feb. 2012 (CET)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:FTP-Verzeichnisse_per_Batch_sichern,_in_ein_Archiv_packen_und_Status_mit_Logfile_per_Email_versenden&diff=9477Windows:FTP-Verzeichnisse per Batch sichern, in ein Archiv packen und Status mit Logfile per Email versenden2017-08-06T18:52:06Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:MediaWiki]][[Kategorie:Internet]][[Kategorie:Batch]][[Kategorie:Web]]<br />
Ich habe mir einen kleinen Heimserver aufgebaut (der im gegensatz zu seinem Vorgänger nun 24x7x365 in Betrieb ist) und wollte auf diesen das '''znilwiki'''-Webverzeichnis nun regelmäßig sichern lassen.<br><br />
Dabei hatte ich die folgenden Ansprüche an diese Sicherung:<br><br />
* Regelmäßiges, automatisches herunterladen<br />
** per Windows Aufgabenplanung / geplante Tasks wäre ok<br />
** Mein (gekauftes) Backup-Programm konnte es leider nicht direkt<br />
* Packen des heruntergeladenen Ordners in ein Archiv<br />
** Alleine diese Webseite besteht zur Zeit aus über 10.000 Dateien in 2.000 Ordnern (ja ja, die ganzen Screenshots und Skripte ...)<br />
** Robocopy sitzt bei Kopierjobs sonst minutenlang nur an meinen Websicherungen ...<br />
* Benachrichtigung per Email über Erfolg / Misserfolg mit angehängtem Log<br />
** Bin ich von BackupExec so gewohnt ...<br />
Herausgekommen ist dabei nachfolgendes Script - Viel Spaß damit :-)<br><br />
PS: Falls Ihr die ältesten Backup-Archiv-Dateien regelmäßig auch per Batch löschen wollt - schaut mal hier: [[Windows:Dateien die älter sind als X Tage per Skript / Batch löschen|Dateien die älter sind als X Tage per Skript / Batch löschen]]<br><br />
<br><br />
----<br />
==Voraussetzungen==<br />
Dieses Script besteht hinterher aus 2 Dateien:<br />
* dem Script <big><code>'''Backup_FTP_Folders.CMD'''</code></big> selbst<br />
* der Datei <big><code>'''FTP-Folders.txt'''</code></big> in die zu sicherenden FTP-Pfade stehen<br />
Der Pfad zur <big><code>'''FTP-Folders.txt'''</code></big> kann im Script angepasst werden - oder das Script kann auch auf die Datei verzichten und die Pfade werden direkt im Script hinterlegt. Ihr findet einen entsprechenden Bereich mit Kommentaren im Script.<br><br />
<br><br />
<big>'''Es werden die folgenden Hilfsprogramme benötigt:'''</big><br />
* Programm zur Archiverstellung (eines('''<big>!</big>''') von beiden):<br />
** [http://www.7-zip.de/ 7-Zip] (für '''''.7z''''' oder '''''.zip''''' Archive): [http://www.7-zip.de/ http://www.7-zip.de/] oder [http://www.7-zip.org/ http://www.7-zip.org/]<br />
** [http://www.winrar.de/ WinRAR] (für '''''.rar''''' Archive): [http://www.rarlab.com/ http://www.rarlab.com/] oder [http://www.winrar.de/ http://www.winrar.de/]<br />
* Programm für das herunterladen über FTP<br />
** [http://www.gnu.org/software/wget/ WGET]: [http://www.gnu.org/software/wget/ http://www.gnu.org/software/wget/] oder [http://gnuwin32.sourceforge.net/packages/wget.htm http://gnuwin32.sourceforge.net/packages/wget.htm]<br />
* Programm für den Emailversand per Commandline<br />
** [http://caspian.dotconf.net/menu/Software/SendEmail/ sendEmail]: [http://caspian.dotconf.net/menu/Software/SendEmail/ http://caspian.dotconf.net/menu/Software/SendEmail/]<br />
<br><br />
Im Script könnte ihr an zentraler Stelle die Pfade zu allen '''''.exe''''' Dateien angeben (oder ihr fügt die Pfade wie ich zur globalen '''''%PATH%''''' Variable hinzu).<br />
<br><br />
<br><br />
----<br />
==Installation==<br />
Schritt 1: Ladet euch mein Script herunter (Quelltext siehe weiter unten): [[Media:Backup_ftp_folders.zip|Backup_ftp_folders.zip]]<br><br />
Schritt 2: Archiv in einen Ordner eurer Wahl entpacken<br><br />
Schritt 3: Falls ihr weder [http://www.7-zip.de/ 7-Zip] noch [http://www.winrar.de/ WinRAR] installiert habt - entscheidet euch für einen von beiden, ladet diesen herunter und Installiert diesen<br><br />
Schritt 4: Ladet [http://www.gnu.org/software/wget/ WGET] und installiert es<br><br />
Schritt 5: Ladet [http://caspian.dotconf.net/menu/Software/SendEmail/ sendEmail] herunter und entpackt es in ein Verzeichnis eurer Wahl<br><br />
<br><br />
<br><br />
<br />
==Konfiguration==<br />
* Bearbeitet die <big><code>'''FTP-Folders.txt'''</code></big> und tragt eure FTP-Verzeichnisse ein<br />
** Einen Ordner pro Zeile<br />
** Keine(!) abschliessende Leerzeile<br />
** Nehmt zum Testen einen(!) kleinen(!) Ordner - wenn der Rest funktioniert könnt Ihr alle anderen ja nachtragen<br />
** Es wird immer der komplette Inhalt des Ordners inklusive aller Unterordner gesichert!<br />
C:\Scripts\FTP-Folder.txt<br />
<br />
ftp://ftp.domain.local/Ordner1/<br />
ftp://ftp.domain.local/Ordner2/<br />
ftp://ftp.domain.local/Ordner/Ordner3/<br />
<br><br />
<br><br />
* Bearbeitet (Rechte Maustaste drauf und '''Bearbeiten''') die <big><code>'''Backup_FTP_Folders.CMD'''</code></big> und passt folgende Abschnitte an:<br />
===Benutzernamen und Passwort für FTP-Zugang===<br />
<source lang="DOS"><br />
REM Benutzername und Passwort für die FTP-Anmeldung<br />
SET FTPBENUTZER=wgetbenutzer<br />
SET FTPPASSWORT=YJFgpfJKx5r58GaRRLpseL<br />
</source><br />
<br><br />
===Pfad zur FTP-Folder.txt===<br />
Könnt natürlich auch jeden anderen Namen nehmen :-)<br />
<source lang="DOS"><br />
REM Welche Textdatei enthält die Namen der FTP-Ordner die gesichert werden sollen?<br />
REM Hinweis: Ein Host + Ordner pro Zeile, keine leeren Zeilen (auch nicht am Ende!)<br />
REM Beispiel: ftp://ftp.meinserver.local/Verzeichnis/<br />
SET FTPFOLDERDATEI=C:\Skripts\ftp_folders.txt<br />
</source><br />
<br><br />
===Pfad Arbeitsverzeichnis/Downloadverzeichnis.txt===<br />
Wohin werden die Dateien geladen? Ordner kann dort liegen bleiben können und muss '''nicht''' in die Datensicherung / Bandsicherung (dazu nehmen wir das Archiv, geht schneller beim Backup)<br><br />
Wenn er dort liegen bleiben kann, geht der nächste Durchlauf erheblich schneller weil er dann nur noch abgleichen muss - und nicht mehr neu alles kopieren.<br />
<source lang="DOS"><br />
REM Wo soll das Arbeitsverzeichnis liegen? Wenn hierfür keine Datum+Uhrzeits gewählt wird, wird das Verzeichnis bei jedem Durchlauf nur abgeglichen (=schneller)<br />
REM Pfad immer ohne Abschliessendes \ !!!! BACKUPPFAD muss Unterverzeichnis sein, nie Laufwerk direkt nehmen<br />
SET BACKUPLAUFWERK=C:<br />
SET BACKUPPFAD=\WEB-BACKUPS<br />
</source><br />
<br><br />
===Pfad Archivdateien===<br />
Wohin mit den Archiven? An Namen+Pfad hängen wir später automatisch Uhrzeit und Datum.<br />
<source lang="DOS"><br />
REM Wie soll das Archiv heissen (inklusive Pfad)?<br />
REM An den Nachfolgenden Pfad und Namen wird dann noch Datum+Uhrzeit (wenn gewählt) + .rar/.7z/.zip angehängt<br />
REM aus M:\WEB-BACKUPS\znil.net wird also M:\WEB-BACKUPS\znil.net-2012-05-11-20-13.rar (oder .7z / .zip)<br />
SET ARCHIVPFADUNDNAME=M:\WEB-BACKUPS\znil.net<br />
</source><br />
<br><br />
===Archivtyp===<br />
Je nachdem welchen Packer ihr habt könnt Ihr das Format auswählen.<br />
<source lang="DOS"><br />
REM Auswahl des Archiv-Packers / Typ<br />
REM <br />
REM RAR = .rar = WinRar (Pfad zur rar.exe muss im Script angepasst werden oder WinRar-Verzeichnis in Path-Variable aufnehmen)<br />
REM 7z = .7z = 7zip (Pfad zur 7z.exe muss im Script angepasst werden oder 7zip-Verzeichnis in Path-Variable aufnehmen)<br />
REM ZIP = .zip = ZIP (Pfad zur 7z.exe muss im Script angepasst werden oder 7zip-Verzeichnis in Path-Variable aufnehmen)<br />
SET ARCHIVTYP=7z<br />
</source><br />
Kleine Entscheidungshilfe:<br />
'''Ordner mit 185MBytes (212MByte auf Datenträger, 10.628 Dateien) als'''<br />
.7z : 84,311 MByte<br />
.rar : 98,822 MByte<br />
.zip : 105,618 MByte<br />
auf der jeweils höchstmöglichen Kompressionsstufe<br />
<br><br />
===Pfade zu den Hilfsprogrammen===<br />
Damit das Skript die auch alle findet. Zur Erinnerung: Ihr braucht WinRar ODER 7-Zip!<br />
<source lang="DOS"><br />
REM Pfade zu rar.exe und/oder 7z.exe, sendemail und wget -> nach Bedarf anpassen.<br />
REM Falls die Verzeichnisse in der %PATH% Variablen stehen entfernen sie alles bis auf die eigentliche EXE Datei<br />
SET wgetEXE="C:\Program Files (x86)\GnuWin32\bin\wget.exe"<br />
SET sevenzipEXE="C:\Program Files\7-Zip\7z.exe"<br />
SET rarEXE="C:\Program Files\WinRAR\rar.exe"<br />
SET sendemailEXE="C:\Program Files (x86)\sendEmail-v156\sendemail.exe"<br />
</source><br />
<br><br />
===Email-Setup===<br />
Bitte beachtet die Hinweise zu IPv6 im Text!<br />
<source lang="DOS"><br />
REM Absender und Empfänger der Status-Email,<br />
REM die LOG-Datei und ob es Fehler gab wird per Email versendet<br />
SET MAILFROM=WGET@znil.org<br />
SET MAILLOGTO=bernhard@znil.de<br />
<br />
REM wie heisst der SMTP-Server?<br />
REM Achtung, sendemail ist nicht IPv6 fähig - nicht localhost oder 127.0.0.1 verwenden auf Vista/W7/2008(R2)!<br />
SET SMTPSERVER=192.168.1.80<br />
</source><br />
<br><br />
===Datum + Uhrzeit===<br />
Ich empfehle: Lasst die Einstellungen so wie sie sind - geht beim Abgleich mit dem FTP-Verzeichnissen am schnellsten!<br><br />
Das Archiv sichern wir dann im Hauptbackup, den Arbeitsordner lassen wir aus Geschwindigkeits- und Platzggründen weg.<br><br />
<source lang="DOS"><br />
REM Soll im Arbeitsverzeichnis ein Ordner pro Sicherung mit Datum/Uhrzeit verwendet werden? Wenn NEIN wird nicht jedesmal alles kopiert sondern der Ordner nur aktualisiert<br />
REM unbedingt empfohlen NEIN zu nehmen!<br />
SET BENUTZE_DATUM_UHRZEIT_BACKUPPFAD=NEIN<br />
<br />
REM Sollen für die Archive an die Dateinamen Datum und Uhrzeit angehängt werden?<br />
REM Unbedingt empfohlen JA zu nehmen!<br />
SET BENUTZE_DATUM_UHRZEIT_RARPFAD=JA<br />
</source><br />
<br><br />
<br />
==Und los geht es==<br />
Nun das Speichern nicht vergessen - und los geht es! <br><br />
Während WGET arbeitet könnt ihr das oben in der Titelleiste des Fensters sehen. Der Text wird in die Log-Datei umgeleitet.<br><br />
<br><br />
Habt Ihr Fehler - wird es an einem der von euch verstellten Parametern liegen :-)<br />
Fehlersuche: Kommentiert das <code>'''@echo off'''</code> am Anfang aus und startet das Script in einer Eingabeaufforderung - so könnt ihr mitlesen.<br><br />
Eventuell kommentiert ihr auch das Löschen der LOG-Dateien aus - in den steht auch was schief gegangen ist.<br />
<br><br />
<br><br />
----<br />
<br />
=Script Quellcode=<br />
Erst der Download-Link: [[Media:Backup_ftp_folders.zip|Backup_ftp_folders.zip]]<br />
<source lang="DOS"><br />
@echo off<br />
REM ##################################################################################################<br />
REM Sichern von FTP-Verzeichnissen per Batch-Datei<br />
REM Dieses Script lädt das komplette Verzeichnis herunter,<br />
REM Packt das heruntergeladene Verzeichnis in ein Archiv,<br />
REM Sendet eine Email mit Status Erfolge oder Fehlgeschlagen + Log-Datei an gewünschten Empfänger<br />
REM <br />
REM In dr Konfiguration wie hier wird das Arbeitsverzeichnis nicht gelöscht.<br />
REM dadurch muss in jedem Durchgang nicht alles heruntergeladen werden sondern es wird nur abgeglichen.<br />
REM Die Archive enthalten aber immer alle kompletten Daten für den Durchlauf.<br />
REM<br />
REM Diese Script benötigt noch folgende Zusatzprogramme:<br />
REM WGET, WinRar oder 7zip, SendEmail<br />
REM <br />
REM Weblinks zu den Programmen (Stand 11.05.2012):<br />
REM WGET: http://www.gnu.org/software/wget/<br />
REM WinRar: http://www.winrar.de/<br />
REM 7zip: http://www.7-zip.de/<br />
REM SendEmail: http://caspian.dotconf.net/menu/Software/SendEmail/<br />
<br />
REM Mai 2012 von Bernhard Linz<br />
REM Bernhard@znil.net<br />
REM Bernhard.Linz@datagroup.de<br />
REM veröffentlicht auf znilwiki: http://znil.net<br />
REM ##################################################################################################<br />
REM ##################################################################################################<br />
<br />
REM Benutzername und Passwort für die FTP-Anmeldung<br />
SET FTPBENUTZER=wgetbenutzer<br />
SET FTPPASSWORT=YJFgpfJKx5r58GaRRLpseL<br />
REM Welche Textdatei enthält die Namen der FTP-Ordner die gesichert werden sollen?<br />
REM Hinweis: Ein Host + Ordner pro Zeile, keine leeren Zeilen (auch nicht am Ende!)<br />
REM Beispiel: ftp://ftp.meinserver.local/Verzeichnis/<br />
SET FTPFOLDERDATEI=C:\Skripts\ftp_folders.txt<br />
REM ##################################################################################################<br />
REM ##################################################################################################<br />
<br />
REM Wo soll das Arbeitsverzeichnis liegen? Wenn hierfür keine Datum+Uhrzeits gewählt wird, wird das Verzeichnis bei jedem Durchlauf nur abgeglichen (=schneller)<br />
REM Pfad immer ohne Abschliessendes \ !!!! BACKUPPFAD muss Unterverzeichnis sein, nie Laufwerk direkt nehmen<br />
SET BACKUPLAUFWERK=C:<br />
SET BACKUPPFAD=\WEB-BACKUPS<br />
<br />
REM Wie soll das Archiv heissen (inklusive Pfad)?<br />
REM An den Nachfolgenden Pfad und Namen wird dann noch Datum+Uhrzeit (wenn gewählt) + .rar/.7z/.zip angehängt<br />
REM aus M:\WEB-BACKUPS\znil.net wird also M:\WEB-BACKUPS\znil.net-2012-05-11-20-13.rar (oder .7z / .zip)<br />
SET ARCHIVPFADUNDNAME=M:\WEB-BACKUPS\znil.net<br />
<br />
REM Auswahl des Archiv-Packers / Typ<br />
REM <br />
REM RAR = .rar = WinRar (Pfad zur rar.exe muss im Script angepasst werden oder WinRar-Verzeichnis in Path-Variable aufnehmen)<br />
REM 7z = .7z = 7zip (Pfad zur 7z.exe muss im Script angepasst werden oder 7zip-Verzeichnis in Path-Variable aufnehmen)<br />
REM ZIP = .zip = ZIP (Pfad zur 7z.exe muss im Script angepasst werden oder 7zip-Verzeichnis in Path-Variable aufnehmen)<br />
SET ARCHIVTYP=7z<br />
<br />
REM Pfade zu rar.exe und/oder 7z.exe, sendemail und wget -> nach Bedarf anpassen.<br />
REM Falls die Verzeichnisse in der %PATH% Variablen stehen entfernen sie alles bis auf die eigentliche EXE Datei<br />
SET wgetEXE="C:\Program Files (x86)\GnuWin32\bin\wget.exe"<br />
SET sevenzipEXE="C:\Program Files\7-Zip\7z.exe"<br />
SET rarEXE="C:\Program Files\WinRAR\rar.exe"<br />
SET sendemailEXE="C:\Program Files (x86)\sendEmail-v156\sendemail.exe"<br />
REM wegtEXE=wget.exe<br />
REM sevenzipEXE=7z.exe<br />
REM rarEXE=rar.exe<br />
REM sendemailEXE=sendemail.exe<br />
<br />
REM Absender und Empfänger der Status-Email,<br />
REM die LOG-Datei und ob es Fehler gab wird per Email versendet<br />
SET MAILFROM=WGET@znil.org<br />
SET MAILLOGTO=bernhard@znil.de<br />
<br />
REM wie heisst der SMTP-Server?<br />
REM Achtung, sendemail ist nicht IPv6 fähig - nicht localhost oder 127.0.0.1 verwenden auf Vista/W7/2008(R2)!<br />
SET SMTPSERVER=192.168.1.80<br />
<br />
REM Soll im Arbeitsverzeichnis ein Ordner pro Sicherung mit Datum/Uhrzeit verwendet werden? Wenn NEIN wird nicht jedesmal alles kopiert sondern der Ordner nur aktualisiert<br />
REM unbedingt empfohlen NEIN zu nehmen!<br />
SET BENUTZE_DATUM_UHRZEIT_BACKUPPFAD=NEIN<br />
<br />
REM Sollen für die Archive an die Dateinamen Datum und Uhrzeit angehängt werden?<br />
REM Unbedingt empfohlen JA zu nehmen!<br />
SET BENUTZE_DATUM_UHRZEIT_RARPFAD=JA<br />
SET DATUM_ZEIT_BKP=<br />
SET DATUM_ZEIT_ARCHIV=<br />
<br />
REM ##################################################################################################<br />
REM ##################################################################################################<br />
REM Begin des eigentlichen Scripts!<br />
REM ##################################################################################################<br />
REM ##################################################################################################<br />
REM Aktuelles Datum / Zeit ermitteln und in eine für Dateinamen passende Form bringen<br />
REM Schreibweise ist jjjj-mm-tt-mm-hh-ss<br />
setlocal enabledelayedexpansion<br />
SET DATUM_ZEIT=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<br />
SET DATUM_ZEIT=!DATUM_ZEIT:^ =0!<br />
setlocal disabledelayedexpansion<br />
IF "%BENUTZE_DATUM_UHRZEIT_BACKUPPFAD%" == "JA" SET DATUM_ZEIT_BKP=\%DATUM_ZEIT%<br />
IF "%BENUTZE_DATUM_UHRZEIT_RARPFAD%" == "JA" SET DATUM_ZEIT_ARCHIV=%DATUM_ZEIT%<br />
SET LOGFILE="%TEMP%\WGET-%DATUM_ZEIT%.txt"<br />
SET LOGFILEGEPACKT="%TEMP%\WGET-%DATUM_ZEIT%"<br />
REM Logfile anlegen (im TEMP-Ordner des Benutzers), löschen wir am Ende wieder<br />
ECHO %DATE% - %TIME% >%LOGFILE%<br />
<br />
REM Wenn eines der Programme einen Fehler zurückgibt wirde diese Variable auf JA gesetzt.<br />
REM wird beim versenden der Email ausgewertet für den passenden Betreff<br />
SET GABESFEHLER=NEIN<br />
<br />
REM **************************************************************************<br />
REM die mit SET FTPFOLDERDATEI=... oben angegebene Textdatei Zeilenweise einlesen und verarbeiten.<br />
for /F "eol=# tokens=1" %%i in (%FTPFOLDERDATEI%) do call :SCHLEIFE %%i<br />
<br />
REM Aufruf der Verzeichniss direkt in diesr Batch, ohne externe Datei mit Liste,<br />
REM Dazu oben das for /F .... auskommentieren und hier für jede FTP-Verzeichnis eine Zeile einfügen<br />
REM CALL :SCHLEIFE ftp://ftp.domain.local/znilwiki-webftp/<br />
REM CALL :SCHLEIFE ftp://ftp.domain.local/mysqldumper/<br />
GoTo VERPACKEN<br />
<br />
REM **************************************************************************<br />
:SCHLEIFE<br />
%wgetEXE% --user=%FTPBENUTZER% --password=%FTPPASSWORT% -P"%BACKUPLAUFWERK%%BACKUPPFAD%%DATUM_ZEIT_BKP%" -m "%1" >>%LOGFILE% 2>&1<br />
IF NOT ERRORLEVEL 0 SET GABESFEHLER=JA<br />
GOTO :EOF<br />
<br />
REM **************************************************************************<br />
:VERPACKEN<br />
REM WinRar Version (Shareware)(im Verzeichnis in das WinRar installiert wurde gibt es die rar.exe für Commandline)<br />
IF "%ARCHIVTYP%" == "RAR" %rarEXE% a %ARCHIVPFADUNDNAME%-%DATUM_ZEIT_ARCHIV%.rar -ri1 -m5 "%BACKUPLAUFWERK%%BACKUPPFAD%%DATUM_ZEIT_BKP%" >>%LOGFILE% 2>&1<br />
REM 7zip Version (Kostenlos)(im Verzeichnis in das 7zip Installiert wurde gibt es die 7z.exe für Commandline, Achtung richte Version für BS installieren (x32 oder x64))<br />
REM 7zip Archiv erzeugen (kleiner und damit besser als .rar und .zip)<br />
IF "%ARCHIVTYP%" == "7z" %sevenzipEXE% a -mx9 -r -t7z %ARCHIVPFADUNDNAME%-%DATUM_ZEIT_ARCHIV%.7z "%BACKUPLAUFWERK%%BACKUPPFAD%%DATUM_ZEIT_BKP%\*.*" >>%LOGFILE% 2>&1<br />
REM normales ZIP Archiv erzeugen (größer als .7zip oder .rar)<br />
IF "%ARCHIVTYP%" == "ZIP" %sevenzipEXE% a -mx9 -r -tzip %ARCHIVPFADUNDNAME%-%DATUM_ZEIT_ARCHIV%.zip "%BACKUPLAUFWERK%%BACKUPPFAD%%DATUM_ZEIT_BKP%\*.*" >>%LOGFILE% 2>&1<br />
REM auf Fehler prüfen (Rückgabewert der EXE-Dateien ungleich 0)<br />
IF NOT ERRORLEVEL 0 SET GABESFEHLER=JA<br />
GoTo ENDE<br />
<br />
REM **************************************************************************<br />
:ENDE<br />
REM Logfile packen bevor wir es an die Email anhängen,<br />
REM wird sonst auch oft sehr groß - aber gut zu packen (10MByte auf wenige hundert Kilobyte)<br />
IF "%ARCHIVTYP%" == "RAR" (<br />
SET LOGFILEGEPACKT=%LOGFILEGEPACKT%.rar<br />
%rarEXE% a %LOGFILEGEPACKT% -ri1 -m5 %LOGFILE%<br />
) ELSE IF "%ARCHIVTYP%" == "7z" (<br />
SET LOGFILEGEPACKT=%LOGFILEGEPACKT%.7z<br />
%sevenzipEXE% a -mx9 -t7z %LOGFILEGEPACKT% %LOGFILE%<br />
) ELSE IF "%ARCHIVTYP%" == "ZIP" (<br />
SET LOGFILEGEPACKT=%LOGFILEGEPACKT%.zip<br />
%sevenzipEXE% a -mx9 -tzip %LOGFILEGEPACKT%.zip %LOGFILE%<br />
)<br />
REM Email versenden mit passenden Betreff<br />
IF "%GABESFEHLER%" == "JA" %sendemailEXE% -f %MAILFROM% -t %MAILLOGTO% -u "WGET FTP-Backup - FEHLER!" -m "Fehler siehe Log-Datei im Anhang" -s %SMTPSERVER% -a %LOGFILEGEPACKT%<br />
IF "%GABESFEHLER%" == "NEIN" %sendemailEXE% -f %MAILFROM% -t %MAILLOGTO% -u "WGET FTP-Backup - ERFOLGREICH!" -m "Details siehe Log-Datei im Anhang" -s %SMTPSERVER% -a %LOGFILEGEPACKT%<br />
REM Aufräumen - Logfile löschen<br />
DEL %LOGFILE%<br />
DEL %LOGFILEGEPACKT%<br />
</source><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 01:34, 12. Mai 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Batch_/_DOS-Box:_aktuelles_Datum_und_Uhrzeit_f%C3%BCr_Datei-_oder_Verzeichnisnamen_verwenden&diff=9475Windows:Batch / DOS-Box: aktuelles Datum und Uhrzeit für Datei- oder Verzeichnisnamen verwenden2017-08-06T18:52:05Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div><br />
[[Kategorie:Batch]]<br />
Zum Beispiel bei Dateisicherungen per Skript / Batch ist es praktisch, das aktuelle Datum und Uhrzeit in Batch-Dateien verwenden zu können.<br><br />
Auch bei Ausgaben in Log-Dateien macht sich das gut.<br><br />
<br><br />
----<br />
==Simpel-Ausgabe==<br />
Die 08/15 Ausgabe besteht aus dem Inhalt der beiden Umgebungsvariablen<br />
%TIME%<br />
%DATE%<br />
Per '''<code>echo</code>''' in einer Eingabeaufforderung sieht das so aus:<br><br />
[[Datei:Batch-DatumundUhrzeit-001.png]]<br><br />
<br><br />
Wie Ihr seht habe ich auch gleich einen Ordner mit dem aktuellen Datum angelegt.<br><br />
Leider geht das mit der Uhrzeit schon nicht mehr - da sind Doppelpunkte drin, die darf es in Dateinamen nicht geben.<br><br />
<br><br />
Aber auch dafür gibt es eine Lösung - siehe nächsten Abschnitt:<br />
<br><br />
<br><br />
----<br />
==Getrennte Ausgabe von Tag, Monat, Jahr, Stunde, Minute und Sekunde==<br />
Was leider in der aktuellen Hilfe praktisch nicht mehr zu finden ist: Windows kann die Ausgabe von Umgebungsvariablen Formatieren.<br><br />
Das können wir nutzen um die Ausgabe von '''<code>%TIME%</code>''' und '''<code>%DATE%</code>''' in ihre Einzelteile zu zerlegen:<br />
<br><br />
Jahr: %date:~-4%<br />
Monat: %date:~-7,2%<br />
Tag: %date:~-10,2%<br />
<br />
Stunden: %time:~-11,2%<br />
Minuten: %time:~-8,2%<br />
Sekunden: %time:~-5,2% <br />
Ein<br />
%date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<br />
gibt uns Datum und Uhrzeit in einer Verzeichnis- und Dateinamen kompatiblen Version aus - die dann schön nach Datum sortiert wird, mit<br />
mkdir %date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<br />
erstellen wir uns ein Verzeichnis damit:<br><br />
[[Datei:Batch-DatumundUhrzeit-002.png]]<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 12:20, 11. Mai 2012 (CEST)<br />
<br><br />
----<br />
==Fehler durch Leerzeichen==<br />
Ich habe da gerade noch einen Fehler gefunden - die Uhrzeit oder das Datum ist bei den Zahlen von 1 bis 9 nur einstellig.<br><br />
Wir bekommen also ein<br />
echo ##%TIME%##<br />
## 9:45:35,88##<br />
und damit auch ein<br />
echo =>%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<=<br />
## 9-45-35##<br />
Beim Datum ist es das selbe. Nun haben wir plötzlich Leerzeichen in den Dateinamen.<br><br />
'''Lösung1:''' Die Namen in der Batch in " " packen und damit die Leerzeichen übergeben<br><br />
'''Lösung2:''' Aus allen Leerzeichen hinterher 0 - machen:<br><br />
set TEST=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<br />
echo ##%TEST%##<br />
setlocal enabledelayedexpansion<br />
set TEST=!TEST:^ =0!<br />
setlocal disabledelayedexpansion<br />
echo ##%TEST%##<br />
Ausgabe:<br />
##2012-05-12- 1-47-00##<br />
##2012-05-12-01-47-00##<br />
er füllt die Leerzeichen mit der Zahl 0 !<br><br />
<br><br />
{{Hinweis| Das Umwandeln aller Leerzeichen in eine 0 funktioniert nur innerhalb einer Batch-Datei. Man kann es NICHT in der Eingabeaufforderung testen! Kopiert das Beispiel in eine Textdatei und speichert diese als .bat oder .cmd und ruf diese dann auf - dann geht es.}}<br><br />
<br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 01:48, 12. Mai 2012 (CEST)<br />
----<br />
==Kommentare==<br />
<comments /></div>BLinz2https://znil.net/index.php?title=Windows:Automatisches_Mounten_von_Festplatten_deaktivieren_-_diskpart_automount_disable&diff=9474Windows:Automatisches Mounten von Festplatten deaktivieren - diskpart automount disable2017-08-06T18:52:05Z<p>BLinz2: Textersetzung - „<comments>“ durch „<comments />“</p>
<hr />
<div>[[Kategorie:Windows]][[Kategorie:Windows_XP]][[Kategorie:Windows_Server_2008]][[Kategorie:Windows_Vista]][[Kategorie:Windows_7]<br />
Eine der schnellsten Methoden bei der Datensicherung ist das Sichern der kompletten VMDK-Dateien der VM's. Das funktionert in der Regel ohne Probleme über die jeweilige Backup-Software. Diese nimmt Kontakt mit dem vCenter und/oder den ESXi Servern auf und bekommt von diesen die Daten.<br><br />
Noch schneller geht es z.B. in einem Fibre Channel (FC) SAN wenn der Backupserver über eine eigene FC-Karte direkt auf die LUNs von VMware zugreifen kann.<br><br />
Je nach SAN-Typ ist es möglich, die LUNs nur schreibgeschützt gegenüber dem Backupserver (in der Regel ja ein Windows-Server) zu veröffentlichen. Aber ab Mittelklasse-SANs gibt es diese Funktion nicht.<br><br />
Es ist aber wichtig das Windows nicht schreibend auf die LUNs zugreift - ein Schreibzugriff würde die Partitionsinformationen zerstören.<br><br />
Nachfolgend ist beschrieben, wie man Windows abgewöhnt ggf. automatisch eine Kennung auf die Partition zu schreiben - würde er z.B. beim Initialisieren oder beim Zuweisen eines Laufwerksbuschtaben machen. Laut VMware sollte man das unbedingt tun!<br><br />
WICHTIG: Das ist immer noch kein Schreibschutz! Ein Benutzer kann es immer noch schaffen die Partitionen zu zerstören wenn er nicht weis was er tut! (Das kann er aber auch mit jeder Windows-Partition, hört sich also dramatischer an als es ist).<br />
<br><br />
<br><br />
----<br />
== Automount unter Windows abschalten ==<br />
Wir öffnen eine DOS-Box / Eingabeaufforderungen und tippen den Befehl<br />
diskpart<br />
ein<br />
nach einem Moment kommt ein neuer Prompt. An diesem können wir mit dem Befehl<br />
automount<br />
den aktuellen Status abfragen, mit<br />
automount disable<br />
schalten wir es wie gewünscht ab.<br><br />
<br><br />
[[Datei:Windows-diskpart-automount-disable-001.png]]<br><br />
<br><br />
<br><br />
--[[Benutzer:BLinz|Bernhard Linz]] ([[Benutzer Diskussion:BLinz|Diskussion]]) 11:26, 13. Jun. 2012 (CEST)<br />
----<br />
<comments /></div>BLinz2