Powershell 访问前一个管道中的变量

Jos*_*e3d 5 powershell

我创建了以下命令,用于合并与文件夹内的过滤器匹配的所有 csv 文件,并将其输出到输出文件中。

$mainPath="C:\\users\\myuser\\temp";
$mergeFilter="myfile.csv";
$outFile = "C:\\users\\myuser\temp\test.csv";
Get-ChildItem $mainPath -Recurse -Include $mergeFilter |
    Select-Object -ExpandProperty FullName |
    Import-Csv -Delimiter ';' |
    Select-Object *,@{Name='Date'; Expression={"$dummyvariable"}}; |
    Export-Csv $outFile -NoTypeInformation -Delimiter ';'
Run Code Online (Sandbox Code Playgroud)

我的问题是,当使用名为 $dummyvariable 的变量合并某些 CSV 时,我想添加一个额外的列,但我不知道必须在哪里初始化它才能获得 Expression={"..."} 中的值. 如果我之前在管道中声明它就不起作用(我需要在管道上做更高的工作以获得目录名称)

你知道我如何声明这个变量并在以“Select-Object”开头的管道上恢复吗?

提前致谢

此致。

何塞

mkl*_*nt0 6

我认为您正在寻找-PipelineVariable( -pv) 公共参数(PSv4+),它将给定 cmdlet 的当前输出对象存储在一个变量中,变量可以以后的管道段中的脚本块引用

这是一个简化的示例:

# Create sample input file.
@'
foo;bar
1;2
'@ > file.csv

Get-Item file.csv -pv fileObj | Select-Object -ExpandProperty FullName | 
  Import-Csv -Delimiter ';' | Select-Object *, @{ n='Date'; e={ $fileObj.LastWriteTime } }
Run Code Online (Sandbox Code Playgroud)

上面的结果类似于:

foo bar Date              
--- --- ----              
1   2   2/17/18 4:17:25 PM
Run Code Online (Sandbox Code Playgroud)

也就是说,-pv fileObjmadeGet-Item将其当前输出对象存储在 variable 中$fileObj,最后一个管道段能够在属性定义脚本块中引用它。