如何从嵌套管道访问更高级别的$ _管道变量?

时间:2011-11-23 04:14:52

标签: powershell

我正在编写一个脚本,它将查看父VHD文件的目录,然后评估哪些VM正在使用这些父VHD。

我有它的机制,但我遇到了一个问题,我真的需要从嵌套管道的上下文中引用一个自动管道变量($ _)

sudo代码类似于:

For each File in Files
Iterate over all VMs that have differencing disks
and return all the VMs that have a disk whose parent disk is File

这是我到目前为止实现的实际powershell代码:

$NAVParentFiles = get-childitem '\\hypervc2n2\c$\ClusterStorage\Volume1\ParentVHDs' | where {$_.Name -notLike "*diff*"} | select name
$NAVParentFiles | % { Get-VM | where {$_.VirtualHardDisks | where {$_.VHDType -eq "Differencing" -and ($_.ParentDisk.Location | split-path -leaf) -like <$_ from the outer for each loop goes here> } } 

感谢您提供有关如何从嵌套管道中优雅地访问外部管道变量的任何帮助。

2 个答案:

答案 0 :(得分:30)

您可以将$_分配给变量并使用它吗?

 1..10 | %{ $a = $_; 1..10 | %{ write-host $a} }

无论如何,请考虑重构您的脚本。它太嵌套了。专注于可读性。管道并不总是必要的,如果有助于提高可读性,可以使用foreach循环。

答案 1 :(得分:0)

我没有该命令,但是-pipelinevariable公共参数也许可以在这里使用。

Get-VM -PipelineVariable vm | Get-VHD |
  Select-Object @{n='Name'; e={$vm.name}}, path, parentpath