我在运行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命令发出时不返回任何内容。
任何想法都会受到赞赏。
答案 0 :(得分:0)
因为shell不知道query.exe(quesr)的路径,所以它不会继续,因为命令提示符可以使用系统变量来查找exe。解决方案找到query.exe并将其复制到工作目录然后运行shell命令。我的位于C:\ Windows \ WinSxS中的哈希文件夹中要小心,因为这里有64位版本和32位。