我有一个批处理文件,其中包含一个WMIC命令,用于在Windows服务器上运行另一个批处理文件。
WMIC /user:<myusername> /password:<mypassword> /node:<server> process call create "D:\mybatchfile.bat"
mybatchfile.bat启动一个exe,它需要运行某些参数,这些参数存在于此批处理文件中。但是,exe启动并退出,因为没有足够的权限来继续操作。我尝试使用升级的权限启动WMIC,但我在日志文件中收到相同的错误。
psexec使用以下语法也是如此:
psexec \\<server> -u <myusername> -p <mypassword> -h "D:\mybatchfile.bat"
这启动exe很好,但我们更喜欢使用本机命令运行它。据我所知,-h开关允许程序以最高权限运行。
有没有人解释为什么会这样?与我使用的PSEXEC命令相当的正确WMIC是什么?
任何帮助将不胜感激!
powershell -Command "Start-Process cmd -Verb RunAs"
听起来问题是你正在使用的shell(也就是cmd.exe)没有足够的权限。在shell确认UAC之前,shell进程的完整性级别是“中等”。激活管理员的提升权限可以有效地将完整性级别设置为“高”。这正是psexec -h
正在做的事情。
虽然cmd.exe
从未构建为自己这样做,但它可以调用其他程序,这些程序可以创建具有提升的完整性级别的进程。示例包括:powershell.exe
,wscript.exe
和一些COM对象。
您可以通过在命令行键入whoami.exe /groups
来验证此情况。底线表示当前的完整性级别,默认为“中等强制级别”。成功要求我们创建一个完整性级别设置为“高强制级别”的流程。所以现在,我们只需要选择以下选项之一:
powershell -Command "Start-Process cmd.exe -Verb RunAs"
@echo off
setlocal EnableDelayedExpansion
set "zFile=%temp%\sudo.tmp.vbs"
(
echo Set objShell = CreateObject^("Shell.Application"^)
echo objShell.ShellExecute "cmd.exe", "", "", "runas"
) > "!zFile!"
wscript /nologo "!zFile!" >nul 2>&1
erase "!zFile!" >nul 2>&1 || echo ;[e] Failed To Delete Temp File {"!zFile!"}
echo Set objShell = CreateObject^("Shell.Application"^) > %temp%\sudo.tmp.vbs
echo objShell.ShellExecute "cmd.exe", "", "", "runas" >> %temp%\sudo.tmp.vbs
wscript /nologo %temp%\sudo.tmp.vbs
erase %temp%\sudo.tmp.vbs
与之前相同 - 在命令提示符下键入whoami /groups
,您现在应该看到完整性级别设置为“高”(又名“SID = S-1-16-12288”)。