1010using Microsoft . Extensions . Logging ;
1111using Microsoft . PowerShell . EditorServices . Services . DebugAdapter ;
1212using Microsoft . PowerShell . EditorServices . Services . PowerShell . Execution ;
13- using Microsoft . PowerShell . EditorServices . Services . PowerShell . Host ;
1413using Microsoft . PowerShell . EditorServices . Services . PowerShell . Runspace ;
1514
1615namespace Microsoft . PowerShell . EditorServices . Services . PowerShell . Debugging
@@ -54,10 +53,7 @@ public async Task<IReadOnlyList<BreakpointDetails>> SetLineBreakpointsAsync(
5453 ? $ "Enable-DscDebug -Breakpoint { hashtableString } "
5554 : "Disable-DscDebug" ) ;
5655
57- await executionService . ExecutePSCommandAsync (
58- dscCommand ,
59- CancellationToken . None )
60- . ConfigureAwait ( false ) ;
56+ await executionService . ExecutePSCommandAsync ( dscCommand , CancellationToken . None ) . ConfigureAwait ( false ) ;
6157
6258 // Verify all the breakpoints and return them
6359 foreach ( BreakpointDetails breakpoint in breakpoints )
@@ -80,7 +76,7 @@ public bool IsDscResourcePath(string scriptPath)
8076 public static async Task < DscBreakpointCapability > GetDscCapabilityAsync (
8177 ILogger logger ,
8278 IRunspaceInfo currentRunspace ,
83- PsesInternalHost psesHost )
79+ IInternalPowerShellExecutionService executionService )
8480 {
8581 // DSC support is enabled only for Windows PowerShell.
8682 if ( ( currentRunspace . PowerShellVersionDetails . Version . Major >= 6 ) &&
@@ -92,16 +88,13 @@ public static async Task<DscBreakpointCapability> GetDscCapabilityAsync(
9288 if ( ! isDscInstalled . HasValue )
9389 {
9490 PSCommand psCommand = new PSCommand ( )
95- . AddScript ( $ "$global:{ DebugService . PsesGlobalVariableNamePrefix } prevProgressPreference = $ProgressPreference")
96- . AddScript ( "$ProgressPreference = 'SilentlyContinue'" )
9791 . AddCommand ( @"Microsoft.PowerShell.Core\Import-Module" )
9892 . AddParameter ( "Name" , "PSDesiredStateConfiguration" )
9993 . AddParameter ( "PassThru" )
100- . AddParameter ( "ErrorAction" , ActionPreference . Ignore )
101- . AddScript ( $ "$ProgressPreference = $global:{ DebugService . PsesGlobalVariableNamePrefix } prevProgressPreference") ;
94+ . AddParameter ( "ErrorAction" , ActionPreference . Ignore ) ;
10295
10396 IReadOnlyList < PSModuleInfo > dscModule =
104- await psesHost . ExecutePSCommandAsync < PSModuleInfo > (
97+ await executionService . ExecutePSCommandAsync < PSModuleInfo > (
10598 psCommand ,
10699 CancellationToken . None ,
107100 new PowerShellExecutionOptions { ThrowOnError = false } )
@@ -113,19 +106,29 @@ await psesHost.ExecutePSCommandAsync<PSModuleInfo>(
113106
114107 if ( isDscInstalled . Value )
115108 {
116- PSCommand psCommand = new PSCommand ( )
117- . AddCommand ( "Get-DscResource" )
118- . AddCommand ( "Select-Object" )
119- . AddParameter ( "ExpandProperty" , "ParentPath" ) ;
109+ // Note that __psEditorServices_ is DebugService.PsesGlobalVariableNamePrefix but
110+ // it's notoriously difficult to interpolate it in this script, which has to be a
111+ // single script to guarantee everything is run at once.
112+ PSCommand psCommand = new PSCommand ( ) . AddScript (
113+ """
114+ try {
115+ $global:__psEditorServices_prevProgressPreference = $ProgressPreference
116+ $global:ProgressPreference = 'SilentlyContinue'
117+ return Get-DscResource | Select-Object -ExpandProperty ParentPath
118+ } finally {
119+ $ProgressPreference = $global:__psEditorServices_prevProgressPreference
120+ }
121+ """ ) ;
120122
121123 IReadOnlyList < string > resourcePaths =
122- await psesHost . ExecutePSCommandAsync < string > (
124+ await executionService . ExecutePSCommandAsync < string > (
123125 psCommand ,
124126 CancellationToken . None ,
125127 new PowerShellExecutionOptions { ThrowOnError = false }
126128 ) . ConfigureAwait ( false ) ;
127129
128130 logger . LogTrace ( $ "DSC resources found: { resourcePaths . Count } ") ;
131+
129132 return new DscBreakpointCapability
130133 {
131134 dscResourceRootPaths = resourcePaths . ToArray ( )
0 commit comments