【问题标题】:VBS code not working when called from WMIC从 WMIC 调用时 VBS 代码不起作用
【发布时间】:2018-04-30 02:52:55
【问题描述】:

我正在尝试使用 Window 10 WMIC 远程调用一些代码。

rem command prompt, machine 1 (main computer)
WMIC /node:"MACHINE_2" process call create "cmd.exe /k "%USERPROFILE%\test.vbs" "

这个电话似乎正确地通过了。它从 test.vbs 产生部分输出(如下所示),这意味着文件被调用并执行。

' test.vbs, machine 2 (MACHINE_2, in above code)
Set objFSO=CreateObject("Scripting.FileSystemObject")

outFile="%USERPROFILE%\out.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test1" & vbCrLf
objFile.Close

MsgBox("hi")
' CreateObject("WScript.Shell").Run "cmd /c ""nircmd.exe sendkey 0xB3 press"" ", 0
' Set WshShell = Nothing

outFile="%USERPROFILE%\out.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test2" & vbCrLf
objFile.Close

预期行为:脚本应将“test1”写入 out.txt。然后它应该打开一个 MsgBox。在 Machine_2 上关闭 MsgBox 后,它应该用“test2”覆盖 out.txt 的内容。

MsgBox 下面的两行注释代码可以替换 MsgBox 代码,并且具有相同的行为。

在本地执行 vbs 文件时,会发生预期的行为。但是,当使用 WMIC 调用时,会打印“test1”,然后执行似乎会停止。 MsgBox 永远不会显示,“test2”永远不会覆盖 out.txt 的内容。

我不知道为什么会发生这种情况,以及我可能会采取哪些步骤来使它发挥作用。在这一点上,我已经用尽了我的 google-fu。

【问题讨论】:

  • 您不应该在任何可能需要自动化或自动运行的代码上显示消息框。谁在那里按确定按钮?无论如何...我假设 MY_SERVER 是您的本地计算机?要进行故障排除,请将环境特定值(如 %USERPROFILE%)替换为硬编码值,并查看它是否按预期工作。使用它来隔离问题。如果您的整个脚本无法正常运行,那么您的下一步就是找到无法正常运行的 。最后,在 windows 事件日志中查看线索
  • 哦,还有....为了运行 VBS,您需要针对 CScript.EXE,而不是 CMD.exe 运行它。这里有一个例子:gist.github.com/cornfred/6678466
  • 感谢您的评论回复。为了清楚起见,我编辑了这个问题。 MY_SERVER 是第二台机器,我试图在上面运行 vbs 代码。 %USERPROFILE% 工作正常,因为 1.调用了 vbs 脚本并且 2.out.txt 确实包含输出。我已经用硬编码值替换了它,没有任何变化。不起作用的 是 MsgBox 行(或它下面的两个注释行)。
  • 使用 cscript.exe 似乎没有什么不同。 "cscript "%USERPROFILE%\test.vbs" "
  • 第二台机器是不同的机器?您不会在另一台机器上看到弹出消息框。

标签: cmd vbscript wmi wmic nircmd


【解决方案1】:

您不能在远程脚本上显示用户界面。

您不能与已登录的用户混淆。

【讨论】:

  • 您能否提供更多详细信息,说明为什么会出现这种情况,或者有哪些政策或标准来实施这种行为?在这种情况下,我特别想要与用户“搞乱”;例如:发送击键、显示定时的 ui 元素等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多