【发布时间】:2019-02-04 04:59:28
【问题描述】:
我有一个进程已经在远程计算机上运行,我想给它附加一个调试器。我想使用 Invoke-WMIMethod,这样当我从远程会话断开连接时,调试器将在后台保持连接到进程。
到目前为止我有:
$Qry = "Select * from Win32_Process where ProcessID like $ID"
$CimIO = Get-WMIObject -Query $Qry
Invoke-WMIMethod -InputObject $CimIO -Class Win32_Process -Name AttachDebugger -AsJob
我收到以下错误:
Invoke-WmiMethod : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:1
+ Invoke-WmiMethod -InputObject $CimIO -Class Win32_process -Name Attac ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-WmiMethod], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeWmiMethod
我在正确的轨道上吗?当我尝试 Win32_Process 中的其他方法(如 GetOwner)时,我收到相同的错误消息。这是怎么回事?
编辑:
也许我做错了:我的理解是查询将返回一个指向正在运行的进程的指针,然后可以将其用作 Invoke-WmiMethod 的输入对象。
Debug-Process 要求已经在机器上下载并安装了一个单独的调试器,而“AttachDebugger”作为一种方法是默认安装的(至少我假设它是在 Windows 10 的新副本上)。我只想使用内置方法的原因是因为我希望这个脚本可以在我无法控制计算机上安装的内容的生产环境中使用。
我通过运行找到here 的脚本找到了该方法,该脚本在Win32_Process 中找到了该方法。我选择了 Invoke-WmiMethod,因为当调用 -AsJob 时,它creates a job locally on the remote computer 是我发送到调试器的进程所在的位置。
感谢您的帮助,很抱歉造成混淆:这是我的第一个 powershell 脚本的一部分。
用例如下: 在 SIEM 环境中,用户会看到网络上的某个程序表现得可疑。然后,用户远程登录到受害计算机并通过将可疑线程发送到调试器来冻结它。然后用户注销并稍后返回分析线程。在那个时间之前,线程将保持冻结状态。
【问题讨论】:
标签: powershell debugging wmic