Aufruf einer CMD aus einem VBScript läuft nicht sauber
Hallo Leute,
ich habe ein VBScript, das ein vorhandenes Batch-Skript aufrufen soll. Für den Aufruf der CMD habe ich folgende Zeile eingefügt.
CALL wshShell.Run("Datei.cmd", 1, True)
Diese Zeile wird im Skript aufgerufen, so dass mein Batch-Skript gestartet wird. Leider startet dieses Skript nicht korrekt bzw. wird nicht bis zum Ende ausgeführt.
Die Batch-Datei enthält folgende Zeilen:
query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO msg %%i /Time 60 /V Test
timeout 60
for /f "skip=1 tokens=3," %%a in (session.txt) DO Andere Anweisung
Wenn ich die Batch selber mit einem Rechtsklick RunAsAdministrator ausführe, funktioniert sie einwandfrei. Wenn die Batch aus der VBS aufgerufen wird, läuft Sie bis zur Zeile timeout 60 und beginnt anschließend wieder die erste for Schleife. Woran liegt es und wie kann ich es lösen oder umgehen?
Gruß
derhoeppi
ich habe ein VBScript, das ein vorhandenes Batch-Skript aufrufen soll. Für den Aufruf der CMD habe ich folgende Zeile eingefügt.
CALL wshShell.Run("Datei.cmd", 1, True)
Diese Zeile wird im Skript aufgerufen, so dass mein Batch-Skript gestartet wird. Leider startet dieses Skript nicht korrekt bzw. wird nicht bis zum Ende ausgeführt.
Die Batch-Datei enthält folgende Zeilen:
query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO msg %%i /Time 60 /V Test
timeout 60
for /f "skip=1 tokens=3," %%a in (session.txt) DO Andere Anweisung
Wenn ich die Batch selber mit einem Rechtsklick RunAsAdministrator ausführe, funktioniert sie einwandfrei. Wenn die Batch aus der VBS aufgerufen wird, läuft Sie bis zur Zeile timeout 60 und beginnt anschließend wieder die erste for Schleife. Woran liegt es und wie kann ich es lösen oder umgehen?
Gruß
derhoeppi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 228270
Url: https://administrator.de/forum/aufruf-einer-cmd-aus-einem-vbscript-laeuft-nicht-sauber-228270.html
Ausgedruckt am: 11.05.2025 um 17:05 Uhr
8 Kommentare
Neuester Kommentar
mir ist schleierhaft wieso deine Batch überhaupt funktioniert, wenn ich meine Ausgabe von query session betrachte gibt dein Befehl nicht Usernamen aus, sondern den Status. Und dann läuft in deiner Schleife natürlich noch der Befehl MSG der bei nicht Erreichbarkeit des Users jeweils 60 Sekunden wartet...
Wenn deine Batch so läuft (wie auch immer) dann ist der Task falsch eingestellt, bzw. ein falscher Useraccount im Task angegeben, oder das Häkchen bei Mit höchsten Privilegien ausführen nicht gesetzt. Oder der angegebene User hat keine Rechte in den Ordner zu schreiben in dem die Batch ausgeführt wird. Leite die Datei session.txt also mal in ein Verzeichnis um in dem der angegebene Useraccount im Task die entsprechenden Schreibrechte hat...
Grüße Uwe
Wenn deine Batch so läuft (wie auch immer) dann ist der Task falsch eingestellt, bzw. ein falscher Useraccount im Task angegeben, oder das Häkchen bei Mit höchsten Privilegien ausführen nicht gesetzt. Oder der angegebene User hat keine Rechte in den Ordner zu schreiben in dem die Batch ausgeführt wird. Leite die Datei session.txt also mal in ein Verzeichnis um in dem der angegebene Useraccount im Task die entsprechenden Schreibrechte hat...
Grüße Uwe
Hi,
LogonType reicht wenn dieser auf 10 steht. Dieser beinhaltet bereits interaktive Logon-Sessions (http://msdn.microsoft.com/en-us/library/aa394189%28v=vs.85%29.aspx)
Es sei aber darauf hingewiesen das die Queries auf neueren Systemen eventuell gecachte Sessions beinhalten können, und es deshalb zu doppelten Namen kommt.
Für eine zuverlässigere Abfrage ist hier die Klasse Win32_LoggedOnUser besser geeignet oder das u.s. Script.
Powershell:
Wenn du bei VBS bleiben willst:
Grüße Uwe
LogonType reicht wenn dieser auf 10 steht. Dieser beinhaltet bereits interaktive Logon-Sessions (http://msdn.microsoft.com/en-us/library/aa394189%28v=vs.85%29.aspx)
"Select * from Win32_LogonSession Where LogonType = 10"
Für eine zuverlässigere Abfrage ist hier die Klasse Win32_LoggedOnUser besser geeignet oder das u.s. Script.
Powershell:
- Meine Empfehlung => http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged- ...
- http://gallery.technet.microsoft.com/scriptcenter/d46b1f3b-36a4-4a56-95 ...
Wenn du bei VBS bleiben willst:
strComputer = "."
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colExplorers = objWMI.ExecQuery _
("Select * from Win32_Process Where Name = 'explorer.exe'")
If colExplorers.Count > 0 Then
For Each proc In colExplorers
colProperties = proc.GetOwner(strNameOfUser,strUserDomain)
MsgBox strUserDomain & "\" & strNameOfUser
Next
End If