PowerShell Debug Invoke-Command

时间:2015-02-06 09:11:38

标签: debugging powershell remote-debugging

我试图找到一种在ScriptBlock Invoke-Command范围内达到峰值的简单方法。我已经阅读了Hey Scripting Guy博客,但他们只调用了脚本文件,我对如何做到这一点感到有些困惑。

有人可以告诉我如何让调试器停在说$Var = 5行吗?我曾尝试Set-PSBreakpoint,但总是失败。这样可以方便地检查值以及所有代码是否正确。

代码示例:

$session = New-PSSession -ComputerName localhost

Invoke-Command -Session $session -ScriptBlock $LoadFunctions

# Do other stuff

Invoke-Command -Session $session -ScriptBlock { 

    $Time = Get-Date
    $Var = '5' # Stop debugger here

    Set-PSBreakpoint -Variable $Var
}

Remove-PSSession $Session

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这对我有用。顺便说一下,我在PowerShell 4.0中。

首先,我将先前的set-psbreakpoint放在scriptblock中:

Invoke-Command -ComputerName . -ScriptBlock { 
  Set-PSBreakpoint -Variable metoo; 
  $test="foo"; 
  $one="1"; 
  $metoo="metoo";
} -Credential (Get-Credential)

当我跑步时,我收到以下消息:

WARNING: Session Session8 with instance ID 4a02c5f4-b333-4e58-85b7-78ccd4f31318 on computer localhost has been
disconnected because the script running on the session has stopped at a breakpoint. Use the Enter-PSSession cmdlet on
this session to connect back to the session and begin interactive debugging.
WARNING: Session Session8 with instance ID 4a02c5f4-b333-4e58-85b7-78ccd4f31318 has been created for reconnection.

所以为了看到会话仍在那里,我做了一个Get-PSSession:

> Get-PSSession

Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  9 Session8        localhost       Disconnected  Microsoft.PowerShell          None

很棒,会话就在那里,只需要重新连接并输入:

> Get-PSSession | Connect-PSSession

 Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  9 Session8        localhost       Opened        Microsoft.PowerShell   RemoteDebug

进入会话:

> Get-PSSession | Enter-PSSession
WARNING: You have entered a session that is currently stopped at a debug breakpoint inside a running command or script.
  Use the Windows PowerShell command line debugger to continue debugging.
Entering debug mode. Use h or ? for help.

Hit Variable breakpoint on ':$metoo' (Write access)

At line:1 char:59
+  Set-PSBreakpoint -Variable metoo; $test="foo"; $one="1"; $metoo="metoo";
+                                                           ~
[localhost]: [DBG]: PS C:\Users\Foo\Documents>>

很好,所以现在我在远程调试会话中!只需按照提示操作,例如输入“h”获取帮助或输入“k”获取-psscallstack等

[localhost]: [DBG]: PS C:\Users\Foo\Documents>> h

 s, stepInto         Single step (step into functions, scripts, etc.)
 v, stepOver         Step to next statement (step over functions, scripts, etc.)
 o, stepOut          Step out of the current function, script, etc.

 c, continue         Continue operation
 q, quit             Stop operation and exit the debugger

 k, Get-PSCallStack  Display call stack

 l, list             List source code for the current script.
                     Use "list" to start from the current line, "list <m>"
                     to start from line <m>, and "list <m> <n>" to list <n>
                     lines starting from line <m>

 <enter>             Repeat last command if it was stepInto, stepOver or list

 ?, h                displays this help message.


For instructions about how to customize your debugger prompt, type "help about_prompt".

[localhost]: [DBG]: PS C:\Users\Foo\Documents>>