WMIC相当于PSEXEC -h开关

问题描述 投票:0回答:1

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

任何帮助将不胜感激!

windows batch-file psexec wmic
1个回答
0
投票

TL; DR:

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

细节 :

听起来问题是你正在使用的shell(也就是cmd.exe)没有足够的权限。在shell确认UAC之前,shell进程的完整性级别是“中等”。激活管理员的提升权限可以有效地将完整性级别设置为“高”。这正是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

Validate After :

与之前相同 - 在命令提示符下键入whoami /groups,您现在应该看到完整性级别设置为“高”(又名“SID = S-1-16-12288”)。

© www.soinside.com 2019 - 2024. All rights reserved.