0

有人可以帮我理解为什么 $_ 对于 Add-Member 函数的工作方式与其他 PowerShell 函数的工作方式不同吗?我必须在这里遗漏一些细微差别。

使用下面的示例 CSV 文件,前 3 个示例可以正常工作。第四个看起来很简单,但没有。Powershell 返回的错误是:

The variable '$_' cannot be retrieved because it has not been set.

这是“正常”还是我写错了什么?

提前致谢。

Test.csv
Column1,Column2, Column3
Rock,1,abc
Paper,2,efg
Scissors,3,hij

$obj = Import-CSV "C:\test.csv"

(1) $obj | Add-Member -MemberType NoteProperty -Name IdNumber -value "ROCK" -PassThru| Format-Table

(2) $obj | ForEach-Object { $_ | Add-Member -MemberType NoteProperty -Name IdNumber -value $_.Column1 ; $_} | Format-Table

(3) $obj | ForEach-Object { Add-Member -InputObject $_ -MemberType NoteProperty -Name IdNumber -value $_.Column1 ; $_ } | Format-Table

(4) $obj | Add-Member -MemberType NoteProperty -Name IdNumber -value $_.Column1 -PassThru| Format-Table
4

1 回答 1

4

当你这样做时:

$obj | Add-Member -MemberType NoteProperty -Name IdNumber -value $_.Column1 -PassThru

您正在$_管道绑定上下文之外访问,例如在 foreach-object 表达式内或为管道绑定参数指定的脚本块值内。该Value参数不受管道限制。如果是这样,您将能够做到这一点:

$obj | Add-Member -MemberType NoteProperty -Name IdNumber -value {$_.Column1} -PassThru

就目前而言,做你想做的最简单的方法是:

$obj | ForEach-Object { Add-Member -Inp $_ NoteProperty -Name IdNumber -Value $_.Column1 -PassThru } | Format-Table
于 2013-05-15T21:59:46.023 回答