带有以管理员和标准用户身份运行的命令的批处理文件

Stu*_*ole 11 windows command-line batch-file

我正在尝试编写一个批处理文件,该文件需要使用本地管理员帐户(启动/停止服务)运行一些命令,并使用登录用户(从用户目录复制文件)运行一些命令,但我遇到了问题。我尝试了以下命令:

runas 与 /savecred

runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""
Run Code Online (Sandbox Code Playgroud)

使用/savecred时不会提示我输入密码。相反,命令提示符窗口会短暂闪烁并消失。我不知道这个窗口里有什么。服务没有停止。

没有 /savecred 的 runas

runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""
Run Code Online (Sandbox Code Playgroud)

这些命令确实会提示我输入密码,但随后表现出与上述命令相同的行为 - 命令提示符窗口会短暂弹出并且服务并未停止。

理想情况下,我想保存会话的密码,因为我需要运行更多带有详细信息的命令。

这是可能的,如果是这样,我做错了什么?

小智 12

您可以将以下内容添加到您的脚本中,它会强制它以提升的方式运行。无需下载任何东西。

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
Run Code Online (Sandbox Code Playgroud)


sur*_*asb 0

“Runas”命令不会“sudo”您的命令。

要从批处理文件执行此操作,您需要“提升”正在生成的命令。下载 Elevate Powertoy 脚本。

http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

启动你的命令:

runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""
Run Code Online (Sandbox Code Playgroud)

或者

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""
Run Code Online (Sandbox Code Playgroud)