2011-11-23 7 views
13

मैं एक स्क्रिप्ट लिख रहा हूं जो अभिभावक वीएचडी फाइलों की निर्देशिका को देखेगा और फिर मूल्यांकन करेगा कि कौन से वीएम उन अभिभावक वीएचडी का उपयोग कर रहे हैं।

मैं इसे काम करने का यांत्रिकी है, लेकिन मैं एक मुद्दा जहां मैं वास्तव में एक नेस्टेड पाइपलाइन

के संदर्भ से एक स्वचालित पाइपलाइन चर ($ _) को संदर्भित करने की जरूरत में चल रहा 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> } } 

किसी भी मदद आप मुझ पर प्रदान कर सकते हैं के लिए धन्यवाद कैसे एक नेस्टेड पाइपलाइन से बाहरी पाइपलाइन चर का उपयोग करने के लिए।

+0

कभी-कभी घोंसला 'foreach'es नेस्टेड पाइपलाइनों की तुलना में अधिक पठनीय है। – stej

उत्तर

24

आप एक चर के लिए $_ असाइन कर सकते हैं और इसका उपयोग कर सकते हैं?

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

वैसे भी, अपनी स्क्रिप्ट को दोबारा प्रतिक्रिया देने पर विचार करें। यह बहुत घोंसला है। पठनीयता पर ध्यान केंद्रित करें। पाइप के लिए हमेशा जरूरी नहीं है, यदि आप पठनीयता में सुधार करने में मदद करते हैं तो आप फोरैच लूप का उपयोग कर सकते हैं।

+0

यह चाल है =)। जैसा कि आपने सुझाव दिया है और संभवतः नेस्टेड फोरैच लूप पर जा रहा है, जहां यह समझ में आता है, मैं कोड को दोबारा प्रतिक्रिया दे रहा हूं। –

संबंधित मुद्दे