Как получить доступ к переменной $ _ конвейера более высокого уровня из вложенного конвейера? - PullRequest
16 голосов
/ 23 ноября 2011

Я пишу сценарий, который будет смотреть на каталог родительских VHD-файлов, а затем оценивать, какие виртуальные машины используют эти родительские 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 Iреализовали до сих пор, чтобы сделать это:

$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> } } 

Спасибо за любую помощь, вы можете предоставить мне о том, как элегантно получить доступ к переменной внешнего конвейера из вложенного конвейера.

1 Ответ

30 голосов
/ 23 ноября 2011

Вы можете присвоить $_ переменной и использовать это?

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

В любом случае, подумайте над рефакторингом вашего скрипта. Это слишком вложено. Сконцентрируйтесь на удобочитаемости. Не всегда необходимо передавать по конвейеру, вы можете использовать цикл foreach, если это помогает улучшить читаемость

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...