共用方式為


Debug-Runspace

使用 Runspace 啟動互動式偵錯工作階段。

Syntax

Debug-Runspace
     [-Runspace] <Runspace>
     [-BreakAll]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-Name] <String>
     [-BreakAll]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-Id] <Int32>
     [-BreakAll]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Debug-Runspace
     [-InstanceId] <Guid>
     [-BreakAll]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Description

Cmdlet 會 Debug-Runspace 啟動具有本機或遠端作用中 Runspace 的互動式偵錯會話。 您可以先執行 Get-Process 以尋找與 PowerShell 相關聯的進程,然後使用 Enter-PSHostProcessId 參數中指定的進程標識碼附加至進程,然後 Get-Runspace 列出 PowerShell 主機進程內的 Runspace,即可找到您想要偵錯的 Runspace。

選取要偵錯的 Runspace 之後,如果 runspace 目前正在執行命令或腳本,或腳本在斷點停止,PowerShell 會開啟 Runspace 的遠端調試程式會話。 您可以使用與偵錯遠端會話腳本相同的方式對 Runspace 腳本進行偵錯。

如果您是執行進程之電腦上的系統管理員,或正在執行要偵錯的腳本,您只能附加至 PowerShell 主機進程。 此外,您無法輸入執行目前 PowerShell 工作階段的主機進程。 您只能輸入執行不同 PowerShell 工作階段的主機進程。

範例

範例 1:偵錯遠端 Runspace

在此範例中,您會偵錯遠端計算機上開啟的 Runspace WS10TestServer。 在命令的第一行中,您會在遠端電腦上執行Get-Process,並篩選 Windows PowerShell 主機進程。 在此範例中,您想要偵錯進程標識碼 1152,Windows PowerShell ISE 主機進程。

PS C:\> Get-Process -ComputerName "WS10TestServer" -Name "*powershell*"

Handles      WS(K)   VM(M)      CPU(s)    Id  ProcessName
-------      -----   -----      ------    --  -----------
    377      69912     63     2.09      2420  powershell
    399     123396    829     4.48      1152  powershell_ise

PS C:\> Enter-PSSession -ComputerName "WS10TestServer"
[WS10TestServer]:PS C:\> Enter-PSHostProcess -Id 1152
[WS10TestServer:][Process:1152]: PS C:\Users\Test\Documents> Get-Runspace

Id Name            ComputerName    Type          State         Availability
-- ----            ------------    ----          -----         ------------
 1 Runspace1       WS10TestServer  Remote        Opened        Available
 2 RemoteHost      WS10TestServer  Remote        Opened        Busy

[WS10TestServer][Process:1152]: PS C:\Users\Test\Documents> Debug-Runspace -Id 2

Hit Line breakpoint on 'C:\TestWFVar1.ps1:83'
At C:\TestWFVar1.ps1:83 char:1
+ $scriptVar = "Script Variable"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[Process:1152]: [RSDBG: 2]: PS C:\> >

在第二個命令中,您會執行 Enter-PSSession 以在 WS10TestServer 上開啟遠端會話。 在第三個命令中,您可以執行 Enter-PSHostProcess,並指定您在第一個命令 1152 中取得的主機進程標識碼,以附加至遠端伺服器上執行的 Windows PowerShell ISE 主機進程。

在第四個命令中,您可以執行 Get-Runspace列出進程標識碼 1152 的可用 Runspace。 請注意忙碌 Runspace 的標識符;它正在執行您要偵錯的腳本。

在最後一個命令中,您會藉由執行 來執行腳本 TestWFVar1.ps1的已開啟 Runspace 開始偵錯,方法是執行 Debug-Runspace,並藉由新增 Id 參數來 識別 Runspace。 因為腳本中有斷點,所以調試程式會開啟。

參數

-BreakAll

可讓您在除錯程式附加時立即中斷目前的位置。

此參數已新增至 PowerShell 7.2。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

在執行 Cmdlet 前提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

指定 Runspace 的識別碼。 您可以執行 Get-Runspace 以顯示 Runspace 識別碼。

Type:Int32
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

依實例識別碼指定 Runspace,這是您可以藉由執行 Get-Runspace來顯示的 GUID。

Type:Guid
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

依其名稱指定 Runspace。 您可以執行 Get-Runspace 以顯示 Runspace 的名稱。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Runspace

指定 Runspace 物件。 為此參數提供值最簡單的方式,就是指定包含篩選 Get-Runspace 命令結果的變數。

Type:Runspace
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

Runspace

您可以使用管線將命令的結果 Get-Runspace 傳送至此 Cmdlet。

備註

Debug-Runspace 適用於處於開啟狀態的 Runspace。 如果 Runspace 狀態從 Opened 變更為另一個狀態,該 Runspace 會自動從執行清單中移除。 只有在 Runspace 符合下列準則時,才會將 Runspace 新增至執行中清單。

  • 如果它來自 Invoke-Command;也就是說,它有 Invoke-Command GUID 識別符。
  • 如果它來自 Debug-Runspace,即具有 Debug-Runspace GUID 識別碼。
  • 如果它來自PowerShell工作流程,且其工作流程作業標識碼與目前作用中的調試程式工作流程工作標識符相同。