Powershell Foreach, जबकि, और अन्य लूप्स कैसे कार्य करते हैं?

Powershell Foreach, जबकि, और अन्य लूप्स कैसे कार्य करते हैं?

प्रोग्रामिंग सीखने में एक महत्वपूर्ण पहला कदम लूप के साथ काम करना है। शुक्र है, पावरशेल आपके कौशल के साथ बढ़ता जा रहा है।





स्ट्रीम मूवी फ्री नो साइन अप

आप समय और प्रयास बचाने के लिए लूप के अंदर हर दिन आपके द्वारा उपयोग की जाने वाली मौजूदा कमांड को फ्रेम कर सकते हैं। जब आप MakeUseOf पर अधिक लेख पढ़ने का महत्वपूर्ण कार्य करते हैं, तो आपकी स्क्रिप्ट भारी भारोत्तोलन करती है!





प्रत्येक लूप के लिए पॉवरशेल: उन्नत डेटा हैंडलिंग का द्वार

ForEach ForEach-Object का उपनाम है। (उपनाम पावरशेल में कमांड के लिए केवल एक शॉर्टकट है।) पावरशेल डेटा को संभालने के तरीके के बारे में बात करने का यह एक अच्छा समय है।





अधिकांश आधुनिक प्रोग्रामिंग भाषाओं की तरह, पावरशेल ऑब्जेक्ट-ओरिएंटेड है। पावरशेल में सब कुछ एक वस्तु है, जिसका अर्थ है कि चर भी विस्तारित गुण और कार्य हैं . यही कारण है कि आप अपनी खोजों को एक चर पर सेट कर सकते हैं, और परिणामों की एक सरणी के साथ समाप्त कर सकते हैं।

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

कुछ भाषाओं में, इस सरणी को संसाधित करना एक बहु-चरणीय प्रक्रिया होगी। सबसे पहले, लंबाई प्राप्त करना और फिर प्रत्येक चरण को गिनना।



पावरशेल में, आप सरणी के माध्यम से कदम उठाते हैं और ForEach का उपयोग करके प्रत्येक पर कार्रवाई करते हैं। यह आपको कोड की कई पंक्तियों को बचाता है, जो आपके पास एक लंबी स्क्रिप्ट होने पर सहायक होता है। उदाहरण के लिए, निम्नलिखित एक छोटी सी स्क्रिप्ट है जो कुछ Powershell ForEach लूप का उपयोग करेगी। यह आपकी सभी फाइलों का एक ज़िप संग्रह बनाता है जिसे आपने 30 दिनों में नहीं खोला है।

ForEach Loops का उपयोग करके एक फ़ाइल संग्रह प्रणाली का निर्माण

आइए चरणों को तोड़ें। तुम इस्तेमाल गेट-चाइल्डआइटम दस्तावेज़ फ़ोल्डर में सभी फ़ाइलें प्राप्त करने के लिए। पर्यावरण चर $env:उपयोगकर्ता प्रोफ़ाइल वर्तमान प्रोफ़ाइल का उपयोग करके स्क्रिप्ट चलाता है। यह चर हार्डकोड किए गए पथ की तुलना में अधिक पोर्टेबल है। उस खोज के परिणाम चर को सौंपे जाते हैं $ MyDocs . इसके बाद हम अपने ForEach लूप को प्रत्येक के माध्यम से चरणबद्ध करके बनाते हैं $MyDocs . में $Doc .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

