lkaderavek
Goto Top

Aufgabenplanung - Skripts ausführen - Server 2012 R2

Hallo,
ich habe ein Problem mit der Aufgabenplanung auf einem Server 2012 R2.

Ich bin als Domain-Admin angemeldet und erstelle eine Aufgabe, wo ein CMD-Skript ausgeführt werden soll.

Der Task soll unabhängig von der Benutzeranmeldung und mit höchsten Privilegien ausgeführt werden.

Das Skript startet aber nur, wenn diese beiden Optionen nicht aktiv sind.

Ich habe das Testweise auch mit Notepad.exe versucht, klappt auch nicht.

Die Benutzer habe ich bereits auf SYSTEM, Lokaler Dienst, Lokaler Admin und Domain-Admin getestet.

Den Taskplaner habe ich auch bereits als Administrator ausgeführt.

Es wird das Skript als Parameter von CMD.exe ausgeführt. Auch wenn ich es direkt ausführen möchte, klappt es nur mit den Standard-Einstellungen.

Ist das eine Eigenheit von Server 2012 R2?
Oder warum kann man das Skript nicht so ausführen?


Bitte um kurze Info.

Danke

LG

Lukas

Content-ID: 301184

Url: https://administrator.de/forum/aufgabenplanung-skripts-ausfuehren-server-2012-r2-301184.html

Ausgedruckt am: 22.12.2024 um 20:12 Uhr

xbast1x
xbast1x 07.04.2016 um 15:13:24 Uhr
Goto Top
Was soll den der Auslöser sein? Eine Zeit? Server Start?
LKaderavek
LKaderavek 07.04.2016 um 15:16:51 Uhr
Goto Top
Eine Zeit.
MichaelW84
MichaelW84 07.04.2016 um 16:26:49 Uhr
Goto Top
Ich kenne dieses Problem und konnte es bisher nicht lösen.
Mein workaround ist das Script als Administrator auszuführen, ich melde den Administrator nach einem reboot einmal an und trenne seine Sitzung nur.

Auch ich wäre um eine Lösung dankbar.
Ich werde mich damit nochmal auseinandersetzen wenn ich etwas mehr Zeit habe.
127944
127944 07.04.2016 aktualisiert um 16:53:59 Uhr
Goto Top
Moin,

bastel mal ein

exit /b 0
an das Ende deines Scriptes.

Darüber hinaus muss der Task mit höchsten Rechten ausgeführt werden. Das hast du schon mal richtig erkannt.
Ganz wichtig aber: Als Programm musst du C:\Windows\SysWOW64\cmd.exe angeben und als Parameter /c "C:\MeineBatch.cmd"

Gruß
LKaderavek
LKaderavek 07.04.2016 um 18:59:24 Uhr
Goto Top
Den Exit-Schalter hab ich noch nicht eingebaut, sonst läuft es aber bereits so, wie du schreibst.

Komme zurück nachdem ich den Exit eingebaut habe.

LG
127944
127944 07.04.2016 um 19:58:15 Uhr
Goto Top
Der Exit-Schalter ist nicht elementar - genau genommen für dich nicht einmal zwingend. Macht die ganze Sache nur "sauber". Richtig wäre es, wenn du den Wert auch ermittelst.
MichaelW84
MichaelW84 07.04.2016 um 20:35:10 Uhr
Goto Top
Ok,
Mein Script benötigt allerdings selbst einen Parameter der zur config Datei verweist.

Das heißt ich gebe beim server 2012r2 die bat als Programm und den configfile als Parameter an.
127944
127944 07.04.2016 um 20:57:29 Uhr
Goto Top
Das wird nicht funktionieren. Mach es wie ich geschrieben habe und hänge einfach deinen Parameter hinten an
LKaderavek
LKaderavek 07.04.2016 um 22:29:06 Uhr
Goto Top
Also ich hab jetzt den EXIT Schalter eingebaut, dann habe ich den CMD-Parameter von "c" auf "C" geändert und zwischen dem "C" und dem Pfad zur CMD-Datei einen Abstand rein gemacht...

Nun lässt sich der Task mit höchsten Privilegien und unabhängig von der Anmeldung ausführen.

Ich werde das morgen noch einmal testen.

Danke einstweilen.

LG
127944
127944 07.04.2016 um 22:54:57 Uhr
Goto Top
c oder C spielt keine Rolle - den Leerschritt hatte ich in meinem Beispiel auch angegeben
SaschaRD
SaschaRD 08.04.2016 um 10:59:28 Uhr
Goto Top
Hallo Lukas,

