Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Aufruf einer CMD aus einem VBScript läuft nicht sauber

Frage Entwicklung VB for Applications

Mitglied: derhoeppi

derhoeppi (Level 2) - Jetzt verbinden

31.01.2014 um 12:06 Uhr, 1691 Aufrufe, 8 Kommentare

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
Mitglied: colinardo
31.01.2014, aktualisiert um 13:14 Uhr
Hallo derhoeppi:
01.
Set objShell = CreateObject("Wscript.Shell") 
02.
objShell.Run "cmd.exe /c C:\Datei.cmd", 1, True
dann solltest du das VB-Script auch als Admin starten wenn dies für das Batch-Script nötig ist.
runas /user:Administrator "cscript.exe //NOLOGO deinScript.vbs"
Grüße Uwe
Bitte warten ..
Mitglied: derhoeppi
31.01.2014 um 16:50 Uhr
Hallo Uwe,

das ganze soll als Scheduled Task laufen und wird derzeit über die wscript.exe aufgerufen. Ich habe deinen Run Befehl übernommen und dennoch beginnt die erste Schleife nach dem Timeout erneut, obwohl diese bereits außerhalb der Schleife ist.

Gruß
derhoeppi
Bitte warten ..
Mitglied: colinardo
31.01.2014 um 17:13 Uhr
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
Bitte warten ..
Mitglied: derhoeppi
01.02.2014 um 18:06 Uhr
Hallo Uwe,
der Task läuft als System-Benutzer. Damit sollten / sind die Berechtigungen in Ordnung - session.txt wird erstellt. Im Task ist ebenfalls der Haken bei "Mit höchsten Privilegien ausführen" gesetzt. Meine Session.txt liest die Sitzungen korrekt aus. Aufbau der Spalten: SITZUNGSNAME, BENUTZERNAME, ID, STATUS, TYP, GERÄT. Durch die Tokens=3 soll eigentlich die ID verwendet werden, aber bei der Session Service z.B. gibt es keinen Benutzernamen, so dass die dritte Spalte leider der Status ist. Für meine belange - Abmelden aller angemeldeten Benutzer habe ich damit jedoch kein Problem.

Wenn ich für das VBS und das Batch-Skript jeweils einen separate Scheduled Tasks erstelle werden beide zu meiner Zufriedenheit ausgeführt. Mein Problem ist jedoch das in der VBS eine Bedingung geprüft wird, die bei derer Erfüllung nur den Logoff ausführt und damit das Batch-Skript aufruft.

Gruß
derhoeppi
Bitte warten ..
Mitglied: derhoeppi
05.02.2014 um 10:30 Uhr
Hallo Uwe,

ich möchte das ganze nun weiter umbauen, so dass ich komplett in VBS bleibe.

strComputer = "."
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSessions = objWMI.ExecQuery _
("Select * from Win32_LogonSession Where LogonType = 10 or LogonType = 2")

For Each objSession in colSessions
Set colList = objWMI.ExecQuery("Associators of " _
& "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
WScript.Echo "LogonID: " & objSession.LogonID
For Each objItem in colList
WScript.Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName
Next
Next

Mein Problem ist nun das ich als User auf einem System via RDP angemeldet bin. Ich habe mich gewundert, dass mir 4 LogonID's zurückgemeldet werden. Wenn ich mir dazu wie in dem Skript den Benutzernamen ausgeben lasse, sind die 4 LogonID's alle meinem Benutzer zugeordnet. Hast du einen Tipp wie ich in der colSession bereits nach dem Usernamen filtern kann, so dass ich als Ergebnis jeden User nur einmal erhalte?

Gruß
derhoeppi
Bitte warten ..
Mitglied: colinardo
05.02.2014, aktualisiert um 12:55 Uhr
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)
"Select * from Win32_LogonSession Where LogonType = 10"
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:
01.
strComputer = "."    
02.
Set objWMI = GetObject("winmgmts:" _  
03.
              & "{impersonationLevel=impersonate}!\\" _  
04.
              & strComputer & "\root\cimv2")  
05.
 
06.
Set colExplorers = objWMI.ExecQuery _  
07.
    ("Select * from Win32_Process Where Name = 'explorer.exe'")  
08.
 
09.
If colExplorers.Count > 0 Then   
10.
   For Each proc In colExplorers 
11.
   		colProperties = proc.GetOwner(strNameOfUser,strUserDomain) 
12.
   		MsgBox strUserDomain & "\" & strNameOfUser 
13.
   Next  
14.
End If
Grüße Uwe
Bitte warten ..
Mitglied: derhoeppi
05.02.2014 um 12:58 Uhr
Hallo Uwe,
ich habe mir mal die Klasse Win32_LoggedOnUser angesehen. Über diese Klasse beziehe ich bereits in meinem Skript den Benutzernamen. Wenn ich jedoch aus dieser Klasse alle Informationen beziehen möchte, erhalte ich auch mehrere Sessions, so dass ich ebenfalls einen Benutzer mehrmals erhalte.

Gruß
derhoeppi
Bitte warten ..
Mitglied: colinardo
05.02.2014, aktualisiert um 13:03 Uhr
mach so wie oben geschrieben ...
Es sei aber darauf hingewiesen das die Queries auf neueren Systemen eventuell gecachte Sessions beinhalten können, und es deshalb zu doppelten Namen kommt.
Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
CMD cURL Access Token parsen (2)

Frage von maddig zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...