[release/v7.3.0-rc.1] Revert "Add -StrictMode to Invoke-Command to allow specifying strict mode when invoking command locally" (#18074)

This commit is contained in:
github-actions[bot]
2022-09-12 22:02:44 -07:00
committed by GitHub
parent 4d5d690b3c
commit 7627e999a7
5 changed files with 14 additions and 157 deletions
-1
View File
@@ -8,6 +8,5 @@
"PSNativeCommandArgumentPassing",
"PSNativeCommandErrorActionPreference",
"PSRemotingSSHTransportErrorHandling",
"PSStrictModeAssignment",
"PSSubsystemPluginModel"
]
-1
View File
@@ -8,6 +8,5 @@
"PSNativeCommandArgumentPassing",
"PSNativeCommandErrorActionPreference",
"PSRemotingSSHTransportErrorHandling",
"PSStrictModeAssignment",
"PSSubsystemPluginModel"
]
@@ -27,7 +27,6 @@ namespace System.Management.Automation
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 @@ namespace System.Management.Automation
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<ExperimentalFeature>(engineFeatures);
@@ -263,72 +263,6 @@ namespace Microsoft.PowerShell.Commands
}
}
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);
}
}
}
/// <summary>
/// Gets or sets strict mode.
/// </summary>
[Experimental(ExperimentalFeature.PSStrictModeAssignment, ExperimentAction.Show)]
[Parameter(ParameterSetName = InvokeCommandCommand.InProcParameterSet)]
[ArgumentToPSVersionTransformation]
[ValidateVersion]
public Version StrictMode
{
get
{
return _strictmodeversion;
}
set
{
_strictmodeversion = value;
}
}
private Version _strictmodeversion = null;
/// <summary>
/// For WSMan session:
/// If this parameter is not specified then the value specified in
@@ -908,8 +842,6 @@ namespace Microsoft.PowerShell.Commands
#endregion
private Version _savedStrictModeVersion;
#endregion Parameters
#region Overrides
@@ -1033,12 +965,6 @@ namespace Microsoft.PowerShell.Commands
}
}
if (_strictmodeversion != null)
{
_savedStrictModeVersion = Context.EngineSessionState.CurrentScope.StrictModeVersion;
Context.EngineSessionState.CurrentScope.StrictModeVersion = _strictmodeversion;
}
return;
}
@@ -1255,19 +1181,7 @@ namespace Microsoft.PowerShell.Commands
}
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 @@ namespace Microsoft.PowerShell.Commands
{
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);
}
}
finally
if (_steppablePipeline != null)
{
if (_strictmodeversion != null)
{
Context.EngineSessionState.CurrentScope.StrictModeVersion = _savedStrictModeVersion;
}
_steppablePipeline.End();
}
else
{
ScriptBlock.InvokeUsingCmdlet(
contextCmdlet: this,
useLocalScope: !NoNewScope,
errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToCurrentErrorPipe,
dollarUnder: AutomationNull.Value,
input: _input,
scriptThis: AutomationNull.Value,
args: ArgumentList);
}
}
else
@@ -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
}
}
}