答案 0 :(得分:1)
答案 1 :(得分:0)
我没有看到你从外部范围使用$_
。但是我们假设您希望最后一列名为"Line for pattern $_"
,因此您将使用foreach
中的外部作用域,而最简单的解决方案只是在每次迭代中更改标签:
...
$Patterns | foreach {
$exp[-1].Label = "Line for pattern $_" # <<- this one
get-childitem ($Path + "*") -include *.cs -recurse `
| select-string -pattern ($_ + "TableAdapter") `
| format-table $exp -AutoSize
}
答案 2 :(得分:0)
看起来你真正需要的是在循环运行时评估的函数。也许你可以$exp
成为scriptblock
。我的意思的一个简单例子:
PS C:\> $func = [scriptblock]{ 'prefix' + $_ }
PS C:\> @('x', 'y', 'z') | Foreach-object { Write-host (& $func) }
prefixx
prefixy
prefixz
PS C:\>
或者只是定义一个函数:
PS C:\> function func() { 'prefix' + $_ }
PS C:\> @('x', 'y', 'z') | Foreach-object { Write-host (func) }
prefixx
prefixy
prefixz
PS C:\>
通过在脚本块或函数中引用$_
,它将在被调用时进行评估,而不是之前。
或者,如果您愿意,可以定义scriptblock
/函数以将输入对象作为参数:
PS C:\> function func($x) { 'prefix' + $x }
PS C:\> @('x', 'y', 'z') | Foreach-object { Write-host (func $_) }
prefixx
prefixy
prefixz
PS C:\>