在 Windows 8 上从命令行以管理员身份运行

Kir*_*chs 11 administrator command-line runas hosts-file

我正在尝试以管理员身份运行记事本,以便我可以从命令行编辑我的主机文件。

我试过runas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts"然后输入我的密码,我得到

RUNAS 错误:无法运行 - 记事本 c:\windows\system32\drivers\etc\hosts 1327:帐户限制阻止此用户登录。例如:不允许使用空白密码,登录时间受到限制,或已执行策略限制。

PS:我知道如果我授予我的用户帐户权限,我可以在不以管理员身份运行的情况下对其进行编辑。但我想知道如何在不必更改主机文件权限的情况下执行此操作。

Nic*_*ton 13

很可能,您尚未启用管理员帐户。

以下是启用管理员帐户的说明

您还可以在 Microsoft 站点上找到有关 runas 的更多信息


Bob*_*Bob 8

好的,这不起作用的原因是 Windows Vista 和更新版本中的安全模型。管理员组中的帐户仍然运行未明确提升为受限用户的所有内容。例外是Administrator帐户,它运行所有提升的东西。出于这个原因,将其用作您的登录帐户通常被认为是不好的,并且通常被禁用。

您可以启用它,然后runas作为该帐户调用。这引入了一些问题 - 现在您在不同用户的环境中运行,可能设置了不同的环境变量。1

执行此操作的更好方法实际上是通过 UAC 提升为您当前的用户。不幸的是,标准命令提示符不包含该功能 - 但第三方程序和内置 PowerShell 和 WSHell (VBScript) 都可以这样做。


借用我的其他答案,您可以直接使用powershell -c以下命令调用 PowerShell 命令:

powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts
Run Code Online (Sandbox Code Playgroud)

它基本上告诉 PowerShell 运行以下(start别名为Start-Process):

Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts
Run Code Online (Sandbox Code Playgroud)

这里的技巧是传递动词runas,触发 UAC。

无论Start-Process -Verb runas是标准 cmd 还是标准 cmdrunas都不会传递当前工作目录,因此请始终在以这种方式提升的任何命令中使用完整路径

另请注意,某些参数-c可能会与Start-Process参数冲突,因此最安全的方法是:

powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
Run Code Online (Sandbox Code Playgroud)

1 注意:这只适用于用户的环境变量。您在父进程设置的环境变量不会通过 UAC 传递!这也适用于runas,而且情况更糟,因为您甚至无法获得正确的用户变量。