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:我知道如果我授予我的用户帐户权限,我可以在不以管理员身份运行的情况下对其进行编辑。但我想知道如何在不必更改主机文件权限的情况下执行此操作。
好的,这不起作用的原因是 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
,而且情况更糟,因为您甚至无法获得正确的用户变量。
归档时间: |
|
查看次数: |
20120 次 |
最近记录: |