我有一个过程已经在远程计算机上运行,我想一个调试器附加到它。我想用调用-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),我得到同样的错误消息。这里发生了什么?
编辑:
也许我会这一切错了:我的理解是,该查询将返回一个指向正在运行的过程,然后可以用作输入对象调用,WmiMethod。
调试过程需要一个单独的调试器已经被下载并安装在机器上,而“AttachDebugger”的方法是默认安装的(至少我假设,因为它是在Windows 10的新副本)。我为什么要使用内置的方式的原因不仅是因为我想这个脚本是在生产环境中使用,我不会有过什么安装在计算机上的控制。
我通过运行脚本发现here其中发现居住在Win32_Process的方法找到了方法。我与调用-WmiMethod去,因为被调用-AsJob时,creates a job locally on the remote computer在那里我发送到调试的过程中驻留。
感谢您的帮助,我的混乱遗憾:这是我的第一个PowerShell脚本的一部分。
使用情况如下:在SIEM环境中的用户看到可疑的作用在网络上的程序。用户然后远程登录到受害者计算机和通过其发送到调试器冻结可疑线程。然后用户注销,并会尽快给后来分析线程。该线程将继续冻结,直到那个时候。
我个人从来没有尝试过或有一个理由去尝试这种使用情况。
然而,AsJob用于长时间运行的任务。你只查询得到一个进程ID的列表,一旦提供了房源,任务完成/停止/完成。
没有什么附加到。最后,你在哪里得到这个方法--- AttachDebugger - 从?
有使用Get-WmiObject可以或调用-WmiMethod小命令参数没有这样的方法。这是错误的是什么
你为什么不只是使用这种努力内置cmdlet的。
# get function / cmdlet details
(Get-Command -Name Debug-Process).Parameters
Get-help -Name Debug-Process -Examples
Get-help -Name Debug-Process -Full
Get-help -Name Debug-Process -Online