【问题标题】:How do I run a program from command prompt as a different user and as an admin [closed]如何以不同用户和管理员身份从命令提示符运行程序 [关闭]
【发布时间】:2012-10-05 21:35:16
【问题描述】:

我正在使用“runas”以其他用户身份打开命令提示符,但该命令提示符不是 以管理员身份运行。如何让它以管理员身份运行?

更新:我使用的是 Windows Server 2012

更新:我通过运行为另一个帐户打开了 cmd

 runas /user:domain\username cmd.exe

然后我尝试在这个新提示符中运行一些命令,但这不是作为提升的用户运行的(即使它具有管理员权限)。

【问题讨论】:

  • 我无法让它与 runas /user:domain\username cmd.exe 一起工作,我不得不像这样运行它:runas /netonly /user:domain\username cmd.exe

标签: command-prompt administrator


【解决方案1】:

打开记事本并粘贴此代码:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c %*'"
@echo on

然后,将文件另存为sudo.cmd。复制此文件并将其粘贴到 C:\Windows\System32 或将 sudo.cmd 所在的路径添加到您的 PATH 环境变量中。

当您打开命令提示符时,您现在可以运行类似sudo start . 的内容。

如果您希望终端窗口在运行命令时保持打开状态,请将记事本中的代码更改为:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k %*'"
@echo on

解释:

powershell -Command 运行一个 powershell 命令。

Start-Process 是一个用于启动进程的 powershell 命令,在本例中为命令提示符。

-Verb RunAs 以管理员身份运行命令。

-Argument-List 运行带有参数的命令。

我们的论点是'/c %*'%* 表示所有参数,所以如果你做了sudo foo bar,它将在命令提示符foo bar 中运行,因为参数是foo 和bar,而%* 返回foo bar

/c是命令完成后关闭窗口的cmd参数,/k是保持窗口打开的cmd参数。

【讨论】:

  • 这确实提升了(感谢-Verb RunAs),但没有执行“以不同用户身份运行”部分...
  • 这似乎非常不可靠,因为它取决于命令提示符找到这样的文本文件、powershell 的子参数保持稳定、转义细节等。
【解决方案2】:

在我的情况下,我已经以本地管理员身份登录,我需要以域管理员身份运行 CMD,所以对我有用的是从 powershell 窗口运行以下

runas /noprofile /user:DOMAIN\USER "cmd"

【讨论】:

    【解决方案3】:

    您可以使用 Microsoft Sysinternals Suite https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite 中的 psexec.exe

    例子:

    c:\somedir\psexec.exe -u domain\user -p password cmd.exe
    

    【讨论】:

      【解决方案4】:

      我找到了一种方法,只需一行:

      runas /user:DOMAIN\USER2 /savecred "powershell -c start-process -FilePath \"'C:\\PATH\\TO\\YOUR\\EXECUTABLE.EXE'\" -verb runAs"
      

      这里有一些技巧。

      1:我们只是告诉 CMD 以 DOMAIN\USER2 身份运行 Powershell

      2:我们将“Start-Process”命令传递给 Powershell,使用动词“runAs”将 DOMAIN\USER2 提升到管理员/提升权限模式。

      一般注意,“FilePath”参数中的转义字符必须存在(换句话说,“\ & \\”字符组合),单引号 (') 必须围绕 EXE 路径 - 这样,CMD 将 FilePath 解释为单个字符串,然后 Powershell 使用单引号将 FilePath 解释为单个参数。

      在 Powershell 中使用“RunAs”动词提升http://ss64.com/ps/syntax-elevate.html

      【讨论】:

      • 在 Windows 2010 中,这是唯一适合我的解决方案。
      【解决方案5】:

      不幸的是,所有这些答案都没有抓住重点。

      这里有 2 个安全上下文的细微差别,我们需要它们重叠。 - “以管理员身份运行” - 更改本地计算机上的执行级别 - “以不同用户身份运行” - 选择您在哪个用户凭据下运行进程。

      当在工作站上启用 UAC 时,有一些进程拒绝运行,除非提升 - 仅仅成为本地“管理员”组的成员是不够的。如果您的要求还要求您对登录时使用备用凭据,我们需要一种方法来调用该过程作为备用凭据和提升权限。

      我发现可以使用的,虽然有点麻烦,是:

      • 以管理员身份运行 CMD 提示符
      • 使用 Sysinternals psexec 实用程序,如下所示:

        psexec \\localworkstation -h -i -u domain\otheruser exetorun.exe

      需要第一次提升才能推送 psexec 服务。 -h 运行提升的新“远程”(本地)进程,-i 让它与桌面交互。

      也许还有比这更简单的方法?

      【讨论】:

      • psexec 可能不可用...
      【解决方案6】:

      最简单的方法是创建一个批处理文件 (.bat) 并以管理员身份运行。

      右键单击并“以管理员身份运行”

      【讨论】:

      • OP 以普通用户而不是未提升的管理员身份运行
      【解决方案7】:

      开始 -> shift + 命令提示右键单击将有助于以其他用户或管理员身份使用

      【讨论】:

      • 对我来说这是可行的:Shift + Ctrl 同时点击程序
      • 虽然它是一种以管理员身份运行程序的方法,但它不是原始问题的答案。
      • 如何以其他用户AND管理员身份执行?
      【解决方案8】:

      请看这里: https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows

      据此,管理员的命令如下所示:

       runas /noprofile /user:Administrator cmd
      

      【讨论】:

      • 当我可以右键单击任何其他程序并以管理员身份运行而无需输入密码时,为什么需要我输入密码?谢谢
      • 因为在这种情况下,您代表另一个用户运行程序,而不是您已经在管理员组中并且您自己运行程序但具有提升的权限的情况。
      【解决方案9】:

      Runas 不会神奇地以管理员身份运行命令,它会以您为其提供凭据的任何帐户运行它们。如果它不是管理员帐户,runas 不在乎。

      【讨论】:

      • 我在其中打开命令提示符的帐户是管理员帐户。
      • 如果您运行管理员提示符并运行命令whoami,您会得到您期望的用户吗?
      • 我正在尝试运行需要管理员权限的 exe 文件
      • 具体是什么错误信息?
      • 未找到管理员权限。该帐户确实具有管理员权限(在“管理员”下分组)。
      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2013-02-15
      • 2011-08-22
      • 2021-12-29
      相关资源
      最近更新 更多