在使用脚本块进行试验时,我试图将脚本块参数与高级函数一起使用,并注意到它的执行方式与提供给已编译的Cmdlet时不同。
在审查中
this blog post
从PowerShell团队日志中,如果脚本块不是参数的有效输入,则PowerShell引擎似乎应评估脚本块。似乎在使用scriptBlock参数调用函数时,它试图将scriptBlock直接转换为参数类型,而不是基于管道中的当前对象评估scriptBlock。
我的目的是复制如下行为:
Import-CSV somecsv.csv | get-wmiobject -class {$_.class} -Computer {$_.computer}
高级功能。
示例脚本:
$sb = {throw "If there was an error, the scriptblock was evaluated!"}
function test ()
{
param (
[Parameter()]
[string]
$ThisShouldBeEvaluatedForEachItem,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[string]
$FullName
)
process
{
write-host $Fullname, $ThisShouldBeEvaluatedForEachItem
}
}
Get-ChildItem | test -ThisShouldBeEvaluatedForEachItem $sb
这是有意的行为还是我走错了方向?
基于
Keith's response
,我将valuefrompipeline和valuefrompipelinebypropertyname(在两个单独的测试中)添加到thisshouldbeeevaluatedForEachtem参数的参数属性中。这样做可以使示例工作,尽管它似乎违背了团队博客帖子中所述的脚本块参数的目的。