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-Key: 301184

Url: https://administrator.de/contentid/301184

Printed on: April 26, 2024 at 14:04 o'clock

Member: xbast1x
xbast1x Apr 07, 2016 at 13:13:24 (UTC)
Goto Top
Was soll den der Auslöser sein? Eine Zeit? Server Start?
Member: LKaderavek
LKaderavek Apr 07, 2016 at 13:16:51 (UTC)
Goto Top
Eine Zeit.
Member: MichaelW84
MichaelW84 Apr 07, 2016 at 14:26:49 (UTC)
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.
Mitglied: 127944
127944 Apr 07, 2016 updated at 14:53:59 (UTC)
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ß
Member: LKaderavek
LKaderavek Apr 07, 2016 at 16:59:24 (UTC)
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
Mitglied: 127944
127944 Apr 07, 2016 at 17:58:15 (UTC)
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.
Member: MichaelW84
MichaelW84 Apr 07, 2016 at 18:35:10 (UTC)
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.
Mitglied: 127944
127944 Apr 07, 2016 at 18:57:29 (UTC)
Goto Top
Das wird nicht funktionieren. Mach es wie ich geschrieben habe und hänge einfach deinen Parameter hinten an
Member: LKaderavek
LKaderavek Apr 07, 2016 at 20:29:06 (UTC)
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
Mitglied: 127944
127944 Apr 07, 2016 at 20:54:57 (UTC)
Goto Top
c oder C spielt keine Rolle - den Leerschritt hatte ich in meinem Beispiel auch angegeben
Member: SaschaRD
SaschaRD Apr 08, 2016 at 08:59:28 (UTC)
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
Mitglied: 127944
127944 Apr 08, 2016 at 09:02:56 (UTC)
Goto Top
Zitat von @SaschaRD:
Was also tun? Start in (optional) hinzufügen.
Das ist für das genannte Problem leider keine Lösung!
Mitglied: 114757
114757 Apr 08, 2016 updated at 09:31:26 (UTC)
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
Member: MichaelW84
MichaelW84 Apr 09, 2016 at 12:21:10 (UTC)
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.
Member: LKaderavek
LKaderavek Apr 18, 2016 at 09:18:17 (UTC)
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
Member: LKaderavek
LKaderavek Apr 18, 2016 at 09:22:40 (UTC)
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>
Mitglied: 114757
114757 Apr 18, 2016 updated at 13:34:29 (UTC)
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.
Member: LKaderavek
LKaderavek Apr 19, 2016 at 14:24:11 (UTC)
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?
Mitglied: 114757
114757 Apr 19, 2016 updated at 14:34:43 (UTC)
Goto Top
Einfach die Ausgabe der Befehle in eine Datei umleiten
........... >>c:\Ordner\debugging.log
Member: LKaderavek
LKaderavek May 24, 2016 at 18:49:21 (UTC)
Goto Top
Gibt es eigtl. schon eine funktionierende Lösung für das Ausführen von Skripts im Taskplaner beim Server 2012 R2??
Mitglied: 129413
129413 May 24, 2016 updated at 18:58:08 (UTC)
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
Member: MichaelW84
MichaelW84 Aug 31, 2016 at 21:56:30 (UTC)
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.