我有一个已在远程计算机上运行的进程,我想为其附加一个调试器。我想使用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环境中,用户看到网络上的程序可疑。然后,用户远程登录到受害计算机,并通过将其发送给调试器来冻结可疑线程。然后,用户注销,稍后将返回分析线程。线程将保持冻结状态,直到那个时候。
答案 0 :(得分:0)
我个人从未尝试过或没有理由尝试此用例。
但是,AsJob用于长时间运行的任务。您仅在查询以获得单个进程ID的列表,一旦提供了该列表,该工作就完成/停止/完成。
没有任何附加条件。最后,您从何处获得此方法-AttachDebugger-?
没有使用Get-WmiObject或Invoke-WmiMethod cmdlet参数的方法。这就是错误所在
为什么您不仅仅使用内置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