普通用户如何在VBScript中无窗口执行特权命令?
解决VBScript执行PsExec时窗口闪现的问题
我之前也碰到过这个头疼的情况!PsExec的窗口控制确实有点反直觉,因为它会独立启动新的控制台进程,VBScript的Run方法参数很难完全压制它的窗口显示。不过有几个靠谱的办法能实现普通用户执行特权命令且完全无窗口的需求:
方法1:改用ShellExecute替代Run
WScript.Shell的ShellExecute方法比Run有更灵活的窗口控制选项,而且支持直接请求权限提升。试试这段代码:
Set WshShell = CreateObject("WScript.Shell") ' 最后一个参数0表示隐藏窗口,"runas"用于请求管理员权限 WshShell.ShellExecute "psexec", "-u administrator -p pw1234 cmd /c netsh interface ip show address > C:\Output.txt", "", "runas", 0
这个方法的核心是利用ShellExecute的窗口控制参数(0=隐藏),同时通过runas标识让系统处理权限提升,PsExec的窗口会被直接压制住,不会闪现。
方法2:用PowerShell中转隐藏窗口
如果第一种方法还是有问题,可以借助PowerShell的Start-Process来实现双重隐藏:
Set WshShell = CreateObject("WScript.Shell") ' VBS先隐藏PowerShell窗口(参数0),再让PowerShell隐藏PsExec窗口 WshShell.Run "powershell -Command ""Start-Process psexec -ArgumentList '-u administrator -p pw1234 cmd /c netsh interface ip show address > C:\Output.txt' -WindowStyle Hidden""", 0, True
这里VBS调用PowerShell时用0隐藏自身窗口,PowerShell再通过-WindowStyle Hidden强制隐藏PsExec的进程窗口,彻底杜绝闪现问题。
为什么原来的Run方法不行?
你之前用的Run方法参数2(最小化)只对直接启动的进程生效,但PsExec会在内部重新启动一个控制台进程,这个新进程不受VBS初始的窗口状态控制,所以总会短暂显示。而上面两种方法都是从进程启动的源头控制窗口状态,就能解决这个问题。
内容的提问来源于stack exchange,提问作者Seeky
相关产品推荐
相关产品推荐

