我正在编写一个可以在管道中间调用的 Cmdlet。使用此 Cmdlet,有些参数定义了ValueFromPipelineByPropertyName属性,以便 Cmdlet 可以使用管道中先前定义的具有相同名称的参数。
我遇到的悖论是在重写的BeginProcessing()方法中,我利用了可以从管道获取其值的参数之一。根据Cmdlet Processing Lifecycle ,直到调用 BeginProcessing()之后 才会发生管道参数的绑定。因此,如果它们试图在BeginProcessing()中使用,我似乎无法依赖管道绑定参数。
我考虑过将事情转移到ProcessRecord()方法。不幸的是,需要进行一次性的、相对昂贵的操作。发生这种情况的最佳位置似乎是在BeginProcessing()方法中,以帮助确保它在管道中只发生一次。
围绕这个问题的几个问题:
- 有没有解决这个问题的好方法?
这些相同的参数也设置了Mandatory属性。如果没有 PowerShell 抱怨没有这些必需的参数,我怎么能做到这一点?
提前感谢您的想法。
更新
当我意识到我只是不太了解管道绑定参数时,我取出了问题的第二部分。我错误地认为管道绑定参数来自在管道中执行的先前 Cmdlet。实际上来自通过管道传递的对象!我参考了Keith Hill 的一篇文章来帮助理解这一点。