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.
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
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
@ 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