लूप के अंदर, हम यह देखने के लिए जाँच करते हैं कि क्या प्रत्येक फ़ाइल का लास्ट एक्सेस टाइम संपत्ति 30 दिनों से अधिक पुरानी है। हम इसे के साथ प्राप्त करते हैं तारीख लें cmdlet, और का उपयोग कर अतिरिक्त दिन नकारात्मक तीस के साथ कार्य करें। यदि ऐसा है, तो हम फ़ाइल को इसमें जोड़ते हैं $myOldDocs सरणी। फ़ाइल सॉर्ट पूरा होने के बाद, हम अपना पूरा ऐरे लेते हैं और एक ज़िप फ़ाइल बनाते हैं। यह प्रक्रिया थोड़ी अधिक जटिल है क्योंकि इसमें थोड़ा सा .NET शामिल है। यदि आप इसे अच्छी तरह से समझ नहीं पाते हैं तो चिंता न करें -- आप से कोड चुरा सकते हैं यह TechNet सहायता दस्तावेज़ .

यहां क्या हो रहा है, इसका विश्लेषण करने के लिए: हम अपनी सभी पुरानी फाइलों को 30 दिनों से अधिक पुरानी आज की तारीख के लिए नामित एक नई निर्देशिका में स्थानांतरित कर देंगे। एक बार जब वह फ़ोल्डर बन जाता है, तो हमें उसी नाम का ज़िप संग्रह बनाना होगा। हम यह सुनिश्चित करने के लिए परीक्षण करेंगे कि संग्रह सफल हुआ है और .ZIP फ़ाइल है, और फिर नया फ़ोल्डर हटा दें। इसे महीने में एक बार चलाने के लिए निर्धारित कार्य के रूप में सेट करें। आप अपने लिए थोड़ी जगह बचाएंगे और अपने दस्तावेज़ फ़ोल्डर को साफ़ रखेंगे।





जबकि और करते समय: लूप्स ऑन कंडीशन

यदि आप किसी विशेष शर्त के पूरा होने पर ही लूप चलाना चाहते हैं, तो आप जबकि लूप का उपयोग करते हैं। यदि आप काउंट अप को ट्रैक करने के लिए किसी वैरिएबल का उपयोग कर रहे हैं, तो उसे पहले सेट करें।

i=0
while(i<10){
Your Steps
i+=1
}

समस्या यह है कि यदि आप काउंटर का उपयोग नहीं कर रहे हैं, तो हो सकता है कि परीक्षण सही होने पर भी आप अपना कोड कम से कम एक बार चलाना चाहें। यह नीचे दी गई उदाहरण स्क्रिप्ट के मामले में है। तो उन मामलों में, आप Do-While लूप का उपयोग करना चाहते हैं। वाक्यविन्यास थोड़ा अलग है।

do{
Your Steps
}while(Conditional Statement)

इनका उपयोग करना एक नौसिखिए प्रोग्रामर के लिए बिल्कुल स्पष्ट नहीं है। दिन-प्रतिदिन की स्क्रिप्टिंग करते हुए, हो सकता है कि आप उनमें इतनी बार न भागें। जहां वे विशेष रूप से काम में आते हैं वह एक प्रक्रिया की सफलता का परीक्षण करने के लिए एक अस्थायी टाइमर बनाना है।

स्नैपचैट के लिए और फिल्टर कैसे प्राप्त करें

हम रिमोट मशीन को रीबूट करने के लिए एक त्वरित स्क्रिप्ट बनाने जा रहे हैं और अगर यह 15 मिनट के भीतर वापस नहीं आती है तो अलर्ट करें। यह परिदृश्य मानता है कि यह एक होम सर्वर या अन्य मशीन है जो बहुत बार रीबूट नहीं होता है। यदि आपका कंप्यूटर आमतौर पर तेजी से ऊपर आता है, तो समय को समायोजित करने के लिए स्वतंत्र महसूस करें।

रीबूट करें और जांचें: डू-जबकि लूप का उपयोग करना

