Skip to content

[Windows] Shell commands have no console handle since v1.0.57 - breaks Clear-Host and MSAL interactive auth #3683

@chitturs

Description

@chitturs

Describe the bug

Since upgrading from v1.0.47 to v1.0.60, the powershell tool launches pwsh.exe without a console handle attached to the process. This breaks any script that calls Clear-Host/cls or requires MSAL interactive browser authentication.

Evidence from inside a powershell tool call:

# GetConsoleWindow() returns 0 (no console window)
Add-Type -TypeDefinition 'using System; using System.Runtime.InteropServices; public class C { [DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow(); }'
[C]::GetConsoleWindow()   # 0

[System.Console]::WindowWidth  # Throws "The handle is invalid"
Clear-Host                     # Throws SetValueInvocationException: "The handle is invalid"

# Process has no window
[System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle  # 0

Affected version

GitHub Copilot CLI 1.0.60-0.

Last working version: 1.0.47 (May 13, 2026).

Steps to reproduce the behavior

  1. Launch Copilot CLI v1.0.60 on Windows
  2. Ask it to run a command containing cls or Clear-Host (e.g., "run cls; Write-Host hello")
  3. Observe exit code 1 with error:
SetValueInvocationException:
Line |
   3 |  $RawUI.CursorPosition = @{X=0;Y=0}
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception setting "CursorPosition": "The handle is invalid."

Alternatively:

  1. Ask it to run any script that uses MSAL interactive auth (e.g., Azure EV2 deployment cmdlets)
  2. Auth fails with:
Failed to get authentication information : Value cannot be null. (Parameter 'format').

No browser window opens for authentication.

Expected behavior

Shell commands executed via the powershell tool should have a console handle attached, as they did in v1.0.47. Clear-Host should succeed or be a silent no-op, and MSAL should be able to open a browser for interactive authentication.

Additional context

  • Operating system: Windows 11 (10.0.26100)
  • CPU architecture: x86_64
  • Terminal emulator: Windows Terminal
  • Shell: PowerShell 7.6.2
  • The pwsh process is launched as: pwsh.exe -NoProfile -NoLogo -NonInteractive -Command "..."
  • The Copilot shell wrapper's finally block checks $? and calls $host.SetShouldExit(1) on any error, making the cls error fatal
  • Workaround: use Start-Process pwsh -ArgumentList @("-ExecutionPolicy", "Bypass", "-Command", $cmd) to get a real console window, but this prevents the agent from capturing stdout directly
  • Possibly related: Bug: CLI produces no stdout in child process (Start-Process) on Windows — blocks headless automation #2525

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:platform-windowsWindows-specific: PowerShell, cmd, Git Bash, WSL, Windows Terminalarea:toolsBuilt-in tools: file editing, shell, search, LSP, git, and tool call behavior

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions