2011-12-07 20 views
21

में अगले आइटम पर जाएं मेरे पास पावरशेल स्क्रिप्ट है जो कई डोमेन में सभी डोमेन व्यवस्थापक पर कुछ जांच करता है। प्रत्येक उपयोगकर्ता खाते के लिए कई चेक पूर्ववर्ती हैं। जब उनमें से एक स्क्रिप्ट को विफल करता है तो सूची में अगले व्यवस्थापक को जाना चाहिए।ForEach-Object

Get-QADGroupMember "Domain Admins" | Select-Object SamAccountName | ForEach-Object { 

    #Do something 
    if(!ThisCheckIsOK) 
    { 
     break; 
    } 

    #Do something else 
    if(ThisCheckIsNotOK) 
    { 
     break; 
    } 

    ... 
} 

इस पूरी स्क्रिप्ट बंद हो जाता है:

मैं वर्तमान में कुछ इस तरह (सरलीकृत) की है। क्या अगले तत्व पर जाने का कोई तरीका है?

$foreach.movenext()$foreachnull से काम नहीं करता है।

+0

शायद आपको SO पर बेहतर उत्तर मिल सकते हैं? – Smudge

+0

यदि यह सी ++ में एक foreach किया गया था, तो हाँ। अब मैं पावरहेल सेमीडलेट का उपयोग कर रहा हूं और यह स्पष्ट रूप से sysadmin-stuff है। –

+0

मुझे लगता है कि यह कहीं बीच में पड़ता है, लेकिन आपका प्रश्न सामान्य रूप से पावरहेल (पावरहेल लूप में अगले तत्व को अग्रिम कैसे करें), भले ही विनिर्देश sys-admin से संबंधित हों। सिर्फ यह देखते हुए कि एसएफ पर ~ 500 पावरहेल प्रश्न हैं, और एसओ पर लगभग 4k शायद कुछ लोग वहां पर सवाल का जवाब देने के लिए अधिक योग्य हैं। यह मेरी राय है वैसे भी =) – Smudge

उत्तर

26

आप अंतर्निहित पाश के साथ जारी रखने के लिए Continue कथन का उपयोग करना चाह सकते हैं।

PowerShell मदद फ़ाइल से अंश:

  • for:

    एक स्क्रिप्ट में, continue बयान प्रोग्राम प्रवाह इनमें से कोई कथन द्वारा नियंत्रित अंतरतम पाश के शीर्ष करने के तुरंत स्थानांतरित करने के लिए कारण बनता है

  • foreach
  • while
+2

Foreach-object foreach (और कोई कथन नहीं) है, इसलिए यह गलत काम करता है। – Steed

+6

यह मेरे लिए संपूर्ण 'ForEach-Object' कथन से बाहर निकलता है। 'रिटर्न 'काम करता है (यानी अगली वस्तु पर जाता है)। – aucuparia

+0

$ foreach.MoveNext() को – Djarid

21

आपको return कथन के साथ break को प्रतिस्थापित करना होगा।

Foreach-Object के अंदर एक अज्ञात फ़ंक्शन के रूप में कोड के बारे में सोचें। यदि आपके पास फ़ंक्शन के अंदर लूप हैं, तो निर्माण के लिए आवेदन करने वाले नियंत्रण कीवर्ड का उपयोग करें (continue, break, ...)।

+0

धन्यवाद! यह काम करता हैं! –

+1

जो इस विशिष्ट अवसर के लिए काम करेगा लेकिन नेस्टेड लूप के साथ बड़ी स्क्रिप्ट में अच्छी तरह से काम नहीं कर सकता है। –

+2

बस अज्ञात फ़ंक्शन के रूप में फ़ोरैच-ऑब्जेक्ट के अंदर कोड के बारे में सोचें। यदि आपके पास फ़ंक्शन के अंदर लूप हैं, तो निर्माण के लिए आवेदन करने वाले नियंत्रण कीवर्ड का उपयोग करें (जारी रखें, ब्रेक करें, ...) –