vba shell命令正在执行但没有输出

时间:2017-03-09 19:26:57

标签: vba shell ms-access command-line command

我在运行shell命令和检查数据输出时遇到一些问题。如果DB的当前远程用户处于活动状态,我希望使用vba进行检查。在

命令提示符=

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

返回登录的用户及其状态我希望检查它们是否都没有断开连接(" Disc")。我使用此函数检查shell并在消息框中将管道值作为字符串返回

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

点击事件中使用的呼叫命令

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)

这适用于我已经测试过的命令行命令,但不是查询,因此查询用户。 query user命令在命令行中正常工作,但在通过VBA Shell命令发出时不返回任何内容。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

因为shell不知道query.exe(quesr)的路径,所以它不会继续,因为命令提示符可以使用系统变量来查找exe。解决方案找到query.exe并将其复制到工作目录然后运行shell命令。我的位于C:\ Windows \ WinSxS中的哈希文件夹中要小心,因为这里有64位版本和32位。