Skip to content

Clear output encodings before the ShellExecute fallback for native commands - #28327

Open
Wei-Lun Li (b84330808) wants to merge 1 commit into
PowerShell:masterfrom
b84330808:fix-native-shellexecute-fallback-encoding
Open

Wei-Lun Li (b84330808) wants to merge 1 commit into
PowerShell:masterfrom
b84330808:fix-native-shellexecute-fallback-encoding

Conversation

@b84330808

Copy link
Copy Markdown

PR Summary

Fixes #28225.

When a native command fails to start on Windows and it is the only command in the pipeline, PowerShell retries with ShellExecute. That retry turns off the stream redirection but leaves StandardOutputEncoding / StandardErrorEncoding set, so Process.Start throws before ShellExecute is tried:

Set-Content notpe.exe 'not an executable'
$x = & .\notpe.exe
# Program 'notpe.exe' failed to run: StandardOutputEncoding is only supported when standard output is redirected.
& .\notpe.exe 2>$null
# Program 'notpe.exe' failed to run: StandardErrorEncoding is only supported when standard error is redirected.

This change clears both encodings together with the redirection flags. With it, both forms report the real start error, the same as & .\notpe.exe | Out-Null.

PR Context

The encodings were added for redirected native output, but the ShellExecute fallback was not updated to clear them, so any captured native command that needs the fallback fails with an unrelated InvalidOperationException instead.

The new test (Windows only) runs a non-PE .exe with stdout captured and with stderr redirected, and checks that the error's inner exception is the Win32Exception from starting the process. It fails without the fix.

PR Checklist

…mmands

When a native command whose stdout or stderr is captured fails to start,
the ShellExecute fallback turns off the stream redirection but keeps
`StandardOutputEncoding` and `StandardErrorEncoding`. `Process.Start`
then throws "StandardOutputEncoding is only supported when standard
output is redirected", so ShellExecute is never tried and the real
start error is lost.

Clear both encodings together with the redirection flags.

Fixes PowerShell#28225
@b84330808
Wei-Lun Li (b84330808) requested a review from a team as a code owner November 4, 2026 06:20
Copilot AI balanced review requested due to automatic review settings November 4, 2026 06:20
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No active review issues were identified in the change to preserve native-command launch errors during the Windows ShellExecute fallback.

No open issues 🎉

What changed in this PR

Fixes #28225 by clearing output encodings before Windows retries a native command with ShellExecute, preventing an encoding validation error from masking the launch failure.

Changes:

  • Clear standard output and error encodings when disabling redirection for the fallback.
  • Add Windows-only regression tests for captured stdout and redirected stderr, checking that failures expose a Win32Exception.
File Description
test/​powershell/​Language/​Scripting/​NativeExecution/​NativeCommandProcessor.Tests.ps1 Tests launch-error reporting for both redirection scenarios.
src/​System.Management.Automation/​engine/​NativeCommandProcessor.cs Clears output encodings before the ShellExecute retry.

Review effort: Balanced

@microsoft-github-policy-service microsoft-github-policy-service Bot added the Review - Needed The PR is being reviewed label Nov 11, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

This pull request has been automatically marked as Review Needed because it has been there has not been any activity for 7 days.
Maintainer, please provide feedback and/or mark it as Waiting on Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Review - Needed The PR is being reviewed

Projects

None yet

2 participants