是否有一种巧妙的方法可以将 a 转换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 : ParameterArgumentTransformationError,DuckTypingFtw
如果我注释掉AdditionalProp
,一切正常。
基本上,我想要实现的是从一个函数返回一个对象并将其传递给第二个函数,同时确保第二个函数的参数具有所有预期的属性。