【发布时间】:2016-02-07 03:02:25
【问题描述】:
我正在自动测试某些 Windows 应用程序的安装、检测和卸载。为了以静默方式运行大多数安装程序,它们必须以nt authority\system 运行。这很容易在本地机器上通过调用psexec 来完成,如下所示:
psexec -s setup.exe /S
我需要能够自动将测试目标计算机回滚到已知良好的状态,因此我正在使用另一台计算机来协调这一切。理想情况下,我可以使用 PowerShell 远程处理在目标计算机上启动安装程序。我还没有找到实现这一目标的方法。
尝试 1:来自远程会话的 psexec
最明显的做法是使用远程连接到目标计算机并调用psexec -s。看起来是这样的:
[target.ad.example.com]: PS C:\Users\un1\Documents> C:\PsTools\PsExec.exe -s whoami
C:\PsTools\PsExec.exe :
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
问题是,这个过程在那个时候就挂了。
尝试 2:Start-Process 和 -Verb RunAs
将RunAs 动词与Start-Process 一起使用可能会很好地运行提升的进程,但它似乎不像nt authority\system 那样运行它:
whoami-to-file.bat
whoami > out.txt
PowerShell 会话
[target.ad.example.com]: PS C:\> Start-Process .\whoami-to-file.bat -Verb RunAs -WorkingDirectory
[target.ad.example.com]: PS C:\> Get-Contents out.txt
example\un1
进程没有以nt authority\system启动。
问题
是否可以通过 PowerShell 远程处理以 nt authority\system 的身份启动进程?如果有,怎么做?
【问题讨论】:
-
你试过
C:\PsTools\PsExec.exe -s -accepteula whoami吗? -
@LievenKeersmaekers 不错的建议。我刚刚尝试过,它不再挂起。我仍然看到一个错误,但现在有希望了。感谢您的帮助。
-
在远程系统上运行 procmon,执行您的命令,停止 procmon,您很可能会在跟踪中看到类似
whoami not found的内容。 -
@LievenKeersmaekers
psexec -s甚至没有走那么远。它无法启动它的帮助服务,这是有道理的,因为远程处理 + 模拟可能加起来是双跳。见my answer。
标签: powershell impersonation psexec powershell-remoting