我有一个批处理文件,其中包含一个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是什么?
非常感谢任何帮助!
答案 0 :(得分:0)
powershell -Command "Start-Process cmd -Verb RunAs"
这听起来像是问题在于您使用的外壳(aka cmd.exe)没有足够的特权。在外壳确认UAC之前,外壳过程的完整性级别为“中等”。激活管理员的提升的权限可以将完整性级别有效地设置为“高”。 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”)。