diff --git a/experimental-feature-linux.json b/experimental-feature-linux.json index b0a5a696381..561e7b46c43 100644 --- a/experimental-feature-linux.json +++ b/experimental-feature-linux.json @@ -8,6 +8,5 @@ "PSNativeCommandArgumentPassing", "PSNativeCommandErrorActionPreference", "PSRemotingSSHTransportErrorHandling", - "PSStrictModeAssignment", "PSSubsystemPluginModel" ] diff --git a/experimental-feature-windows.json b/experimental-feature-windows.json index b0a5a696381..561e7b46c43 100644 --- a/experimental-feature-windows.json +++ b/experimental-feature-windows.json @@ -8,6 +8,5 @@ "PSNativeCommandArgumentPassing", "PSNativeCommandErrorActionPreference", "PSRemotingSSHTransportErrorHandling", - "PSStrictModeAssignment", "PSSubsystemPluginModel" ] diff --git a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs index 8a3e428b9c4..524d21d896a 100644 --- a/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs +++ b/src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.cs @@ -27,7 +27,6 @@ public class ExperimentalFeature internal const string PSCleanBlockFeatureName = "PSCleanBlock"; internal const string PSAMSIMethodInvocationLogging = "PSAMSIMethodInvocationLogging"; internal const string PSExecFeatureName = "PSExec"; - internal const string PSStrictModeAssignment = "PSStrictModeAssignment"; #endregion @@ -140,9 +139,6 @@ static ExperimentalFeature() new ExperimentalFeature( name: PSExecFeatureName, description: "Add 'exec' built-in command on Linux and macOS"), - new ExperimentalFeature( - name: PSStrictModeAssignment, - description: "Add support of setting Strict-Mode with Invoke-Command"), }; EngineExperimentalFeatures = new ReadOnlyCollection(engineFeatures); diff --git a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs index 804355d2e8d..a2a2397cb7a 100644 --- a/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs +++ b/src/System.Management.Automation/engine/remoting/commands/InvokeCommandCommand.cs @@ -263,72 +263,6 @@ public override SwitchParameter UseSSL } } - private sealed class ArgumentToPSVersionTransformationAttribute : ArgumentToVersionTransformationAttribute - { - protected override bool TryConvertFromString(string versionString, [NotNullWhen(true)] out Version version) - { - if (string.Equals("off", versionString, StringComparison.OrdinalIgnoreCase)) - { - version = new Version(0, 0); - return true; - } - - if (string.Equals("latest", versionString, StringComparison.OrdinalIgnoreCase)) - { - version = PSVersionInfo.PSVersion; - return true; - } - - return base.TryConvertFromString(versionString, out version); - } - } - - private static readonly Version s_OffVersion = new Version(0, 0); - - private sealed class ValidateVersionAttribute : ValidateArgumentsAttribute - { - protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics) - { - Version version = arguments as Version; - if (version == s_OffVersion) - { - return; - } - - if (version == null || !PSVersionInfo.IsValidPSVersion(version)) - { - // No conversion succeeded so throw an exception... - throw new ValidationMetadataException( - "InvalidPSVersion", - null, - Metadata.ValidateVersionFailure, - arguments); - } - } - } - - /// - /// Gets or sets strict mode. - /// - [Experimental(ExperimentalFeature.PSStrictModeAssignment, ExperimentAction.Show)] - [Parameter(ParameterSetName = InvokeCommandCommand.InProcParameterSet)] - [ArgumentToPSVersionTransformation] - [ValidateVersion] - public Version StrictMode - { - get - { - return _strictmodeversion; - } - - set - { - _strictmodeversion = value; - } - } - - private Version _strictmodeversion = null; - /// /// For WSMan session: /// If this parameter is not specified then the value specified in @@ -908,8 +842,6 @@ public virtual SwitchParameter RemoteDebug #endregion - private Version _savedStrictModeVersion; - #endregion Parameters #region Overrides @@ -1033,12 +965,6 @@ protected override void BeginProcessing() } } - if (_strictmodeversion != null) - { - _savedStrictModeVersion = Context.EngineSessionState.CurrentScope.StrictModeVersion; - Context.EngineSessionState.CurrentScope.StrictModeVersion = _strictmodeversion; - } - return; } @@ -1255,19 +1181,7 @@ protected override void ProcessRecord() } else if (ParameterSetName.Equals(InvokeCommandCommand.InProcParameterSet) && (_steppablePipeline != null)) { - try - { - _steppablePipeline.Process(InputObject); - } - catch - { - if (_strictmodeversion != null) - { - Context.EngineSessionState.CurrentScope.StrictModeVersion = _savedStrictModeVersion; - } - - throw; - } + _steppablePipeline.Process(InputObject); } else { @@ -1298,30 +1212,20 @@ protected override void EndProcessing() { if (ParameterSetName.Equals(InvokeCommandCommand.InProcParameterSet)) { - try - { - if (_steppablePipeline != null) - { - _steppablePipeline.End(); - } - else - { - ScriptBlock.InvokeUsingCmdlet( - contextCmdlet: this, - useLocalScope: !NoNewScope, - errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe, - dollarUnder: AutomationNull.Value, - input: _input, - scriptThis: AutomationNull.Value, - args: ArgumentList); - } + if (_steppablePipeline != null) + { + _steppablePipeline.End(); } - finally + else { - if (_strictmodeversion != null) - { - Context.EngineSessionState.CurrentScope.StrictModeVersion = _savedStrictModeVersion; - } + ScriptBlock.InvokeUsingCmdlet( + contextCmdlet: this, + useLocalScope: !NoNewScope, + errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe, + dollarUnder: AutomationNull.Value, + input: _input, + scriptThis: AutomationNull.Value, + args: ArgumentList); } } else diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Invoke-Command.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Invoke-Command.Tests.ps1 deleted file mode 100644 index 1765e5d8217..00000000000 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Invoke-Command.Tests.ps1 +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -Describe "Invoke-Command" -Tags "CI" { - Context "StrictMode tests" { - BeforeAll { - $skipTest = !($EnabledExperimentalFeatures -contains "PSStrictModeAssignment"); - If (Test-Path Variable:InvokeCommand__Test) { - Remove-Item Variable:InvokeCommand__Test - } - } - - It "Setting -StrictMode parameter with uninitialized variable throws error" -skip:$skipTest { - { Invoke-Command -StrictMode 3.0 {$InvokeCommand__Test} } | Should -Throw -ErrorId 'VariableIsUndefined' - } - - It "Setting -StrictMode parameter with initialized variable does not throw error" -skip:$skipTest { - $InvokeCommand__Test = 'Something' - Invoke-Command -StrictMode 3.0 {$InvokeCommand__Test} | Should -Be 'Something' - Remove-Item Variable:InvokeCommand__Test - } - - It "-StrictMode parameter sets StrictMode back to original state after process completes" -skip:$skipTest { - { Invoke-Command -StrictMode 3.0 {$InvokeCommand__Test} } | Should -Throw -ErrorId 'VariableIsUndefined' - { Invoke-Command {$InvokeCommand__Test} } | Should -Not -Throw - } - - It "-StrictMode parameter works on piped input" -skip:$skipTest { - "There" | Invoke-Command -ScriptBlock { "Hello $input" } -StrictMode 3.0 | Should -Be 'Hello There' - { "There" | Invoke-Command -ScriptBlock { "Hello $InvokeCommand__Test" } -StrictMode 3.0 } | Should -Throw -ErrorId 'VariableIsUndefined' - } - - It "-StrictMode latest works" -skip:$skipTest { - { Invoke-Command -StrictMode latest {$InvokeCommand__Test} } | Should -Throw -ErrorId 'VariableIsUndefined' - } - - It "-StrictMode off works" -skip:$skipTest { - { Invoke-Command -StrictMode off {$InvokeCommand__Test} } | Should -Not -Throw - } - } -}