ich habe ein Problem mit der Aufgabenplanung auf einem Server 2012 R2.
Dieses Problem haben einige, denn sie verstehen nicht wie die Aufgabenplanung arbeitet.

Ist das eine Eigenheit von Server 2012 R2?
Oder warum kann man das Skript nicht so ausführen?
Es ist keine Eigenheit von Server 2012 R2.

Es wäre schön, wenn Du deinen Code oder einen Code-Schnipsel zur Verfügung stellst. Dann kann es besser analysiert werden. Hier etwas Licht für das Dunkle in dem sich wohl auch @MichaelW84 befindet.

Wird eine Aufgabenplanung erstellt, die ein Programm Batch/Powershell ausführen soll, dann wird dies stets aus dem System Ordner (%SystemRoot%\system32\) durchgeführt. Dies kann sehr einfach überprüft werden. Einfach eine Batchdatei und die Logdatei wo.txt auf C:\ erstellen mit folgendem Code:
set logfile="C:\wo.txt"  
dir > %logfile%
Wird die Batchdatei direkt per Doppelklick auf C:\ ausgeführt erhält man eine Auflistung von C:\. Wird dasselbe Batchskript über die Aufgabenplanung ausgeführt erhält man eine Auflistung von C:\Windows\System32\ (%SystemRoot%\system32\).

Was also tun? Start in (optional) hinzufügen.

Bei Powershell ist etwas etwas komplexer, dafür gibt es hier einen Beitrag auf Administrator.de

Gruß, Sascha
127944
127944 08.04.2016 um 11:02:56 Uhr
Goto Top
Zitat von @SaschaRD:
Was also tun? Start in (optional) hinzufügen.
Das ist für das genannte Problem leider keine Lösung!
114757
114757 08.04.2016 aktualisiert um 11:31:26 Uhr
Goto Top
Moin zusammen,
die eigentliche Frage ist doch, was macht sein Skript genau!!, wie @SaschaRD auch schon gefragt hat. Denn wenn er irgendwelche Dialoge darstellen oder Netzlaufwerke per Buchstaben ansprechen will ist nämlich klar warum das nicht funktionieren kann, da erstens bei Ausführung von Skripten unter einem anderen Account Skripte keinen Zugriff auf die Session des angemeldeten Users haben und deswegen auch in dieser Hinsicht nichts "grafisches" wie ein Fenster erscheinen kann.
Ich habe das Testweise auch mit Notepad.exe versucht, klappt auch nicht.
Das zeigt dir auch das Starten des Notepad als Task, es wird dir eben nicht angezeigt weil es in einer anderen Session im Hintergrund läuft!! Zeigt dir der Taskmanager sofort.

Dann Thema Netzlaufwerke: Hier ebenso, andere Session also eigene Netzlaufwerke d.h. Netzlaufwerke sind ebenfalls Sessionabhängig gemappt. Hier sollte der Zugriff also per UNC Pfad erfolgen.

Dann großes Thema Berechtigungen! Auf alle Ressourcen auf die zugegriffen wird sollten natürlich entsprechende Berechtigungen existieren. Z.B. auch wenn man ein Skript im System-Account laufen lässt das auf Netzwerkfreigaben zugreifen soll. Hier muss dann darauf geachtet werden das auf den Netzlaufwerken entsprechend auf der Freigabe und den NTFS-ACLs passende Einträge für den Computeraccount des anfragenden Clients gegeben sind.

Du siehst es gibt hier diverse Dinge zu beachten.

Warum dein Skript nicht das macht was du von ihm erwartest kann man hier also nur erahnen wenn man weiß was du darin überhaupt machst.

Probleme mit der Aufgabenplanung sind zu 99,9% hausgemacht und kein Fehler des Windows Server sondern des Users der ihn bedient.

Gruß jodel32
MichaelW84
MichaelW84 09.04.2016 um 14:21:10 Uhr
Goto Top
Mein Script ist für Datensicherung zuständig, es läuft mit normalen rechten als auch mit admin rechten.
Ich habe es auch mit beiden shells getestet (mit und ohne erhöhen rechten) es funktioniert einwandfrei nur wird es nicht ohne benutzeranmeldung ausgeführt.

Ich habe sogar schon ein Account erstellt der Stapelverarbeitung zulässt (per gpo) leider auch ohne Erfolg.
LKaderavek
LKaderavek 18.04.2016 um 11:18:17 Uhr
Goto Top
Meines soll jeden Tag, die jeweilige Archiv USB Festplatte bereinigen bevor die Kopie startet.


