批处理文件,其中包含以管理员和标准用户身份运行的命令


9

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

带/ savecred的符文

runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""

使用/savecred时,不会提示我输入密码。而是命令提示符窗口短暂地闪烁并消失。我无法知道此窗口中的内容。服务未停止。

不带/ savecred的符文

runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""

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

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

这可能吗?如果可以,我在做什么错?


在末尾添加“ pause”命令以停止关闭
Martin

我的批处理文件末尾已经暂停了,但是命令正在启动另一个命令提示符-我不知道如何停止消失。
Stuart Leyland-Cole 2014年

尝试将输出定向到文件,并查看它是否向其中输出:“ runas / user:(PC名称)(管理员用户名)” net stop \“(服务名称)\”“ >> log.txt”
Martin

我必须使用/ savecred选项运行命令,否则在日志文件中会出现密码提示。如果我运行,则runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txt什么都不会输出到日志文件。
Stuart Leyland-Cole

请查看Rob van der Woude的批处理调试页面:robvanderwoude.com/battech_debugging.php。最重要的是,下载LOGBATCH.BAT并按如下方式运行:LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needs它将创建一个日志文件,其中包含由执行的所有命令/操作yourbatch.bat让我们知道您在那里看到的内容。
JSanchez 2014年

Answers:


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"
:--------------------------------------

所有这些操作都会打印Requesting administrative privileges...到屏幕上,直到超时为止。
松饼人

@松饼人。将命令添加到批处理文件的末尾,它将在提升权限后执行它们。
pelms,2014年

1
这种方法非常好。它不需要其他依赖项(例如psexec)。
威廉

进入那个脚本的无限循环...
JackTheKnife

0

将您的批处理文件一分为二。您要作为admincmd运行的部分粘贴到system32。您要在普通cmd中运行的部分将其粘贴到常规文件夹中,并从此处调用第二个批处理文件,该文件位于system32中。这样,第二部分始终在admincmd中运行。我已经尝试过了,并且对我有用。


0

如果您不介意第三方软件,则可以尝试以密码 runasspc 运行。它将您的密码保存到加密文件中。密码不必在批处理文件中公开。


0

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

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

http://technet.microsoft.com/zh-cn/magazine/2008.06.elevation.aspx

以以下方式启动命令:

runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""

要么

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""

我曾尝试以下三个命令:runas /user:$PcName\$Username /savecred "elevate.cmd sc stop \"$ServiceName\""runas /user:$PcName\$Username /savecred "elevate.cmd net stop \"$ServiceName\""runas /user:$PcName\$Username /savecred "elevate.cmd net stop $ServiceName"和他们每个人返回此错误:RUNAS错误:无法运行- elevate.cmd净停止alfrescoTomcat -2147467259:未指定的错误
斯图尔特利兰-科尔

3行批处理文件将运行提升的命令:github.com/kasajian/pseudo
zumalifeguard 2015年

0

我使用的是以下代码:

::#################################################################################################################################
:: Elevate this script                                                                                                            #
::#################################################################################################################################

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil 2>&1 || (

        :: Very little red console
        mode con cols=80 lines=3 
        color cf

        :: Message
        title Please wait...
        echo.
        echo                         Requesting elevated shell...

        :: Create VBS script
        echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
        echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
        if exist "%TEMP%\elevate.vbs" start /b >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
        exit /b
    )

    :: Delete elevation script if exist
    if exist "%~1" >nul del /f "%~1" 2>&1
)

pushd "%~dp0"

.... your code ....

popd

将其放在您的@echo关闭和备注之后。


0

如果您只需要在具有访问权限的某些目录中开始工作,则可以使用简化答案(添加到user325534上):

@echo off

set MyWorkDir=D:\dev\

echo Requesting administrative privileges...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/C start /D %MyWorkDir% cmd", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"

0

此代码允许cmd询问用户密码。用户必须输入密码,然后密码executable.bat将以管理员身份运行

主蝙蝠

@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause

可执行文件

all code that runs as administrator
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.