Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Abfragen, ob ein Schedule Task schon existiert

Frage Entwicklung Batch & Shell

Mitglied: nemofly

nemofly (Level 1) - Jetzt verbinden

01.02.2013 um 08:11 Uhr, 3272 Aufrufe, 23 Kommentare

Hallo,

Ich möchte viele Server abfragen, ob sie schon einen schedule Task haben, der xmlreport heißt...
Außerdem soll falls es einen fehler gibt, also dieser Task auf dem vorhanden Server nicht ist der Schedule Task erstellt werden. Ich möchte nun alle Server in einer .log aufgelistet bekommen, auf denen der Task nicht vorhanden war.
Folgenden Code habe ich schon, aber wie ich noch weiter machen muss weiß ich nicht... :
In Server.txt stehen alle Server drinnen (ca. 200-300)

For /f %%a in (Server.txt) DO (schtasks /query /S %%a | echo %%a if %errorlevel% = 1>> Tasks.log)

Vielen Dank schon mal für jede Hilfe!

Nemofly
Mitglied: colinardo
01.02.2013, aktualisiert um 10:52 Uhr
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
set TASKNAME=MyTask 
03.
set TASKLOG=Tasks.log 
04.
for /f "tokens=*" %%a in (Server.txt) DO @( 
05.
  REM Test if Server is online 
06.
  ping -n 1 -w 200 %%a | find /c "TTL=" >nul 
07.
  if !ERRORLEVEL! == 1 ( 
08.
	echo Server '%%a' ist offline >>!TASKLOG! 
09.
  ) else ( 
10.
       schtasks /query /S %%a /TN "!TASKNAME!" 
11.
       if !errorlevel! == 1 (  
12.
           echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG! 
13.
           REM HIER DEIN SCHTASKS CREATE BEFEHL EINTRAGEN 
14.
15.
16.
)
Den Namen des Tasks und den Lognamen noch ergänzen (Zeile 2 und 3)

Grüße Uwe
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 10:56 Uhr
Bei mir will das nicht so recht klappen...

das ist jetzt mein Kompletter Code:

del C:\Fehler.log
FOR /f %%a in (Server.txt) DO (xcopy /y "D:\Tools\satin\*.*" "\\%%a\c$\hp\hpdiags\" || echo %%a >> Fehler.log)
del C:\Tasks.log
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (Server.txt) DO (schtasks /query /S %%a /TN "xmlreport" if %errorlevel% == 1 (
echo "Task ist auf Server %%a nicht vorhanden" >>Tasks.log))
::REM HIER DEIN SCHTASKS CREATE BEFEHL EINTRAGEN

wenn er dann das @ echo .... ausführen will, dann kommt die meldung: was unexpected at this time.

Was nun?
Bitte warten ..
Mitglied: colinardo
01.02.2013, aktualisiert um 11:10 Uhr
Da ist so einiges Falsch
- du hast das "@" vor dem echo off & setlocal ENABLEDELAYEDEXPANSION vergessen !
- und in der Schleife solltest du die Errorlevel-Variable mit Ausrufezeichen einrahmen !errorlevel! nicht mit %
- und die if-Abfrage in der Schleife hängt ohne & direkt an dem vorigen Befehl.

01.
del C:\Fehler.log 
02.
FOR /f %%a in (Server.txt) DO (xcopy /y "D:\Tools\satin\*.*" "\\%%a\c$\hp\hpdiags\" || echo %%a >> Fehler.log) 
03.
del C:\Tasks.log 
04.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
05.
for /f "tokens=*" %%a in (Server.txt) DO (schtasks /query /S %%a /TN "xmlreport" || echo "Task ist auf Server %%a nicht vorhanden" >>Tasks.log) 
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 11:07 Uhr
bei der zeile:
for /f "tokens=*" %%a in (Server.txt) DO @(REM Test if Server is online

Folgende Meldung: The Syntax of the command is incorrect.

Vielen dank Trotzdem für deine bisherige hilfe ;)
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 11:20 Uhr
del C:\Fehler.log
FOR /f %%a in (Server.txt) DO (xcopy /y "D:\Tools\satin\*.*" "\\%%a\c$\hp\hpdiags\" || echo %%a >> Fehler.log)
::del C:\Tasks.log
@echo off & setlocal ENABLEDELAYEDEXPANSION
set TASKNAME=xmlreport
set TASKLOG=Tasks.log
for /f "tokens=*" %%a in (Server.txt) DO @(REM Test if Server is online
ping -n 1 -w 200 %%a | find /c "TTL=" >nul
if !ERRORLEVEL! == 1 (
echo Server '%%a' ist offline >>!TASKLOG!
) else (
schtasks /query /S %%a /TN "!TASKNAME!"
if !errorlevel! == 1 (
echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG!))
::REM HIER DEIN SCHTASKS CREATE BEFEHL EINTRAGEN

das ist jetzt das Skript, nur leider bleibt es bei @echo off.... hängen Meldung: The Syntax of the command is incorrect.

?
Bitte warten ..
Mitglied: colinardo
01.02.2013, aktualisiert um 11:28 Uhr
so gehört das, und das ganze in die erste Zeile des Scripts !!!
Für Blinde nochmal zum mitlesen:

"@"

01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 11:40 Uhr
So das habe ich jetzt auch alles gemacht, die fehlermeldung bleibt leider trotzdem die gleiche, ich habe mal alles, was funktioniert auskommentiert:

@echo off & setlocal ENABLEDELAYEDEXPANSION
set TASKNAME=xmlreport
set TASKLOG=Tasks.log
::del C:\Fehler.log
::FOR /f %%a in (Server.txt) DO (xcopy /y "D:\Tools\satin\*.*" "\\%%a\c$\hp\hpdiags\" || echo %%a >> Fehler.log)
::del C:\Tasks.log
for /f "tokens=*" %%a in (Server.txt) DO @(REM Test if Server is online
ping -n 1 -w 200 %%a | find /c "TTL=" >nul
if !ERRORLEVEL! == 1 (
echo Server '%%a' ist offline >>!TASKLOG!
) else (
schtasks /query /S %%a /TN "!TASKNAME!"
if !errorlevel! == 1 (
echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG!))
::REM HIER DEIN SCHTASKS CREATE BEFEHL EINTRAGEN


Ich weiß du gibst dir sehr viel mühe danke dir, es wäre sehr nett, wenn wir das hinbekommen könnten ;)
Bitte warten ..
Mitglied: 106543
01.02.2013 um 11:48 Uhr
Hi,

Zitat von nemofly:
for /f "tokens=*" %%a in (Server.txt) DO @(REM Test if Server is online

Aua das @ vor (REM muss abernicht dahin oder ?

Ich weiß du gibst dir sehr viel mühe danke dir, es wäre sehr nett, wenn wir das hinbekommen könnten ;)

MfG Exzellius
Bitte warten ..
Mitglied: colinardo
01.02.2013, aktualisiert um 11:55 Uhr
Bitte den Code mit Codetags(http://www.administrator.de/faq/20) posten damit keine Zeichen im Formatierungsschredder verloren gehen, Merci...
Bitte warten ..
Mitglied: nemofly
01.02.2013, aktualisiert um 12:08 Uhr
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
set TASKNAME=xmlreport  
03.
set TASKLOG=Tasks.log 
04.
::del C:\Fehler.log 
05.
::FOR /f %%a in (Server.txt) DO (xcopy /y "D:\Tools\satin\*.*" "\\%%a\c$\hp\hpdiags\" || echo %%a >> Fehler.log) 
06.
::del C:\Tasks.log 
07.
for /f "tokens=*" %%a in (Server.txt) DO @(REM Test if Server is online  
08.
ping -n 1 -w 200 %%a | find /c "TTL=" >nul 
09.
if !ERRORLEVEL! == 1 ( 
10.
echo Server '%%a' ist offline >>!TASKLOG! 
11.
) else ( 
12.
schtasks /query /S %%a /TN "!TASKNAME!" 
13.
if !errorlevel! == 1 ( 
14.
echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG!)) 
15.
::REM HIER DEIN SCHTASKS CREATE BEFEHL EINTRAGEN
das eine @ vor dem REM habe ich schon weggetan
Bitte warten ..
Mitglied: colinardo
01.02.2013, aktualisiert um 12:32 Uhr
OK Dir fehlt am Ende eine Klammer ")".
Eine Korrektur des Ping Befehls habe ich noch mit reingenommen falls der PC via IPv6 pingt:
Hier die korrigierte Schleife:
01.
for /f "tokens=*" %%a in (Server.txt) DO @( 
02.
	ping -n 1 -w 200 %%a | find /c "Zeit<" >nul 
03.
	if !ERRORLEVEL! == 1 ( 
04.
		echo Server '%%a' ist offline >>!TASKLOG! 
05.
	) else ( 
06.
		schtasks /query /S \\%%a /TN "!TASKNAME!" 
07.
		if !errorlevel! == 1 ( 
08.
			echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG! 
09.
10.
11.
)
eventuell musst du für das Remote Abfragen via schtasks noch Benutzername und Kennwort mitgeben...
schtasks /query /S \\%%a /U USERNAME /P KENNWORT /TN "!TASKNAME!"
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 12:46 Uhr
so er schreibt jetzt was in die Taks.log datei rein, und das mit dem Ping läuft auch super,
habe einen server als test dabei gehabt, der dieses xmlreport schon drauf hat, aber er hat trotzdem in die .log datei geschrieben, das sie dort nicht vorhanden ist.

01.
for /f "tokens=*" %%a in (Server.txt) DO ( 
02.
ping -n 1 -w 200 %%a | find /c "TTL=" >nul 
03.
if !ERRORLEVEL! == 1 ( 
04.
echo Server '%%a' ist offline >>!TASKLOG! 
05.
) else ( 
06.
schtasks /query /S %%a /U "Test" /P "Test" /TN "!TASKNAME!" 
07.
if !errorlevel! == 1 ( 
08.
echo "Task ist auf Server %%a nicht vorhanden" >>!TASKLOG! )))
bei zeile 6 ist es egal ob ich %&a oder \\%%a schreibe, hat auch nichts geholfen...
Bitte warten ..
Mitglied: colinardo
01.02.2013 um 12:51 Uhr
dann prüf doch den schtask Befehl erst mal selber manuell in der Kommandozeile. Wahrscheinlich ist die Firewall eines Servers im Weg
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 12:56 Uhr
wenn ich in cmd folgendes eingebe:

01.
schtasks /query /S T01MCHFK77
dann zeigt er mir alle exitierende tasks an, die es auf dem Server gibt.
Also an sich funktioniert das einwandfrei. Also firewall kann es nicht sein.
Hast vllt noch ne andere idee? ;)
Bitte warten ..
Mitglied: colinardo
01.02.2013 um 13:02 Uhr
Wenn der Task nicht im Root-Verzeichnis des Taskplaners liegt musst du natürlich den Pfad zum Task mit angeben. D.h. Wenn der Task im Ordner MeineTasks liegt sieht die Variable TASKNAME so aus:
set TASKNAME=\MeineTasks\xmlreport
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 13:07 Uhr
Der liegt den dem Verzeichnis: ist das das Root verzeichnis?
C:\WINDOWS\Tasks\xmlreport.job
Bitte warten ..
Mitglied: colinardo
01.02.2013 um 13:13 Uhr
neeee, das ist eine Virtuelle Struktur. Welche Windows-Version haben die Server? Ab Server 2008 lassen sich die Tasks in Unterordner einsortieren. Siehe WIN-R taskschd.msc
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 13:14 Uhr
So habe gerade festgestellt, das es bei schtasks /query den befehl /TN gar nicht gibt, bzw, er ihn nicht als parameter verwenden kann.
Nun eine andere idee, ich könnte ja alle gefunden tasks in eine Textdatei schreiben lassen und die Textdatei filtern lassen danach oder?
Wie würde ein dementsprechender batch Code dafür aussehen, das mir z.B. am schluss in einer Datei nur noch die Server angezeigt werden, auf denen der Scheduel Task nicht existiert?

Danke für deine Hilfe!!!
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 13:16 Uhr
Zitat von colinardo:
Welche Windows-Version haben die Server?

So wir haben win 2003 und 2008 R2 aber habe auch auf den 2008 geschaut, da sind die im gleichen pfad
Bitte warten ..
Mitglied: colinardo
01.02.2013, aktualisiert um 13:24 Uhr
Jetzt wirds langsam nervig...
Bei Windows Server 2008 mach folgendes:
Start -> Ausführen -> taskschd.msc eingeben
Jetzt hast du links die Aufgaben Struktur, rechts siehst du die Tasks im jeweiligen Ordner.
Aufgabenplanungsbibliothek ist ROOT. Wenn der Task jetzt rechts im Fenster zu sehen ist, brauchst du keinen Pfad übergeben da schtasks den so findet.

Welche Windows Version hat dein System von wo aus du abfragst ? Das scheint eine ältere schtasks Version zu sein...
Bitte warten ..
Mitglied: colinardo
01.02.2013 um 13:25 Uhr
Mit einem schtasks auf einem XP-System kannst wahrscheinlich keinen Server 2008 abfragen !
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 13:38 Uhr
ich habe das ganze von einem windows server 2003 ausgeführt. auf dem Windows server 2008 Liegt der schedule task auch auf der root.
Bitte warten ..
Mitglied: nemofly
01.02.2013 um 13:41 Uhr
Also wenn ich das ausführe vom 2008 servcer, dann funktioniert es, das ich nach xmlreport filtere:

01.
schtasks /query /S T01MCHFK99 /TN xmlreport
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
Computer OU auslesen bzw. abfragen (2)

Frage von mexx991 zum Thema Windows 7 ...

Batch & Shell
gelöst Powershell oder Batch-Task: Kopiere Datei x mal und benenne diese um (2)

Frage von Lorderich zum Thema Batch & Shell ...

Netzwerkgrundlagen
gelöst Beliebigen Zeitserver auf Zeit abfragen (4)

Frage von blade999 zum Thema Netzwerkgrundlagen ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...