是否可以像Windows上的另一个用户一样无头地(在bat脚本中)运行命令?

fat*_*ear 3 vbscript cmd batch-file

我想让.bat脚本作为不同的用户执行特定任务并无头地运行(不允许用户输入或提示).有没有办法用.bat脚本执行此操作?请注意,我不能使用PowerShell,因为默认情况下我们不必安装所有必须支持的Windows操作系统.

我在我的脚本中考虑了RUNAS,但它显然需要交互式输入.

在Linux中,等价的成语是:

echo "Password" | sudo -S -u username "command"
Run Code Online (Sandbox Code Playgroud)

有关Windows .bat脚本的任何建议吗?

更新:我相信vbscript在Windows上始终可用,所以如果通过vbscript提供纯粹的无头解决方案,那么这也很好!

roj*_*ojo 8

这是另一种选择:

wmic /user:username /password:pass process call create "cmd /c \"d:\\path\\to\\program.exe\" /arg etc"
Run Code Online (Sandbox Code Playgroud)

编辑:显然,不允许使用本地计算机上的单独凭据进行身份验证.

有一种方法可以runas使用vbscript 进行调用,并让vbscript将密码发送到控制台以自动输入密码.

set WshShell = WScript.CreateObject("Wscript.Shell")
WshShell.run "runas /noprofile /user:USERNAME " + Chr(34) + "d:\path\to\command.exe /args" + Chr(34)
WScript.Sleep 500
WshShell.SendKeys "PASSWORD"
WshShell.SendKeys "{ENTER}"
set WshShell = nothing
Run Code Online (Sandbox Code Playgroud)

将其保存到.vbs文件并通过它调用cscript /nologo script.vbs

如果您需要从批处理脚本运行,只需做一些创意回声.

@echo off
setlocal

set username=username
set password=password
set program=d:\path\to\program.exe /arg argument

echo set WshShell = WScript.CreateObject(^"Wscript.Shell^")>runas.vbs
echo WshShell.run ^"runas /netonly /noprofile /user:%username% ^" + Chr(34) + ^"%program%^" + Chr(34)>>runas.vbs
echo WScript.Sleep 500>>runas.vbs
echo WshShell.SendKeys ^"%password%^">>runas.vbs
echo WshShell.SendKeys ^"{ENTER}^">>runas.vbs
echo set WshShell = nothing>>runas.vbs
cscript /nologo runas.vbs
del /q runas.vbs
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,您还可以使用psexec运行具有不同凭据的程序.

psexec -u USERNAME -p PASSWORD d:\path\to\command.exe
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一其他选择是通过组策略启动脚本运行脚本,该脚本将从系统帐户执行脚本.我还想过从注册表中调用它HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce,但我认为可能会从重新启动后登录的第一个用户启动它.