WMIC相当于PSEXEC -h开关

时间:2014-02-07 06:16:00

标签: windows batch-file psexec wmic

我有一个批处理文件,其中包含一个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是什么?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

TL; DR:

powershell -Command "Start-Process cmd -Verb RunAs"

详细信息:

这听起来像是问题在于您使用的外壳(aka cmd.exe)没有足够的特权。在外壳确认UAC之前,外壳过程的完整性级别为“中等”。激活管理员的提升的权限可以将完整性级别有效地设置为“高”。 psexec -h正是在做什么。

尽管cmd.exe本身并不是为实现此目的而构建的,但它可以调用其他程序来创建具有更高完整性级别的进程。示例包括:powershell.exewscript.exe和一些COM对象。

之前验证:

您可以通过在命令行中输入whoami.exe /groups来验证这种情况。  底线说明了当前的完整性级别,即默认的“中等强制性级别”。成功需要我们创建一个完整性级别设置为“高强制性级别”的流程。所以现在,我们只需要选择以下选项之一:

选项1:Powershell

powershell -Command "Start-Process cmd.exe -Verb RunAs"

选项2:批处理脚本

@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!"}

选项3:命令行

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”)。