我正在尝试以管理员身份运行记事本,以便可以从命令行编辑我的主机文件。
我试过了runas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts"
然后输入我的密码然后我得到了
RUNAS 错误:无法运行 - notepad c:\windows\system32\drivers\etc\hosts 1327:帐户限制阻止此用户登录。例如:不允许使用空白密码、登录次数受限或已强制执行策略限制。
PS:我知道如果我授予我的用户帐户权限,我就可以编辑它而无需以管理员身份运行。但我想知道如何在不更改主机文件权限的情况下做到这一点。
答案1
好的,原因无法正常工作的是 Windows Vista 及更新版本中的安全模型。管理员组中的帐户仍会以受限用户身份运行未明确提升的所有内容。例外情况是Administrator
运行一切提升。因此,通常认为将其用作登录帐户是不合适的,并且通常会被禁用。
您可以启用它,然后runas
以该帐户身份调用。这会带来一些问题 - 现在您正在使用不同用户的环境运行,该环境变量可能设置不同。1
更好的方法是通过 UAC 提升当前用户权限。遗憾的是,标准命令提示符不包含该功能 - 但第三方程序和内置的 PowerShell 和 WSHell (VBScript) 都可以实现该功能。
借贷来自我的另一个答案,您可以直接使用以下命令调用 PowerShell 命令powershell -c
:
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
,而且情况甚至更糟,因为您甚至无法获得正确的用户变量。
答案2
答案3
您可以尝试以管理员身份打开命令提示符并通过它运行记事本。只需输入Notepad
。执行此操作后,您可以单击文件,然后打开并导航到 hosts 文件并打开它。最后,您可以像平常一样保存。