根据MSDN:
“参数必须在公共非静态字段上声明或 属性。应在属性上声明参数。该物业 必须有一个公共集访问器,如果是ValueFromPipeline或 指定ValueFromPipelineByPropertyName关键字,属性 必须有一个公共get访问器。“
为什么我必须在cmdlet ValueFromPipeline
参数中声明get访问器?据我所知,PowerShell只需要将它们的值放入,而不是将它们读出来。谢谢(顺便说一下我对这种行为很好奇:))。
答案 0 :(得分:3)
PowerShell 读取标有ValueFromPipeline
或ValueFromPipelineByPropertyName
的参数的默认值,以便在分配从{获得的新值之前进行备份 {3}}
请考虑以下cmdlet:
New-Post -Title <string>
Set-Post -InputObject <Post> -Title <string>
以下适用情况:
New-Post
cmdlet 将新创建的Post
对象返回到管道,其中 Title
属性InputObject
cmdlet上的Set-Post
属性标有ValueFromPipeline = true
Title
cmdlet上的Set-Post
属性标有ValueFromPipelineByPropertyName = true
。将它们与以下命令结合使用:
New-Post -Title "Foo" | Set-Post
并在Set-Post
cmdlet的Title
属性的get访问器上设置断点会产生以下堆栈跟踪:
正如您所看到的,在CmdletParameterBinderController.GetDefaultParameterValue
cmdlet上的Title
属性与来自该对象的对象上的相应属性的值绑定的过程中,会调用Set-Post
方法。管道