Binary cmdlet binding fails to unwrap a scalar PSObject for StringCollection parameters
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 58/100
Direção de pesquisa
Comece com ParameterBinderBase.EncodeCollection, mencionado no stack trace, e reproduza o problema com o script do PowerShell no relatório. Compare o caso de PSObject escalar com o array de strings e os controles de múltiplos resultados; considera-se concluído quando o caso escalar é associado a StringCollection e retorna o valor esperado sem quebrar os controles.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Prerequisites
- Write a descriptive title.
- Make sure you are able to repro it on the latest released version
- Search the existing issues.
- Refer to the FAQ.
- Refer to Differences between Windows PowerShell 5.1 and PowerShell.
Steps to reproduce
$source = @'
using System.Collections.Specialized;
using System.Management.Automation;
[Cmdlet("Test", "StringCollectionBinding")]
public sealed class TestStringCollectionBindingCommand : PSCmdlet
{
[Parameter(Mandatory = true)]
public StringCollection Value { get; set; }
protected override void ProcessRecord()
{
WriteObject(Value[0]);
}
}
'@
$type = Add-Type -TypeDefinition $source -PassThru
Import-Module -Assembly $type.Assembly
# Select-Object emits one scalar PSObject wrapping a string.
$value = 'test-value' | Select-Object -Unique
$value.GetType().FullName
$value -is [System.Management.Automation.PSObject]
Test-StringCollectionBinding -Value $value
# The control case succeeds:
Test-StringCollectionBinding -Value ([string[]]$value)
# Multiple pipeline results also succeed:
$values = 'first', 'second' | Select-Object -Unique
Test-StringCollectionBinding -Value $values
Expected behavior
System.String
True
test-value
Actual behavior
System.String
True
Test-StringCollectionBinding:
Cannot convert 'expected' to the type
'System.Collections.Specialized.StringCollection' required by parameter
'Value'. Unable to cast object of type
'System.Management.Automation.PSObject' to type 'System.String'.
Error details
Exception :
Type : System.Management.Automation.ParameterBindingException
Message : Cannot convert 'test-value' to the type 'System.Collections.Specialized.StringCollection' required by parameter 'Value'. Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.String'.
ParameterName : Value
ParameterType : [System.Collections.Specialized.StringCollection]
TypeSpecified : [System.Management.Automation.PSObject]
ErrorId : CannotConvertArgument
Line : 22
Offset : 37
CommandInvocation :
MyCommand : Test-StringCollectionBinding
ScriptLineNumber : 22
OffsetInLine : 1
HistoryId : 1
Line : Test-StringCollectionBinding -Value $value 2>$null
Statement : Test-StringCollectionBinding -Value $value 2>$null
PositionMessage : At line:22 char:1
+ Test-StringCollectionBinding -Value $value 2>$null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
InvocationName : Test-StringCollectionBinding
PipelineLength : 1
PipelinePosition : 1
ErrorRecord :
Exception :
Type : System.Management.Automation.ParentContainsErrorRecordException
Message : Cannot convert 'test-value' to the type 'System.Collections.Specialized.StringCollection' required by parameter 'Value'. Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.String'.
HResult : -2146233087
CategoryInfo : InvalidArgument: (:) [Test-StringCollectionBinding], ParentContainsErrorRecordException
FullyQualifiedErrorId : CannotConvertArgument,TestStringCollectionBindingCommand
InvocationInfo :
MyCommand : Test-StringCollectionBinding
ScriptLineNumber : 22
OffsetInLine : 37
HistoryId : 1
Line : Test-StringCollectionBinding -Value $value 2>$null
Statement : $value
PositionMessage : At line:22 char:37
+ Test-StringCollectionBinding -Value $value 2>$null
+ ~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 22
TargetSite :
Name : EncodeCollection
DeclaringType : [System.Management.Automation.ParameterBinderBase]
MemberType : Method
Module : System.Management.Automation.dll
Data :
System.Management.Automation.Interpreter.InterpretedFrameInfo, System.Management.Automation, Version=7.6.0.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35 : <ScriptBlock>
InnerException :
Type : System.InvalidCastException
TargetSite :
Name : ChkCastAny_NoCacheLookup
DeclaringType : [System.Runtime.CompilerServices.CastHelpers]
MemberType : Method
Module : System.Private.CoreLib.dll
Message : Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.String'.
Source : System.Private.CoreLib
HResult : -2147467262
StackTrace :
at System.Collections.Specialized.StringCollection.System.Collections.IList.Add(Object value)
at System.Management.Automation.ParameterBinderBase.EncodeCollection(CommandParameterInternal argument, String parameterName, ParameterCollectionTypeInformation collectionTypeInformation, Type toType, Object currentValue, Boolean
coerceElementTypeIfNeeded, Boolean& coercionRequired)
Source : System.Management.Automation
HResult : -2146233087
StackTrace :
at System.Management.Automation.ParameterBinderBase.EncodeCollection(CommandParameterInternal argument, String parameterName, ParameterCollectionTypeInformation collectionTypeInformation, Type toType, Object currentValue, Boolean
coerceElementTypeIfNeeded, Boolean& coercionRequired)
at System.Management.Automation.ParameterBinderBase.CoerceTypeAsNeeded(CommandParameterInternal argument, String parameterName, Type toType, ParameterCollectionTypeInformation collectionTypeInfo, Object currentValue)
at System.Management.Automation.ParameterBinderBase.BindParameter(CommandParameterInternal parameter, CompiledCommandParameter parameterMetadata, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindParameter(CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindParameter(UInt32 parameterSets, CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
at System.Management.Automation.CmdletParameterBinderController.BindNamedParameter(UInt32 parameterSets, CommandParameterInternal argument, MergedCompiledCommandParameter parameter)
at System.Management.Automation.ParameterBinderController.BindNamedParameters(UInt32 parameterSets, Collection`1 arguments)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParametersNoValidation(Collection`1 arguments)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParameters(Collection`1 arguments)
at System.Management.Automation.CommandProcessor.BindCommandLineParameters()
at System.Management.Automation.CommandProcessor.Prepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.CommandProcessorBase.DoPrepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.Internal.PipelineProcessor.Start(Boolean incomingStream)
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
--- End of stack trace from previous location ---
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][] commandRedirections, FunctionContext
funcContext)
at System.Management.Automation.Interpreter.ActionCallInstruction`6.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
CategoryInfo : InvalidArgument: (:) [Test-StringCollectionBinding], ParameterBindingException
FullyQualifiedErrorId : CannotConvertArgument,TestStringCollectionBindingCommand
InvocationInfo :
MyCommand : Test-StringCollectionBinding
ScriptLineNumber : 22
OffsetInLine : 37
HistoryId : 1
Line : Test-StringCollectionBinding -Value $value 2>$null
Statement : $value
PositionMessage : At line:22 char:37
+ Test-StringCollectionBinding -Value $value 2>$null
+ ~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 22
Environment data
Name Value
---- -----
PSVersion 7.6.5
PSEdition Core
GitCommitId 7.6.5
OS Microsoft Windows 10.0.26200
Platform Win32NT
PSRemotingProtocolVersion 2.4
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Visuals
No response
- Linguagem predominante
- C#
- Estrelas
- 55.5k
- Forks
- 8.5k
- Merge médio
- 1d 35min
- PRs com merge (30d)
- 136
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de PowerShell/PowerShell
-
Issue-Enhancement Needs-Triage WG-Cmdlets
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
PowerShell/PowerShell#28061 · 2 comentários · 3 reações ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
PowerShell/PowerShell#28037 ·
Mantenedores costumam responder em até 1 dia
-
Needs-Triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
PowerShell/PowerShell#27973 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
PowerShell/PowerShell#27720 ·
Mantenedores costumam responder em até 1 dia
-
Issue-Bug Up-for-Grabs WG-Cmdlets WG-Reviewed
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
PowerShell/PowerShell#27670 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de PowerShell/PowerShell
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
fluentassertions/fluentassertions#3353 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
-
Dificuldade 2/5 Meio dia Facilidade para iniciantes 78/100
unoplatform/uno#24769 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
AvaloniaUI/Avalonia#22323 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
microsoft/onnxruntime-genai#2633 ·
Mantenedores costumam responder em até 1 dia