From 34d9cfd9428f2d9b9ac62c9e17a97341a767be59 Mon Sep 17 00:00:00 2001 From: Jordan Borean Date: Thu, 7 Nov 2024 14:44:42 +1000 Subject: [PATCH 1/2] Support PSObject wrapped values for -Encoding Add support for using a PSObject wrapped value when specifying the -Encoding parameter in cmdlets like Get-Content. --- src/System.Management.Automation/utils/EncodingUtils.cs | 5 +++++ test/powershell/engine/Basic/Encoding.Tests.ps1 | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 060b052f744..363fe77f146 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -115,6 +115,11 @@ internal sealed class ArgumentToEncodingTransformationAttribute : ArgumentTransf { public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) { + if (inputData is PSObject inputPSObject) + { + inputData = inputPSObject.BaseObject; + } + switch (inputData) { case string stringName: diff --git a/test/powershell/engine/Basic/Encoding.Tests.ps1 b/test/powershell/engine/Basic/Encoding.Tests.ps1 index dc1a0b15ba2..455c7e2ddea 100644 --- a/test/powershell/engine/Basic/Encoding.Tests.ps1 +++ b/test/powershell/engine/Basic/Encoding.Tests.ps1 @@ -89,6 +89,8 @@ Describe "File encoding tests" -Tag CI { It "Parameter 'Encoding' should accept ''" -TestCases @( @{ encoding = 1251 } @{ encoding = "windows-1251" } + # Piping the string creates a PSObject boxed value that we are testing. + @{ encoding = ("windows-1251" | Write-Output) } ) { param ( $encoding ) $testFile = "${TESTDRIVE}/fileEncoding-$($encoding).txt" From 5a0f4d0db3d201fb95722e3f626997126dab7dea Mon Sep 17 00:00:00 2001 From: Jordan Borean Date: Fri, 8 Nov 2024 04:31:55 +1000 Subject: [PATCH 2/2] Update src/System.Management.Automation/utils/EncodingUtils.cs Co-authored-by: Ilya --- src/System.Management.Automation/utils/EncodingUtils.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 363fe77f146..cdb467d213a 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -115,10 +115,7 @@ internal sealed class ArgumentToEncodingTransformationAttribute : ArgumentTransf { public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) { - if (inputData is PSObject inputPSObject) - { - inputData = inputPSObject.BaseObject; - } + inputData = PSObject.Base(inputData); switch (inputData) {