2017-03-09 3 views
1

Ich habe einige Probleme mit einem Shell-Befehl und die Überprüfung der Ausgabe der Daten. Ich möchte mit vba überprüfen, ob der aktuelle Remote-Benutzer der DB aktiv ist. Invba Shell-Befehl ausgeführt, aber keine Ausgabe

Eingabeaufforderung =

for /f "tokens=1-8" %a in ('quser') do @if "%d"== "Active" echo %COMPUTERNAME% %a %d 

kehrt der Benutzer angemeldet und ihr Zustand Ich wünsche, dass keiner von ihnen zu überprüfen sind getrennt („Disc“). Ich habe diese Funktion, um die Schale zu prüfen und den Rohr Wert als String in einem Meldungsfeld

Public Function ShellRun(sCmd As String) As String 
'Run a shell command, returning the output as a string' 

Dim oShell As Object 
Set oShell = CreateObject("WScript.Shell") 

'run command' 
Dim oExec As Object 
Dim oOutput As Object 
Set oExec = oShell.Exec(sCmd) 
Set oOutput = oExec.StdOut 
Debug.Print sCmd 

'handle the results as they are written to and read from the StdOut object' 
Dim s As String 
Dim sLine As String 

While Not oOutput.AtEndOfStream 
sLine = oOutput.ReadLine 
If sLine <> "" Then s = s & sLine & vbCrLf 
Wend 

ShellRun = s 
'example MsgBox ShellRun("cmd.exe /c" & "dir c:\") 
End Function 

Anruf Befehl auf Click-Ereignis

Dim CMDLineCommand As String 
CMDLineCommand = "for /f ""tokens=1-8"" %a in ('quser') do @if ""%d""== ""Active"" echo %COMPUTERNAME% %a %d" 
'(CMDLineCommand = "dir c:\")<------ THIS WORKS FINE 
MsgBox ShellRun("cmd.exe /c " & CMDLineCommand) 

zurückkehren Dies funktioniert gut für Lasten der Kommandozeilenbefehle I habe es zwar getestet aber nicht abfragen und daher den Benutzer abfragen. Der Befehl "query user" funktioniert problemlos über die Befehlszeile, gibt jedoch nichts zurück, wenn er über VBA-Shell-Befehle ausgegeben wird.

Alle Gedanken würden geschätzt werden.

+0

Das ist ok die while-Anweisung war da, es war nur am Ende der vorherigen Zeile Ich muss einen Fehler in der Formatierung für das Forum gemacht haben. Danke für den Kommentar – Animal811

+0

Sie haben mich für eine Sekunde am Kopf kratzen und sich gefragt, warum ich nicht einen VBA-Syntaxfehler hatte, als ich nach dem Einfügen eines While versuchte, dann erkannte ich, dass die "vorherige Zeile" der Kommentar war also hatte er einfach alle zusätzlichen Aussagen ignoriert - Puh, ich mache nichts. – YowE3K

+0

@ YowE3K Ich habe es geschafft, herauszufinden, warum es nicht funktioniert und eine Lösung. Da die Shell den Pfad von query.exe (quesr) nicht kennt, wird sie nicht fortgesetzt, da die Eingabeaufforderung Systemvariablen verwenden kann, um exe zu finden. Lösung finden Sie die Abfrage.exe und kopieren Sie es in ein Arbeitsverzeichnis, dann führen Sie den Shell-Befehl. meins befand sich in einem Hash-Ordner in C: \ Windows \ WinSxS, seien Sie vorsichtig, denn hier sind 64-Bit-Versionen und 32-Bit. – Animal811

Antwort

0

Da die Shell den Pfad der query.exe (quesr) nicht kennt, wird sie nicht fortgesetzt, wo die Eingabeaufforderung Systemvariablen verwenden kann, um die exe zu finden. Lösung finden Sie die Abfrage.exe und kopieren Sie es in ein Arbeitsverzeichnis, dann führen Sie den Shell-Befehl. meins befand sich in einem Hash-Ordner in C: \ Windows \ WinSxS, seien Sie vorsichtig, denn hier sind 64-Bit-Versionen und 32-Bit.

Verwandte Themen