ネストされたパイプラインから上位レベルの $_ パイプライン変数にアクセスするにはどうすればよいでしょうか? 質問する

ネストされたパイプラインから上位レベルの $_ パイプライン変数にアクセスするにはどうすればよいでしょうか? 質問する

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

ネストされたパイプラインから外側のパイプライン変数にエレガントにアクセスする方法についてご助言いただければ幸いです。

ベストアンサー1

$_を変数に割り当てて使用することができます。

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

とにかく、スクリプトのリファクタリングを検討してください。ネストが多すぎます。読みやすさに集中してください。パイプは必ずしも必要ではありません。foreach読みやすさの向上に役立つ場合は、ループを使用できます。

おすすめ記事