如何使用 psexec 启动安装或其他需要 UAC 交互的任务?

如何使用 psexec 启动安装或其他需要 UAC 交互的任务?

我正在尝试远程启动安装,但不想禁用 UAC。如果我使用 psexec 远程启动进程,安装程序将停滞,等待 UAC 提示。其他任务(如临时文件清理、服务重新启动等)将导致访问被拒绝错误。psexec 是否有办法绕过 UAC,例如以管理员身份登录但具有 TrustedInstaller 权限或类似权限?

顺便说一句,我的目标是 Windows 2008 R2,但我认为这个问题也适用于 Vista、2008 和 Windows 7。

答案1

您需要使用 -u 选项并指定对该机器具有本地管理员访问权限的帐户(本地帐户、域管理员帐户等)

 -u         Specifies optional user name for login to remote
            computer.

例如

psexec \\pc999.myDomain.loc -u pc999\Administrator <your exe>

答案2

-h 参数在这里是关键:如果没有它,psexec 就不会在 Windows Vista 及更高版本上使用 UAC 提升权限执行命令:

C:\Users\merickson>psexec /?

PsExec v1.97 - Execute processes remotely
Copyright (C) 2001-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

PsExec executes a program on a remote system, where remotely executed console
applications execute interactively.

Usage: psexec [\\computer[,computer2[,...] | @file]][-u user [-p psswd]
 [-n s][-l][-s|-e][x][-i [session]][-c [-f|-v]][-w directory][-d][-<priority>]
 [-a n,n,...] cmd [arguments]

...

 -h         If the target system is Vista or higher, has the process
            run with the account's elevated token, if available.
...

(编辑:根据下面的评论添加了 -h 开关存在的证据)

答案3

显然,我的进程被阻止并不是因为 psexec 忽略了提供的登录。

不知道为什么,但使用 Vista 作为客户端计算机时,使用 -u 和 -p 参数传递的凭据实际上并未用于登录服务器(使用服务器上的事件查看器弄清楚)。相反,它始终是登录的用户正在使用。显然,当两台机器位于同一域中时会发生这种情况。

必须打开凭据管理器(控制面板>用户帐户>管理您的网络密码)并使用我想要用于 psexec 的用户为目标机器创建一组新密码。

答案4

您可以使用-s标志以在 SYSTEM 上下文中运行命令。这是假设您尚未使用需要在网络上其他地方访问的其他凭据运行该命令。

相关内容