PowerShell 7では、パイプライン入力を並列で実行するために非常に必要な機能が導入されました。
PowerShell 7 のドキュメントには、これがどのように実装されるかについての詳細は記載されていません。
以前にPoshRSJob
およびInvoke-Parallel
モジュールを利用したことがあるので、PowerShellジョブの実行よりも、Powershellでの並列操作の場合、ランスペースが従来よりはるかに効率的なアプローチと見なされていたことを知っています。私はこれがランスペースではなくスレッディングを使用していることを示すいくつかの混合コンテンツを読みましたが、他に特定のものを見つけることができません。
私はいくつかの技術的な洞察に本当に感謝します:
Foreach-object -parallelのデバッグ:
それを行うには、2番目のpwshプロセスが必要です。最初のもので行います:
foreach-object -parallel { Wait-Debugger;1;2;3 }
次に、2番目のウィンドウで、他のpwshのpidを確認します。次に、そのpshostprocessを入力します。ランスペースを見て、可用性が「InBreakpoint」と示されているものをデバッグします。 「v」は「ステップオーバー」を意味します。
get-process pwsh
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
64 44.32 82.23 1.70 3912 12 pwsh
63 40.66 78.03 1.36 6472 12 pwsh
$pid
6472
Enter-PSHostProcess 3912
get-runspace
Id Name ComputerName Type State Availability
-- ---- ------------ ---- ----- ------------
1 Runspace1 localhost Local Opened Busy
2 PSTask:1 localhost Local Opened InBreakpoint
3 RemoteHost localhost Local Opened Busy
debug-runspace 2
v
v
v
Foreach-object -parallel -asjobを実行すると、同じウィンドウでget-runspaceとdebug-runspaceを使用できます。しかし、ステップ実行中は出力を見ることができませんでした。
foreach-object -parallel { Wait-Debugger;1;2;3 } -asjob
get-runspace
Id Name ComputerName Type State Availability
-- ---- ------------ ---- ----- ------------
1 Runspace1 localhost Local Opened Available
2 PSTask:1 localhost Local Opened InBreakpoint
debug-runspace 2
v
v
v
Vscodeを使用した高度なセットアップを含む新しいデバッグビデオを次に示します。 https://www.reddit.com/r/PowerShell/comments/gn0270/advanced_powershell_debugging_techniques/