有人可以帮助我理解为什么$ _对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
答案 0 :(得分:4)
执行此操作时:
$obj | Add-Member -MemberType NoteProperty -Name IdNumber -value $_.Column1 -PassThru
您正在管道绑定上下文之外访问$_
,例如在foreach-object表达式内或在为管道绑定参数指定的scriptblock值内。 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