2011-11-23 33 views
13

Tôi đang viết một tập lệnh sẽ xem một thư mục các tệp VHD gốc và sau đó đánh giá các máy ảo nào đang sử dụng các VHD mẹ đó.

tôi có các cơ chế của nó làm việc nhưng tôi chạy vào một vấn đề mà tôi thực sự cần phải tham khảo một biến đường ống tự động ($ _) từ bối cảnh của một đường ống lồng nhau

Mã sudo sẽ là một cái gì đó như :

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 

đây là đoạn mã PowerShell thực tế tôi đã thực hiện cho đến nay để làm điều này:

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

Nhờ sự giúp đỡ bạn có thể cung cấp cho tôi trên làm thế nào để truy cập trang nhã một biến đường ống ngoài từ một đường ống lồng nhau.

+0

Đôi khi, tính năng 'foreach'es lồng vào nhau có thể đọc được nhiều hơn so với đường ống lồng nhau. – stej

Trả lời

24

Bạn có thể gán $_ cho biến và sử dụng?

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

Dù sao, hãy xem xét sắp xếp lại tập lệnh của bạn. Nó quá lồng nhau. Tập trung vào khả năng đọc. Nó không phải là luôn luôn cần thiết để đường ống, bạn có thể sử dụng một vòng lặp foreach nếu giúp trong việc cải thiện khả năng đọc.

+0

Điều đó đã thực hiện lừa =). Tôi đang xem xét việc tái cấu trúc mã như bạn đã đề xuất và có thể sẽ lồng vào vòng lặp foreach mà nó có ý nghĩa. –

Các vấn đề liên quan