diff --git a/src/PowerShellEditorServices.Protocol/Server/DebugAdapter.cs b/src/PowerShellEditorServices.Protocol/Server/DebugAdapter.cs index 0b50dca3b..115d3ca44 100644 --- a/src/PowerShellEditorServices.Protocol/Server/DebugAdapter.cs +++ b/src/PowerShellEditorServices.Protocol/Server/DebugAdapter.cs @@ -294,7 +294,7 @@ protected async Task HandleLaunchRequest( if (this.editorSession.PowerShellContext.CurrentRunspace.Location == RunspaceLocation.Local && !this.editorSession.DebugService.IsDebuggerStopped) { - await editorSession.PowerShellContext.SetWorkingDirectory(workingDir); + await editorSession.PowerShellContext.SetWorkingDirectory(workingDir, isPathAlreadyEscaped: false); Logger.Write(LogLevel.Verbose, "Working dir set to: " + workingDir); } diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index 8e157be92..6b2413ea8 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -178,7 +178,8 @@ protected async Task HandleInitializeRequest( if (editorSession.Workspace.WorkspacePath != null) { await editorSession.PowerShellContext.SetWorkingDirectory( - editorSession.Workspace.WorkspacePath); + editorSession.Workspace.WorkspacePath, + isPathAlreadyEscaped: false); } await requestContext.SendResult( diff --git a/src/PowerShellEditorServices/Session/PowerShellContext.cs b/src/PowerShellEditorServices/Session/PowerShellContext.cs index 0c6e1ee98..51cd79d64 100644 --- a/src/PowerShellEditorServices/Session/PowerShellContext.cs +++ b/src/PowerShellEditorServices/Session/PowerShellContext.cs @@ -1078,11 +1078,26 @@ internal void ReleaseRunspaceHandle(RunspaceHandle runspaceHandle) /// /// public async Task SetWorkingDirectory(string path) + { + await this.SetWorkingDirectory(path, true); + } + + /// + /// Sets the current working directory of the powershell context. + /// + /// + /// Specify false to have the path escaped, otherwise specify true if the path has already been escaped. + public async Task SetWorkingDirectory(string path, bool isPathAlreadyEscaped) { this.InitialWorkingDirectory = path; using (RunspaceHandle runspaceHandle = await this.GetRunspaceHandle()) { + if (!isPathAlreadyEscaped) + { + path = EscapePath(path, false); + } + runspaceHandle.Runspace.SessionStateProxy.Path.SetLocation(path); } }