如何静默调用批处理文件?WshShell.Run执行登录脚本静默失败问题
问题:静默执行登录脚本无报错但无法运行
这段登录脚本在网上被广泛传播,但当我尝试用wshShell.Run "loginscript",0, TRUE替代原代码里的wshShell.Run(loginscript)实现静默执行时,代码无报错却无法正常运行。
原脚本代码:
Dim wshShell Dim wshProcess Dim domain, username, dc Set objNet = CreateObject("WScript.NetWork") Set wshShell = CreateObject("Wscript.Shell") Set wshProcess = wshShell.Environment("Process") Domain = objNet.UserDomain UserName = objNet.UserName DC = wshProcess("LogonServer") Set UserObj = GetObject("WinNT://" & domain & "/" & username) loginScript = DC & "\netlogon\" & UserObj.LoginScript On Error Resume Next wshShell.Run(loginscript) Set UserObj = Nothing Set wshProcess = Nothing Set wshShell = Nothing Set objNet = Nothing
问题原因及解决方案
- 语法错误:你写的
wshShell.Run "loginscript",0, TRUE里,loginscript被当成了字符串字面量,系统会去查找名为loginscript的文件,而非你定义的变量loginScript。 - 正确调用方式:把原代码中的
wshShell.Run(loginscript)替换为:
wshShell.Run loginScript, 0, True
参数说明:
0:隐藏窗口,实现静默执行True:等待登录脚本执行完成后,再继续当前脚本的后续逻辑
另外,原脚本中的On Error Resume Next会屏蔽所有错误提示,调试时建议先注释掉这一行,这样能直观看到诸如文件不存在、权限不足等具体问题,方便排查。
内容的提问来源于stack exchange,提问作者My9to5
相关产品推荐
相关产品推荐

