我习惯psexec.exe
在不同的安全上下文中运行程序。然而程序启动了,但似乎没有在指定的安全上下文中运行。
其最小形式如下:
psexec -u wsadmin -p password cmd
如果我在该窗口中输入内容,则会启动一个新的 cmd 窗口whoami
C:\Windows\system32>whoami
win-k1r7g38nlkt\wsadmin
C:\Windows\system32>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
wsadmin
The command completed successfully.
如您所见,我肯定是另一个用户。我可以确认该用户是“管理员组”的成员
C:\Windows\system32>mkdir test
Access is denied.
如果我以指定用户的身份使用 runas,它会按预期工作。但我需要在命令行上提供密码。
答案1
在 Windows Vista 及更高版本中,如果启用了 UAC,则由管理员帐户启动的进程psexec
(即使从管理员帐户运行)也必须设置其提升令牌才能获得完全权限。这可以通过-h
在psexec
命令行中传递属性来完成。因此,您可以将命令更改为:
psexec -h -u wsadmin -p password cmd
欲了解更多信息,请运行psexec /?
:
-h If the target system is Vista or higher, has the process
run with the account's elevated token, if available.
答案2
我花了几个小时才找到一种在PsExec
两台非管理员用户启动的 Windows 7 计算机之间工作的办法PsExec
...禁用 UAC(EnableLUA=0
、、ConsentPromptBehaviorAdmin=0
)LocalAccountTokenFilterPolicy=1
不起作用,关闭防火墙也不起作用......
在这里我找到了可行的方法 - 感谢JelmerS:(信息来自PSexec 未使用提供的用户名和密码连接到计算机)
这是因为在以其他用户身份执行命令之前,psexec
仍会尝试使用ADMIN$
本地凭据访问共享。根据此线程,您可以在执行 psexec 之前缓存凭据:
cmdkey.exe /add:MACHINE_NAME_HERE /user:MACHINE_NAME_HERE\Administrator /pass:PASSWORD_HERE
psexec.exe \\MACHINE_NAME_HERE -i notepad
cmdkey.exe /delete:MACHINE_NAME_HERE
答案3
我找到了一个解决方案:
事实证明,当您启用 UAC 时,psexec 无法按预期工作。
只要HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA
设置为0
psexec,它就会按预期工作。
答案4
以下是对我有用的方法,它并没有完全摆脱 UAC,但会为管理员关闭它
计算机配置\Windows 设置\安全设置\本地策略\安全选项\用户帐户控制:以管理员批准模式运行所有管理员 - 已禁用