multistorm
Goto Top

Batchscript lässt sich nicht mit der Aufgaben Planung ausführen

Hallo ich fange erstmal mit den Rahmenbedingungen an

Server:
Windows Server 2012 R2 als HyperV VM
15 GB RAM
6 Cores
MS SQL Server
In einer Domäne

Ziel
Der SQL Server erzeugt stündlich Backups,
diese, jedenfalls konnte ich es nicht anders einstellen werden auf der Lokalen Platte gespeichert
Hier können Sie aber nicht liegen bleiben da sonst der Lokale Speicher nach 3 Tagen voll ist.

Also habe ich mir ein Netzlaufwerk eingerichtet

W:\ welches auf eine Freigabe zeigt in der die Backups abgelegt werden können.

nun habe ich mir ein BATCH Script geschrieben welches die Dateien erst Verschiebt und im Anschluss die ältesten 20 Backups löscht.
Wenn ich das Script per Hand Ausführe Funktioniert das Fehlerfrei. Starte ich das Sxript aber über die Aufgaben Planung passiert einfach nix.
ich sehe zwar das im Taskmanager das Script gestartet wird, aber es passiert einfach nichts .... vermutlich mache ich einen ganz einfachen Fehler
aber ich weis einfach nicht welchen

hier erstmal das Script

@echo off & setlocal

set "Ordner=W:\Backup"
set "Logfile=C:\Datenbank Backups\database_move_log.log"
set Anzahl=20

@echo [%date% %time%] - Starte das Verschieben von Backups >"%Logfile%"
@echo [%date% %time%] - Starte das Verschieben von Backups
move "C:\Datenbank Backups\BeEvent\*.bak" "W:\Backup" >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do del "%Ordner%\%%i"
@echo [%date% %time%] - %Ordner% >"%Logfile%"
@echo [%date% %time%] - %Ordner%

die Aufgabenplanung sieht wie folgt aus ...
Allgemein:
Unabhängig von der Benutzeranmeldung ausführen
Mit Höchsten Privilegien ausführen
Benutzer Administrator

Trigger:
[X] - Täglich um 2 Uhr

Aktion:
[X] - Programmstart | Pfad zum Script

Bedingung:
- Keine

Einstellungen:
[X] - Ausführen der Aufgabe bei bedarf zulassen
[X] - Aufgabe so schnell wie möglichich nach einem verpassten start ausführen
[X] - Falls Aufgabe scheitert, neustart alle 30 min
[X] - neustartversuch bis maximal 3 x
[X] - Aufgabe beenden wenn ausführung länger als 4 Stunden Dauert
[X] - Beenden der aktiven Aufgabe erzwingen, falls sie auf Aufforderung nicht beendet wird

als Rückgabe bekomme ich nur
Informationen 21.10.2014 14:53:33 102 Aufgabe abgeschlossen (2) b5584a54-d305-4d5b-b939-2130dfa75055
aber passiert ist absolut nix ...
jemand eine Idee was ich Falsch mache ?

Hilfe wäre echt klassen,
vielen dank im Vorraus

Content-ID: 252644

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

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

DerWoWusste
DerWoWusste 21.10.2014 aktualisiert um 15:15:50 Uhr
Goto Top
Hi.

Du musst im Skript das Laufwerk mappen - und schon klappt's.
MultiStorm
MultiStorm 22.10.2014 um 12:15:47 Uhr
Goto Top
Hy...
Kannst du das genauer erklären ...
mit Laufwerk meinst du sicher das Ziellaufwerk W:\ ?
aber das ist schon gemappt .....
MultiStorm
MultiStorm 22.10.2014 aktualisiert um 12:32:26 Uhr
Goto Top
also,
ich denke verstanden was du meinst habe ich ...
wie sollte das laufwerk auch zugreifbar sein wenn der Benutzer vielleicht garnicht angemeldet ist !?!?!

Also habe ich deinen Rat befolgt und ein Mapping eingebaut

@echo off & setlocal

net use w: \\Server\98_Datenbank_Backups$\

set "Ordner=W:\Backup"
set "Logfile=C:\Datenbank Backups\database_move_log.log"
set Anzahl=20

@echo [%date% %time%] - Starte das Verschieben von Backups >"%Logfile%"
@echo [%date% %time%] - Starte das Verschieben von Backups
move "C:\Datenbank Backups\BeEvent\*.bak" "W:\Backup" >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do del "%Ordner%\%%i"
@echo [%date% %time%] - %Ordner% >"%Logfile%"
@echo [%date% %time%] - %Ordner%

Ausführung von hand funktioniert wie gewohnt ....
Ausführung per Aufgaben planung funktioniert nach wie vor nicht
ich habe auch folgendes Versucht

@echo off & setlocal

