Batch geändertes Verhalten der Batch-Datei durch call-Aufruf aus anderem Batch

chris.303

Newbie
Registriert
März 2013
Beiträge
3
Hallo!

Ich bin noch ein kleiner Frischling was Batch-Programmierung angeht und stolpere derzeit über ein Verhalten, dass ich mir so nicht erklären kann.

Der Aufbau ist folgender:
Ich habe ein VBS-Script auf einem Netzlaufwerk. (Braucht Admin-Rechte)
Dieses startet eine bat-Datei, die eigentlich nichts groß macht, außer ein Netzlaufwerk zu verbinden, dort einen Ordner mit dem Computernamen anzulegen, in diesem noch einen mit Datum und Uhrzeit und dahin dann Daten zu kopieren.

Bis hierhin funktionierte bisher alles problemlos. Für sich laufen beide.

Jetzt wollte ich allerdings diese Scripte über einen anderen Batch starten.
Also habe ich eine ganz banale Batch-Datei geschrieben:

@echo off
set MigDrive=\\url.de\Netzwerk\Ordner
net use Y: %MigDrive%
call Y:Script1.vbs
net use Y: /delete /yes
exit

Und plötzlich geht alles drunter und drüber.
Führe ich diese Datei als Admin aus, macht sie gar nichts. Sie ignoriert sogar "pause"-Befehle.
Starte ich sie als normaler Nutzer, macht sie, was sie soll, kann aber (logischerweise) das Skript nicht ausführen, weil sie ja keine Berechtigung dafür hat.

Ok. Da dachte ich mir, rufe ich doch statt der vbs einfach die bat auf. Testweise. Also:

call Y:Script1.vbs ---> call Y:Script2.bat

Und dann wurde es richtig seltsam: Als Admin passierte weiterhin nichts, als normaler Nutzer wird sie ausgeführt, allerdings fehlerhaft. Die Ordner mit dem Rechnernamen werden nicht angelegt und der Ordner mit Datum und Uhrzeit wird plötzlich nur noch mit der Uhrzeit benannt.

Kann mir da jemand helfen?

Gruß,
Christopher
 
Dein Post ist ein wenig verwirrend und zudem fehlen ein paar Infos.

Was meinst du mit "als Admin ausführen" ? Findet da ein Userwechsel statt oder bleibts beim normalen Nutzer der die durch UAC beschränkten Rechte erhöht?

Generell gilt beim Laufwerkmapping dass das Laufwerk immer nur im Kontext des Users sichtbar ist, der das Mapping macht. Wenn du so eine Batch unter einem anderen Account laufen lässt, dann hat dieser keine interaktive Sitzung und kann daher nicht auf Y: zugreifen.
Ergänzung ()

chris.303 schrieb:
call Y:Script1.vbs

Y:\ wäre die korrekte Syntax


Poste am besten alle deine Scripte.
Ergänzung ()

chris.303 schrieb:
auf einem Netzlaufwerk

Ist das relevant? Gelten auf euren Netzlaufwerken besondere Rechte?
 
Zuletzt bearbeitet:
Hi easy,

danke schon mal für deine schnelle Antwort.

Mit "als Admin ausführen" meine ich lediglich, dass ich sie über das Kontextmenü dann mittels "als Administrator ausführen" öffne. Hintergrund der Geschichte ist einfach, dass der Batch letztendlich über den Taskplaner im Hintergrund mit Admin-Berechtigungen gestartet werden soll, während der "normale" User am PC arbeitet.

Das VBS-Script wäre zu umfangreich zum Posten. Aber das liegt im gleichen Ordner wie die Batch-Datei, ruft diese auf und sammelt danach noch ein paar Daten aus Systemordnern, weshalb sie Admin-Rechte braucht.

Die andere Batch-Datei (Nennen wir sie jetzt mal Skript3.bat):
@echo off
:: ---- DATEIPFADE ----
::
set MigDrive=\\url.de\Netzwerk\Ordner
set MigData=\Ordner\Daten
set Date_Time=%date%_%time:~0,2%_%time:~3,2%_%time:~6,2%
::
:: --------------------
::
net use X: %MigDrive%
X:
cd\
::Speicherort für Daten
cd X:%MigData%
::Überprüfen, ob Ordner für Rechner angelegt ist
if exist %COMPUTERNAME%.%USERDNSDOMAIN% (goto Computer_existiert)
echo 1 existiert nicht >> Testlog.txt
mkdir %COMPUTERNAME%.%USERDNSDOMAIN%
:Computer_existiert
::Überprüfen, ob Archivordner für Rechner angelegt ist
if exist %COMPUTERNAME%.%USERDNSDOMAIN%.Archiv (goto Archiv_existiert)
echo 2 existiert nicht >> Testlog.txt
mkdir %COMPUTERNAME%.%USERDNSDOMAIN%.Archiv
:Archiv_existiert
::Ordner mit Datum und Uhrzeit anlegen
mkdir %COMPUTERNAME%.%USERDNSDOMAIN%.Archiv\%Date_Time%
:: Daten kopieren
X:\test\Automatisierung\robocopy %COMPUTERNAME%.%USERDNSDOMAIN% %COMPUTERNAME%.%USERDNSDOMAIN%.Archiv\%Date_Time% /e
echo Kopieren erfolgreich >> Testlog.txt
C:
cd\
net use X: /delete /yes
exit

Wie schon gesagt: Für sich läuft das Skript problemlos.

Um es noch etwas zu visualisieren:

PC (User)
--> Taskplaner startet das Skript, um das es geht (als Admin), dass
das Netzlaufwerk Y verbindet (Zugriff letztendlich nur als Admin)

-------------------------> Netzlaufwerk Y: Skript 3 (alternativ das VBS-Skript, das
Skript 3 startet) wird gestartet und verbindet Netzlaufwerk X:

--------------------------------------------------> Hier werden dann von Skript 3 Ordner angelegt und Daten hinkopiert.

So, ich hoffe, die Verwirrung ist jetzt perfekt. ;)
 
Ich glaube nicht dass du in einer Batch die vom Taskplaner aufgerufen wird, ohne interaktive Sitzung, ein Laufwerksbuchstabe gemappt werden kann. Probier mal das kopieren so umzustellen, daß du direkt auf den UNC Pfad zugreifst, ohne Laufwerksbuchstaben.
 
Hi easy,

mittlerweile hat es sich erledigt, aber ich wollte mich zumindest noch kurz für die schnellen Antworten bedanken.

Gruß,
Chris
 
Hi, danke für die Rückmeldung.

Wie hast du es denn umgesetzt? Immernoch mittels Taskplaner? Benutzt du in der Batch jetzt UNC Pfade anstatt Laufwerksverknüpfungen?
 
Zurück
Oben