工作原理 -
假设我有一个 scriptblock
我会和 Select-Object
cmdlet 一起使用。
$jobTypeSelector = `
{
if ($_.Type -eq "Foo")
{
"Bar"
}
elseif ($_.Data -match "-Action ([a-zA-Z]+)")
{
$_.Type + " [" + $Matches[1] + "]"
}
else
{
$_.Type
}
}
$projectedData = $AllJobs | Select-Object -Property State, @{Name="Type"; Expression=$jobTypeSelector}
这个很好用,我按预期得到了结果。
我想做的事情 -
然而,在代码的后面,我想要重新使用定义为$jobTypeSelector
的scriptblock
。
例如,我期望下面的代码将会把传递作为参数的单一对象$fooJob
用于scriptblock
中的$_
自动变量,并返回和在Select-Object
cmdlet上下文执行时相同的结果。
$fooType = $jobTypeSelector.Invoke($fooJob)
问题:
我的代码不如我所预期的那样工作,返回了空值。
我已尝试过的方法:
我检查了所有属性是否都正确设置,并且它不是因为空白或
$null
的相关属性本身导致的问题。我在互联网上搜索,似乎很难找到任何相关页面,但最终我找到了一个与此问题略微不同但相似的页面 - 在 PowerShell 中调用脚本块。这篇博客没有直接回答我的问题,而任何相关的解释只会导致一种非常丑陋、难以阅读和维护的解决方案,依我看来。
问题:
那么,什么是调用 scriptblock
的最佳方式,用 $_
自动变量作为参数(而不是 param
块),针对单个对象?