set "Ordner=\\Server\98_Datenbank_Backups$\Backup"
set "Logfile=C:\Datenbank Backups\database_move_log.log"
set Anzahl=20

@echo [%date% %time%] - Starte das Verschieben von Backups >"%Logfile%"
@echo [%date% %time%] - Starte das Verschieben von Backups
move "C:\Datenbank Backups\BeEvent\*.bak" "W:\Backup" >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups >"%Logfile%"
@echo [%date% %time%] - Beginne das Löschen alter Backups
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d "%Ordner%"') do del "%Ordner%\%%i"
@echo [%date% %time%] - %Ordner% >"%Logfile%"
@echo [%date% %time%] - %Ordner%

Funkitoniert leider auch nicht ...
Übersehe ich etwas ?
DerWoWusste
DerWoWusste 22.10.2014 um 12:49:41 Uhr
Goto Top
Ja, vermutlich übersiehst Du, dass der ausführende Benutzer nicht ohne weiteres w: mappen darf. Hat das Konto, welches Du im task eingetragen hat denn Zugriff auf w:?
Wenn ja - kannst Du den Output des Skriptes in eine Datei loggen und diese hier ausstellen?
MultiStorm
MultiStorm 22.10.2014 um 13:06:50 Uhr
Goto Top
hy,
also das mit dem Loggen ist das nächste Problem ....

Also mal vorab ...
Batch Programmieren ist nicht gerade meine stärke, hätte aber nicht gedacht das eine so einfache Problemstellung
solche wellen schlägt ...

also der Benutzer mit dem der Task gestartet wird, ist das Konto Administrator, wenn das keinen zugriff hat weis ich es auch nicht face-smile
was das Loggen angeht, habe ich das schon versucht, wie man am code des Scrips sehen kann ... leider kommt in der logdatei nix an
...
Sie wir zwar angelegt aber die Datei bleibt leer ......

Ich habe in zwischen auchn schon versucht das lazufwerk aus der gleichung zu nehmen in dem ich mit den UNC Pfaden gearbeitet habe aber das Problem bleibt das gleich ....

habe über google auch schon hinweise gefunden das es ggf. an den Einstellungen der Aufgaben liegen kann und habe folgende umkonfiguriert

Programm / Skript = "C:WindowsSystem32\cmd.exe"
Argument = C:\Datenbank Backups\MoveBackups.bat
Starten In =C:\Datenbank Backups\

diese Einstellungen sollten laut den einschlägigen Foren Funktionieren aber mein Task startet nun gar nicht mehr ...

Fehlermeldung:
Die Aufgabenplanung konnte die Aufgabe "\Datenbank Backups Verschieben" für den Benutzer "BlaBla\Administrator" nicht starten. Zusätzliche Daten: Fehlerwert: 2147942402

kann doch eigentlich nicht so schwer sein 20 Dateien zu verschieben ?

Ich bin mitlaweile schon so verzweifelt das ich es schon mit einem VBS Script vewrsucht habt, das kann er scheinbar aber nicht starten weil er nicht Weiß wie ... keine Ahnung .... regt mich gerade alles ein bissel auf face-smile

Wenn du einen Tipp bezüglich der Logausgabe hast immer her damit,
dann poste ich dir das Ergebnis sehr gerne ....
DerWoWusste
Lösung DerWoWusste 22.10.2014 aktualisiert um 14:04:07 Uhr
Goto Top
Es wird nur eine Kleinigkeit sein.
Nimm bitte einen neuen Task, der auf die selbe Weise (selbes Konto zum Ausführen, selber Trigger) folgende test.bat ausführt:
md c:\test
net use w: \\Server\98_Datenbank_Backups$\ >c:\test\Testtasklog.txt
md w:\Testordner >>c:\test\Testtasklog.txt
Und schau dann, ob unter w: ein Testordner erstellt wurde und was in c:\test\Testtasklog steht.
MultiStorm
MultiStorm 22.10.2014 um 13:46:42 Uhr
Goto Top
Funktioniert leider nicht ...
Habe es erstmal per hand ausgeführt das Script

Verzeichnis wird angelegt ...
Logdatei erzeugt ...
Log bleibt leer
Netzlaufwerk wird nicht verbunden ....

also:
habe ich ein Pause ans ende deines Scriptes angefügt ....
und in der Console steht ....

Systemfehler 53 der Netzwerkpfad wurde nicht gefunden

kann das daran liegen das es sich um eine versteckte Freigabe handelt ?
wenn ich das net use in der Powershell versuche bekomme ich den gleichen Fehlercode

Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\Users\Administrator.FIRMA> net use w: \\Server\98_Datenbank_Backups$\
Systemfehler 53 aufgetreten.

