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


11

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

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

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

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

Answers:


7

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

您可以启用它,然后runas以该帐户身份调用。这就带来了一些问题-现在您正在使用其他用户的环境运行,该环境可能设置了不同的环境变量。1个

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


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

powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts

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

Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts

这里的窍门是传递动词runas,触发UAC。

无论是Start-Process -Verb runas也不是标准的CMD runas将通过当前的工作目录,所以一直使用的完整路径在你以这种方式提升的任何命令。

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

powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"

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


用双引号对我来说不起作用。
文斯2014年

@Ghodmode能否举一个您尝试运行的行的示例?如果您要参考的是最后一个示例,请尝试将第一个引号移到之后-c。(因此-c "start代替"-c start
Bob

需要注意的是PowerShell的进程并没有必须提高运行为了运行一个程序作为管理员。
jiggunjer '16

奇怪的是,它在Windows 10 2019-03更新之前可以正常工作。
Qwerty


-1

您可以尝试做的一件事是以管理员身份打开命令提示符,然后在其中运行记事本。只需键入Notepad。在那之后,您可以单击文件,然后打开并导航到hosts文件并将其打开。最后,您可以像平常一样保存。

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.