net use Z: \\nas-backup-1\MONTAG\BACKUP

Z:

rmdir CLIENTS /S /Q
PING -n 31 127.0.0.1>nul
rmdir SERVER /S /Q
PING -n 31 127.0.0.1>nul
rmdir VEEAM /S /Q
PING -n 31 127.0.0.1>nul

mkdir CLIENTS
mkdir SERVER
mkdir VEEAM

net use Z: /D /Y

exit /b 0
LKaderavek
LKaderavek 18.04.2016 um 11:22:40 Uhr
Goto Top
Hier noch die XML vom Job:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2016-04-07T11:40:23.092489</Date>
<Author>DOMAIN\Administrator</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2016-04-07T09:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByWeek>
<DaysOfWeek>
<Monday />
</DaysOfWeek>
<WeeksInterval>1</WeeksInterval>
</ScheduleByWeek>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>DOMAIN\Administrator</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\SysWOW64\cmd.exe</Command>
<Arguments>/C "C:\SKRIPTS\BACKUP-CLEANUP\MONTAG.bat"</Arguments>
</Exec>
</Actions>
</Task>
114757
114757 18.04.2016 aktualisiert um 15:34:29 Uhr
Goto Top
Zitat von @LKaderavek:

Meines soll jeden Tag, die jeweilige Archiv USB Festplatte bereinigen bevor die Kopie startet.


net use Z: \\nas-backup-1\MONTAG\BACKUP

Z:

rmdir CLIENTS /S /Q
PING -n 31 127.0.0.1>nul
rmdir SERVER /S /Q
PING -n 31 127.0.0.1>nul
rmdir VEEAM /S /Q
PING -n 31 127.0.0.1>nul

mkdir CLIENTS
mkdir SERVER
mkdir VEEAM

net use Z: /D /Y

exit /b 0
Hinterlege die NAS-Credentials im Tresor des Users "DOMAIN\Administrator" wenn diese anders lauten dann klappt das auch das sind zu 99% Zugriffsprobleme auf das NAS!
Und das Laufwerksmapping ist absolut überflüssig für deine Batch, mach es ohne das reduziert die eventuelle Fehleranfälligkeit.
LKaderavek
LKaderavek 19.04.2016 um 16:24:11 Uhr
Goto Top
Dein Vorschlag war gut gemeint, hat aber leider nix gebracht...kann man da kein Log erstellen, oder eine Ausgabe machen, um zu sehen, wo es hängt / krankt?
114757
114757 19.04.2016 aktualisiert um 16:34:43 Uhr
Goto Top
Einfach die Ausgabe der Befehle in eine Datei umleiten
........... >>c:\Ordner\debugging.log
LKaderavek
LKaderavek 24.05.2016 um 20:49:21 Uhr
Goto Top
Gibt es eigtl. schon eine funktionierende Lösung für das Ausführen von Skripts im Taskplaner beim Server 2012 R2??
129413
129413 24.05.2016 aktualisiert um 20:58:08 Uhr
Goto Top
Zitat von @LKaderavek:

Gibt es eigtl. schon eine funktionierende Lösung für das Ausführen von Skripts im Taskplaner beim Server 2012 R2??
?? Skripts funktionieren im Taskplaner einwandfrei wenn man alle zu beachtenden Dinge wie oben schon geschrieben wurde auch umsetzt!

Es steht und fällt eben immer mit dem User der den Server bedient face-wink.

Hier zu behaupten das Skripte unter 2012R2 nicht funktionieren würden ist absoluter Schwachfug, sorry.

Debugging-Optionen wurden dir ja auch schon genannt, also machen und sich mal mit dem Background beschäftigen.

Gruß skybird
MichaelW84
MichaelW84 31.08.2016 um 23:56:30 Uhr
Goto Top
Ich habe eine Lösung für das Problem gefunden auch wenn es schon eine Weile her ist...

1. Der user der das Script ausführt muss berechtigt werden Stapelverarbeitung machen zu dürfen.

http://openbook.rheinwerk-verlag.de/microsoft_netzwerk/microsoft_netzwe ...

2. Verknüpfung der Batchdatei erstellen.
Rechtsklick, eigenschaften, erweitert, als administrator ausführen den Haken reinmachen.

3. In der Aufgabenplanung die Verknüpfung zum starten des Scripts angeben, Stapelverarbeitungsuser hinterlegen und den Haken mit erhöten Rechten reinmachen.

Dann sollte es klappen, zumindest war das meine Lösung.