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

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

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

使用 /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

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

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

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

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

答案1

您可以将以下内容添加到脚本中,它将强制以提升权限运行。无需下载任何内容。

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

答案2

我将代码分成两部分

  • 需要管理员权限。

重命名程序文件中安装的可执行文件

  • 启动并终止该可执行文件的另一部分。

启动时将其提升,导致程序变得无用,因为它所依赖的其他东西没有提升

为需要提升权限的 bat 文件创建了一个快捷方式,并在其属性中选中了“以管理员身份运行”。在另一个文件中使用了快捷方式。

缺点

  • 每个快捷方式都会打开一个新的 cmd 窗口
  • 如果两个部分相互依赖,我认为需要做额外的工作

我竭尽全力,尽管在设置中禁用了自动启动,但可执行文件仍自动运行,msconfig 也将其服务设置为手动。这是我让它正常运行的最后努力。

答案3

将批处理文件分成两部分。将要以 admincmd 运行的部分粘贴到 system32。将要在普通 cmd 中运行的部分粘贴到常规文件夹中,然后从这里调用第二个批处理文件,该文件位于 system32 中。这样,第二部分始终在 admincmd 中运行。我试过了,它对我来说很有效。

答案4

“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)\""

或者

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

相关内容