在 Set-PSBreakpoint 的操作块中记录当前执行的命令

Logging the current executing command within the Action Block for Set-PSBreakpoint

我在我的 powershell 会话中为每个“Get*”附加了一个命令断点。此命令断点涉及调用一个操作,该操作调用 Write-Host“我们被困在这段代码中”。如下所示

例如

PS /Users/test> Set-PSBreakpoint -Command "Get*"  -Action {
>> Write-Host "We are trapped in this code"
>> }

  ID Script                                                   Line Command                                                  Variable                                                 Action
  -- ------                                                   ---- -------                                                  --------                                                 ------
   1                                                               Get*                                                                                                              …

PS /Users/test> Get-Runspace
We are trapped in this code

 Id Name            ComputerName    Type          State         Availability
 -- ----            ------------    ----          -----         ------------
  1 Runspace1       localhost       Local         Opened        Busy

PS /Users/test>

现在不用打印

We are trapped in this code

我们要打印

We are trapped in this code: Get-Runspace

在此特别是我们要打印命令即。 Get-Runspace 应用了断点。 有什么方法可以在 ScriptBlock 中获取执行命令。

PS: 我们已经在脚本块中尝试了 $MyInvocation.MyCommand.Name 并且各种其他方法,但所有方法 return null.

假设您对触发断点的命令行感兴趣,请使用$MyInvocation.Line:

Set-PSBreakpoint -Command "Get-conten*"  -Action { 
  Write-Host "We are trapped in this code: $($MyInvocation.Line)"
}

如果您想检查自动 $MyInvocation 变量的具体值(它是类型 System.Management.Automation.InvocationInfo), pipe it to the Out-Host cmdlet 的一个实例:

Set-PSBreakpoint -Command "Get-conten*"  -Action { 
  $MyInvocation | Out-Host
}