Der Netzwerkpfad wurde nicht gefunden.

PS C:\Users\Administrator.FIRMA>

der Netzwerkpfad ist aber Korrekt !
wenn ich per Copy & Past den Pfad in den Explorer kopiere geht der Ordner ohne Probleme auf.
MultiStorm
MultiStorm 22.10.2014 um 13:49:40 Uhr
Goto Top
Scheint wirklich an der versteckten Freigabe zu liegen ...
Gleicher Server ... andere Freigabe (nicht versteckt ansonsten analog zur versteckten Freigabe)
Funkitoniert !!!
MultiStorm
MultiStorm 22.10.2014 aktualisiert um 13:52:05 Uhr
Goto Top
och nöööö......
scheinbar darf der Pfad keine \ haben

Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. Alle Rechte vorbehalten.

PS C:\Users\Administrator.FIRMA> net use w: \\SRVBLACKBOX\98_Datenbank_Backups$\
Systemfehler 53 aufgetreten.

Der Netzwerkpfad wurde nicht gefunden.

PS C:\Users\Administrator.FIRMA> net use w: \\SRVBLACKBOX\98_Datenbank_Backups$
Der Befehl wurde erfolgreich ausgeführt.

PS C:\Users\Administrator.FIRMA>
DerWoWusste
Lösung DerWoWusste 22.10.2014 aktualisiert um 14:04:11 Uhr
Goto Top
Hm, dazu gibt es keinen Grund. Das Verstecken ändert nichts an der Freigabe, alles sollte genau so funktionieren.
MultiStorm
MultiStorm 22.10.2014 um 13:53:49 Uhr
Goto Top
so ich versuchs jetzt nochmal mit deinem Script
DerWoWusste
Lösung DerWoWusste 22.10.2014 aktualisiert um 14:04:13 Uhr
Goto Top
Witzig... ich würde instinktiv auch nie einen \ ans Ende setzen, habe es nur per copy und paste von Dir übernommen...wusste auch nicht, dass es Probleme bereitet.
MultiStorm
MultiStorm 22.10.2014 um 13:58:03 Uhr
Goto Top
Also
ich habe das Script in den Original Task gehängt ...
also nur das Script gegen deins getauscht ...

Task von hand gestartet

Verzeichnis auf C: wurde angelegt ....

Inhalt der Logdatei

"Der Befehl wurde erfolgreich ausgefhrt."

netzlaufwerk kann ich nicht sehen ... (also Wface-smile
aber der Testordner wurde in der Freigabe erstellt
bleibt aber leer ... (Glaube das muss auch so)
MultiStorm
MultiStorm 22.10.2014 um 13:58:43 Uhr
Goto Top
Probiere das Script gleich nocheinmal ohne \ also meins vielleicht lag da ja der fehler
MultiStorm
MultiStorm 22.10.2014 aktualisiert um 14:03:43 Uhr
Goto Top
Jupp jetzt läuft es .....
also halten wir mal für die Nachwelt fest .....

1. wenn in einem Script ein netzlaufwerk verwendet werden soll muss dieses auch im script gemappt werden
net use BUCHSTABE: UNC Pfad

2. beim UNC Pfad darf kein \ als abschluss stehen ....
MultiStorm
MultiStorm 22.10.2014 um 14:04:46 Uhr
Goto Top
Danke dir für deine Unterstüzung
DerWoWusste
DerWoWusste 22.10.2014 aktualisiert um 14:11:44 Uhr
Goto Top
Gerne.
Noch als Zusatz zu
wenn in einem Script ein netzlaufwerk verwendet werden soll muss dieses auch im script gemappt werden
Das liegt daran, das Netzlaufwerke nicht systemweit, sondern eben benutzergebunden erstellt werden. Hinzu kommt: Lässt man einen Task mit der Option "mit höchsten Privilegien ausführen" ("elevated") laufen, kann es sogar der selbe Benutzer sein, der gerade angemeldet ist UND ein Netzlaufwerk w: hat - es könnte in dem Task nicht verwendet werden, ohne es separat erneut zu mappen. Grund wäre dann die UAC, die das Weiterreichen von Netzlaufwerken zwischen Konto A "normal" und Konto A "elevated" unterbindet.
bastla
bastla 22.10.2014 um 18:26:45 Uhr
Goto Top
Hallo MultiStorm!

Zur Abrundung: Da Du ja sinnvoller Weise eine Variable (%Ordner%) verwendest, würde ich diese auch konsequent nutzen (also auch in der "move"-Zeile), womit der Laufwerksbuchstabe ohnehin nur genau einmal benötigt würde - da kannst Du aber auch gleich ganz darauf verzichten:
set "Ordner=\\Server\98_Datenbank_Backups$\Backup"
Grüße
bastla