Есть ли удобный способ преобразовать PSCustomObject
в пользовательский класс в качестве параметра функции в PowerShell 5.1? Пользовательский объект содержит дополнительные свойства.
Я хотел бы иметь возможность сделать что-то вроде этого:
class MyClass {
[ValidateNotNullOrEmpty()][string]$PropA
}
$input = [pscustomobject]@{
PropA = 'propA';
AdditionalProp = 'additionalProp';
}
function DuckTypingFtw {
[CmdletBinding()]
param(
[Parameter(Mandatory = $True, Position = 0, ValueFromPipeline)] [MyClass] $myObj
)
'Success!'
}
DuckTypingFtw $input
К сожалению, вместо Success!
я получаю:
DuckTypingFtw: невозможно обработать преобразование аргумента для параметра «myObj». Невозможно преобразовать значение "@{PropA=propA; AdditionalProp=additionalProp}" в тип "MyClass". Ошибка: «Не удается преобразовать «@{PropA=propA; AdditionalProp=additionalProp}" для
типа "System.Management.Automation.PSCustomObject" для типа "MyClass"." At C:\temp\tmp.ps1:23 char:15 + DuckTypingFtw $input + ~~~~~~ + CategoryInfo: InvalidData: (:) [DuckTypingFtw], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId: ParameterArgumentTransformationError, DuckTypingFtw
Если я закомментирую AdditionalProp
, все будет нормально.
По сути, чего я хочу добиться, так это вернуть объект из одной функции и передать его второй функции, в то же время гарантируя, что параметр второй функции имеет все ожидаемые свойства.