当我尝试使用 runas 提升权限时,有些东西我搞不明白。一台简单的 Win10 机器,只有一个用户,该用户已经拥有管理员权限。我需要通过脚本写入特定的注册表项,但当我直接尝试使用 reg 命令时,出现“访问被拒绝”的情况。
> reg ...
ERROR: Access is denied.
如果我尝试:
> runas /user:Administrator Command
Enter the password for Administrator:
1326: The user name or password is incorrect.
它拒绝我的用户密码。我不认为本地机器上有特定的管理员密码,对吗?没有其他帐户。尝试:
> runas /user:MyUser Command
Enter the password for MyUser:
740: The requested operation requires elevation
那么我如何从命令行提升权限?!为什么我在这里看不到我拥有管理员权限:
>runas /showtrustlevels
The following trust levels are available on your system:
0x20000 (Basic User)
编辑:也许我应该更清楚地说明我想做什么。我想从 C 程序中更改 WT_KEY_HKLM,“Software\Microsoft\Windows\CurrentVersion\Run”。我可以在 XP 中直接执行此操作,但在较新版本的 Windows 中,它不起作用。事实上,从命令行对此键运行“reg”会导致访问被拒绝。我不想以提升的权限运行我的程序,所以我的想法是执行类似 system(“runas reg ...”) 的操作,它会要求输入密码并更改注册表。但我甚至无法从命令行运行该命令。也许有人可以建议正确的方法来做到这一点?
答案1
将 [用户] 和 [命令] 替换为您要使用的内容,然后尝试一下:
powershell.exe -ExecutionPolicy Bypass -command "& {Start-Process powershell.exe -Credential '[user]' -ArgumentList 'Start-Process ""[command]"" -Verb runAs'}"
优点:
- 它可以在未提升的命令提示符、运行窗口和 Windows 快捷方式中使用
- 它仅提升命令。提升是作为运行命令的一部分完成的,而不是执行 PowerShell 窗口。
缺点:
- 它将始终提示您登录(没有办法像使用 runas 那样保存凭据)。 - 这可能是一个优点。
- 如果启用了 UAC,则会出现 UAC 提示 - 使用 UAC 提升时这是不可避免的。
- 它在处理凭证和提升权限时打开(并关闭)2 个 PowerShell 窗口
- 命令中的引号有问题(或者至少很快就会变得复杂)。您需要将任何需要引号的命令放在批处理文件中,并将批处理文件作为命令运行。
如果您想从 PowerShell 提示符运行此命令,可以将其缩短为:
Start-Process powershell.exe -Credential '[user]' -ArgumentList 'Start-Process ""[command]"" -Verb runAs`'
年代。
答案2
默认情况下,管理员帐户是锁定的,以防止他人滥用它。如果您尝试对“runas /user:Administrator”命令使用空白密码,则可以看到该帐户已被锁定。
如果您的用户已经拥有管理权限,您应该能够访问“reg”命令。在我的计算机上,我可以访问。
不幸的是,您无法使用“runas”访问提升权限的命令;您必须通过提升权限的命令提示符来执行此操作。您可以使用“runas”命令(在您的情况下不起作用)或右键单击“cmd.exe”并选择“以管理员身份运行”来创建此命令提示符。
答案3
您可以通过右键单击命令行图标或 cmd.exe 并选择以管理员身份运行它来以管理员身份运行命令行。这样,您将处于提升的命令提示符中,并且不会出现您描述的问题。此外,您在输入命令时不必使用 runas。