Есть ли удобный способ преобразования 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 "."В C: \ temp \ tmp.ps1: 23 char: 15 + DuckTypingFtw $ input + ~~~~~~ + CategoryInfo: InvalidData: (:) [DuckTypingFtw], ParameterBindingArgumentTransformationException + FullyQualifiedErrorId: ParameterArgumentTransformationE2ror
*3 * Duck
Если я закомментирую AdditionalProp
, все будет работать нормально.
По сути, я хочу добиться возврата объекта из одной функции и одновременной передачи его другой функции. гарантируя, что параметр второй функции обладает всеми ожидаемыми свойствами.