I have already seen someone else's question and answer在同一主题上,但对我而言,它无法回答问题。
我知道如何使用Select-Object,Where-Object,ForEach-Object等并在其中传递脚本块:
dir | ForEach-Object { $_.Name }
Dir.Select(x => x.Name)
dir | ForEach-Object { param($x) $x.Name }
& { param($x) $x.Name } (dir)[0]
& { $_.Name } (dir)[0]
最佳答案
$_
仅在管道的上下文中创建,即将输出对象从一个命令传递到另一个命令的“输入”。对于管道过滤器(类似于函数),powershell会使用管道的当前对象自动填充$_
变量。现在,我要说当前的,因为需要注意的是,当多个对象向下传递到管道中时,过滤器的进程脚本块将对每个对象执行一次。
现在,您可以将管道对象重命名为您的输入参数之一,但是您必须告诉powershell您正在这样做。例如:
# C:\> filter get-name-filt {Param([parameter(ValueFromPipeline=$true)]$x) $x.name}
# C:\> (dir)[0] | get-name-filt