Skip to content

Commit a0e6807

Browse files
authored
Add error if invalid -ExecutionPolicy is passed to pwsh (#20460)
1 parent 5272720 commit a0e6807

File tree

4 files changed

+30
-10
lines changed

4 files changed

+30
-10
lines changed

src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1078,7 +1078,16 @@ private void ParseHelper(string[] args)
10781078
{
10791079
ParseExecutionPolicy(args, ref i, ref _executionPolicy, CommandLineParameterParserStrings.MissingExecutionPolicyParameter);
10801080
ParametersUsed |= ParameterBitmap.ExecutionPolicy;
1081-
ParametersUsed |= GetExecutionPolicy(_executionPolicy);
1081+
var executionPolicy = GetExecutionPolicy(_executionPolicy);
1082+
if (executionPolicy == ParameterBitmap.EPIncorrect)
1083+
{
1084+
SetCommandLineError(
1085+
string.Format(CultureInfo.CurrentCulture, CommandLineParameterParserStrings.InvalidExecutionPolicyArgument, _executionPolicy),
1086+
showHelp: true);
1087+
break;
1088+
}
1089+
1090+
ParametersUsed |= executionPolicy;
10821091
}
10831092
else if (MatchSwitch(switchKey, "encodedcommand", "e") || MatchSwitch(switchKey, "ec", "e"))
10841093
{

src/Microsoft.PowerShell.ConsoleHost/resources/CommandLineParameterParserStrings.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,7 @@ Valid formats are:
222222
<data name="NullElementInArgs" xml:space="preserve">
223223
<value>The specified arguments must not contain null elements.</value>
224224
</data>
225+
<data name="InvalidExecutionPolicyArgument" xml:space="preserve">
226+
<value>Invalid ExecutionPolicy value '{0}'.</value>
227+
</data>
225228
</root>

test/powershell/Host/ConsoleHost.Tests.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,12 @@ $powershell -c '[System.Management.Automation.Platform]::SelectProductNameForDir
943943
$out | Should -Be $expected
944944
}
945945
}
946+
947+
It 'Errors for invalid ExecutionPolicy string' {
948+
$out = pwsh -nologo -noprofile -executionpolicy NonExistingExecutionPolicy -c 'exit 0' 2>&1
949+
$out | Should -Not -BeNullOrEmpty
950+
$LASTEXITCODE | Should -Be $ExitCodeBadCommandLineParameter
951+
}
946952
}
947953

948954
Describe "WindowStyle argument" -Tag Feature {

test/xUnit/csharp/test_CommandLineParser.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -856,22 +856,24 @@ public static void TestParameter_ExecutionPolicy_No_Value(params string[] comman
856856
}
857857

858858
[Theory]
859-
[InlineData("-executionpolicy", "XML")]
860-
[InlineData("-ex", "XML")]
861-
[InlineData("-ep", "XML")]
862-
public static void TestParameter_ExecutionPolicy_With_Right_Value(params string[] commandLine)
859+
[InlineData("-executionpolicy", "InvalidPolicy")]
860+
[InlineData("-ex", "InvalidPolicy")]
861+
[InlineData("-ep", "InvalidPolicy")]
862+
public static void TestParameter_ExecutionPolicy_With_Wrong_Value(params string[] commandLine)
863863
{
864864
var cpp = new CommandLineParameterParser();
865865

866866
cpp.Parse(commandLine);
867867

868-
Assert.False(cpp.AbortStartup);
868+
Assert.True(cpp.AbortStartup);
869869
Assert.True(cpp.NoExit);
870-
Assert.False(cpp.ShowShortHelp);
871-
Assert.True(cpp.ShowBanner);
872-
Assert.Equal((uint)ConsoleHost.ExitCodeSuccess, cpp.ExitCode);
870+
Assert.True(cpp.ShowShortHelp);
871+
Assert.False(cpp.ShowBanner);
872+
Assert.Equal((uint)ConsoleHost.ExitCodeBadCommandLineParameter, cpp.ExitCode);
873873
Assert.Equal(commandLine[1], cpp.ExecutionPolicy);
874-
Assert.Null(cpp.ErrorMessage);
874+
Assert.Equal(
875+
string.Format(CommandLineParameterParserStrings.InvalidExecutionPolicyArgument, "InvalidPolicy"),
876+
cpp.ErrorMessage);
875877
}
876878

877879
[Theory]

0 commit comments

Comments
 (0)