diff --git a/src/System.Management.Automation/engine/InternalCommands.cs b/src/System.Management.Automation/engine/InternalCommands.cs
index 10739b1896..86502861bf 100644
--- a/src/System.Management.Automation/engine/InternalCommands.cs
+++ b/src/System.Management.Automation/engine/InternalCommands.cs
@@ -2686,6 +2686,7 @@ namespace Microsoft.PowerShell.Commands
/// Gets or sets strict mode in the current scope.
///
[Parameter(ParameterSetName = "Version", Mandatory = true)]
+ [ArgumentCompleter(typeof(StrictModeVersionArgumentCompleter))]
[ArgumentToPSVersionTransformation]
[ValidateVersion]
[Alias("v")]
@@ -2717,6 +2718,42 @@ namespace Microsoft.PowerShell.Commands
Context.EngineSessionState.CurrentScope.StrictModeVersion = _version;
}
}
+
+ ///
+ /// Provides argument completion for StrictMode Version parameter.
+ ///
+ public class StrictModeVersionArgumentCompleter : IArgumentCompleter
+ {
+ private static readonly string[] s_strictModeVersions = new string[] { "Latest", "3.0", "2.0", "1.0" };
+
+ ///
+ /// Returns completion results for version parameter.
+ ///
+ /// The command name.
+ /// The parameter name.
+ /// The word to complete.
+ /// The command AST.
+ /// The fake bound parameters.
+ /// List of Completion Results.
+ public IEnumerable CompleteArgument(
+ string commandName,
+ string parameterName,
+ string wordToComplete,
+ CommandAst commandAst,
+ IDictionary fakeBoundParameters)
+ {
+ var strictModeVersionPattern = WildcardPattern.Get(wordToComplete + "*", WildcardOptions.IgnoreCase);
+
+ foreach (string version in s_strictModeVersions)
+ {
+ if (strictModeVersionPattern.IsMatch(version))
+ {
+ yield return new CompletionResult(version);
+ }
+ }
+ }
+ }
+
#endregion Set-StrictMode
#endregion Built-in cmdlets that are used by or require direct access to the engine.
diff --git a/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1 b/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1
index 369b5994dc..4d4aea1f0a 100644
--- a/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1
+++ b/test/powershell/Host/TabCompletion/TabCompletion.Tests.ps1
@@ -744,6 +744,30 @@ ConstructorTestClass(int i, bool b)
$res.CompletionMatches[0].CompletionText | Should -BeExactly '$TestVar1'
}
+ Context 'StrictMode Version parameter completion' {
+ BeforeAll {
+ $allStrictModeVersions = '1.0 2.0 3.0 Latest'
+ $versionOne = '1.0'
+ $versionTwo = '2.0'
+ $versionThree = '3.0'
+ $latestVersion = 'Latest'
+ }
+
+ It "Should complete Version for ''" -TestCases @(
+ @{ TextInput = "Set-StrictMode -Version "; ExpectedVersions = $allStrictModeVersions }
+ @{ TextInput = "Set-StrictMode -Version 1"; ExpectedVersions = $versionOne }
+ @{ TextInput = "Set-StrictMode -Version 2"; ExpectedVersions = $versionTwo }
+ @{ TextInput = "Set-StrictMode -Version 3"; ExpectedVersions = $versionThree }
+ @{ TextInput = "Set-StrictMode -Version Lat"; ExpectedVersions = $latestVersion }
+ @{ TextInput = "Set-StrictMode -Version NonExistentVersion"; ExpectedVersions = '' }
+ ) {
+ param($TextInput, $ExpectedVersions)
+ $res = TabExpansion2 -inputScript $TextInput -cursorColumn $TextInput.Length
+ $completionText = $res.CompletionMatches.CompletionText | Sort-Object
+ $completionText -join ' ' | Should -BeExactly $ExpectedVersions
+ }
+ }
+
Context "Format cmdlet's View paramter completion" {
BeforeAll {
$viewDefinition = @'