时间:2011-01-06 18:26:18

标签: powershell

3 个答案:

答案 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:\>