यह स्क्रिप्ट थोड़ी सरल है। सबसे पहले, आप का उपयोग करें कंप्यूटर को पुनः शुरू करें रिमोट मशीन को रिबूट करने का आदेश। (हमने रीबूट कमांड के लिए यहां एक डमी आईपी का इस्तेमाल किया है, इसे अपने कंप्यूटर के डीएनएस/आईपी के साथ ओवरराइट करना सुनिश्चित करें)। फिर काउंटर वैरिएबल बनाएं, मैं और इसे 0 पर सेट करें। इसके बाद, आपके पास अपना डू लूप है जिसमें स्टार्ट-स्लीप स्क्रिप्ट को 300 सेकंड (पांच मिनट) के लिए रोक रहा है। एक दूसरा आदेश काउंटर में एक जोड़ता है।

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

तब हमारे पास हमारे मानदंड हैं। हम यह सुनिश्चित करने के लिए या परीक्षण का उपयोग करते हैं कि विफलता अलर्ट उत्पन्न करती है। विकल्प स्क्रिप्ट लूपिंग है जो रिमोट मशीन की अंतहीन प्रतीक्षा कर रहा है। मशीन की जांच के लिए, हम उपयोग कर रहे हैं परीक्षण कनेक्शन सीएमडीलेट। सरलता के लिए, यह पॉवरशेल के लिए पिंग है। हम पैरामीटर जोड़ते हैं -शांत जो इसे पैकेट के परिणामों के बजाय सही या गलत वापस करने के लिए मजबूर करता है। या कथन का दूसरा भाग जाँचता है कि क्या काउंटर तीन से अधिक है।

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

अन्य लूप्स

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

for($i = 0;$i -lt 10;$i++){
Your Steps
}

तब तक करें जब तक कि लूप्स डू जबकि लूप्स की तरह न हों, आप केवल जबकि स्टेटमेंट को तब तक बदल दें। उदाहरण लिपि में, यह व्यवहार के समान ही होगा। यह एक स्टाइल पसंद है, लेकिन डू व्हाइल अन्य स्थितियों में अधिक बहुमुखी है। इसलिए यदि आपको केवल एक ही याद है, तो Do जबकि अधिक उपयोगी है।

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

आपके साथ बढ़ते रहना

इस बिंदु पर, आपके पास मजबूत स्क्रिप्ट का निर्माण शुरू करने के लिए अधिकांश कौशल हैं। चाहे आपके होम रिग को स्वचालित करना हो या काम पर समय की बचत करना हो, लूप आपकी स्क्रिप्ट को और अधिक करने में मदद करते हैं। इन लूप्स को एरर हैंडलिंग के साथ मिलाने से आपकी स्क्रिप्टिंग बुनियादी बातों से आगे निकल जाती है। यह अधिक उन्नत भाषाओं के द्वार खोलता है।

लूप का उपयोग करके आपके द्वारा बनाई गई चतुर पावरशेल स्क्रिप्ट क्या है? इसे हमारे साथ टिप्पणियों में साझा करें।

साझा करना साझा करना कलरव ईमेल डिस्क स्थान खाली करने के लिए इन विंडोज़ फ़ाइलों और फ़ोल्डरों को हटाएं

अपने Windows कंप्यूटर पर डिस्क स्थान साफ़ करने की आवश्यकता है? यहां विंडोज़ फ़ाइलें और फ़ोल्डर्स हैं जिन्हें डिस्क स्थान खाली करने के लिए सुरक्षित रूप से हटाया जा सकता है।

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • पावरशेल
  • स्क्रिप्टिंग
लेखक के बारे में माइकल मैककोनेल(44 लेख प्रकाशित)

माइकल ने मैक का उपयोग नहीं किया था जब वे बर्बाद हो गए थे, लेकिन वह एप्पलस्क्रिप्ट में कोड कर सकते हैं। उनके पास कंप्यूटर विज्ञान और अंग्रेजी में डिग्री है; वह कुछ समय से Mac, iOS और वीडियो गेम के बारे में लिख रहा है; और वह एक दशक से भी अधिक समय से आईटी बंदर रहा है, जो स्क्रिप्टिंग और वर्चुअलाइजेशन में विशेषज्ञता रखता है।

ईमेल आईपी पता कैसे खोजें
माइकल मैककोनेल की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें