我正在编写一个可以在管道中间调用的Cmdlet。使用此Cmdlet,可以定义ValueFromPipelineByPropertyName属性的参数,以便Cmdlet可以使用具有先前在管道中定义的相同名称的参数。
我遇到的悖论是在重写的BeginProcessing()方法中,我使用了一个可以从管道获取其值的参数。根据{{3}},在调用 Cmdlet Processing Lifecycle之后,才会发生管道参数的绑定。因此,如果他们试图在BeginProcessing()中使用它,我似乎无法依赖管道绑定参数。
我考虑过将事情转移到BeginProcessing()方法。不幸的是,需要进行一次相对昂贵的操作。发生这种情况的最佳位置似乎是ProcessRecord()方法,以帮助确保它只在管道中发生一次。
几个问题问题围绕着这个问题:
提前感谢您的想法。
我拿出问题的第二部分,因为我意识到我只是不太了解管道绑定参数。我错误地认为管道绑定参数来自在管道中执行的之前的 Cmdlet 。实际上来自对象通过管道传递!我引用了Mandatory来帮助理解这一点。
答案 0 :(得分:2)
您可以在BeginProcessing中将实例字段bool(Init)设置为false。然后检查参数是否在BeginProcessing中设置。如果是,则调用一次执行init(InitMe)的方法。在ProcessRecord中检查Init的值,如果为false,则调用InitMe。 InitMe应该在返回之前将Init设置为true。
关于第二个问题,如果您已将参数标记为必需,则必须将其作为参数或通过管道提供。您使用多个参数集吗?如果是这样,那么即使参数被标记为必需参数,也只有在关联参数集是由PowerShell确定用于特定调用cmdlet的参数集时才是必需的。