गीक स्कूल सीखें कि पॉवरशेल में नौकरियों का उपयोग कैसे करें
PowerShell में चार प्रकार की नौकरियां हैं - बैकग्राउंड जॉब्स, रिमोट जॉब्स, WMI जॉब्स और शेड्यूल्ड जॉब्स। हमसे जुड़ें क्योंकि हमें पता है कि वे क्या हैं और हम उनका उपयोग कैसे कर सकते हैं.
श्रृंखला के पिछले लेखों को अवश्य पढ़ें:
- PowerShell के साथ विंडोज को स्वचालित करने का तरीका जानें
- PowerShell में Cmdlets का उपयोग करना सीखना
- सीखना कैसे PowerShell में वस्तुओं का उपयोग करने के लिए
- PowerShell में लर्निंग फॉर्मेटिंग, फ़िल्टरिंग और तुलना
- PowerShell में रीमोटिंग का उपयोग करना सीखें
- कंप्यूटर की जानकारी प्राप्त करने के लिए PowerShell का उपयोग करना
- पॉवरशेल में संग्रह के साथ काम करना
और पूरे सप्ताह बाकी श्रृंखला के लिए बने रहें.
बैकग्राउंड जॉब्स
अब तक मैंने आपको PowerShell के भीतर जो कुछ भी दिखाया है, वह तुल्यकालिक है, जिसका अर्थ है कि हम शेल में कुछ टाइप करते हैं और वास्तव में तब तक बहुत कुछ नहीं कर सकते हैं जब तक कि कमांड निष्पादित न हो जाए। यह वह जगह है जहाँ बैकग्राउंड जॉब्स आते हैं। बैकग्राउंड शुरू करने के लिए, जॉब बस स्टार्ट-जॉब cmdlet के लिए स्क्रिप्ट ब्लॉक पास करता है.
प्रारंभ-नौकरी-नाम GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
अब हम शेल के भीतर जो कुछ भी करना चाहते हैं वह करने के लिए स्वतंत्र हैं जबकि वह स्क्रिप्ट ब्लॉक पृष्ठभूमि में निष्पादित होती है.
जब आप किसी नई नौकरी को छोड़ते हैं, तो PowerShell एक नया कार्य ऑब्जेक्ट बनाता है जो उस नौकरी का प्रतिनिधित्व करता है। गेट-जॉब cmdlet चलाकर आप किसी भी समय सभी नौकरियों की सूची प्राप्त कर सकते हैं.
नौकरी की वस्तुएं आपको नौकरियों की स्थिति के बारे में बताती हैं। उदाहरण के लिए, उपरोक्त स्क्रीनशॉट में हम देख सकते हैं कि हमारे पास एक बैकग्राउंडजॉब है जिसका नाम गेटफाइलिस्ट है जो अभी भी चल रहा है, लेकिन पहले से ही डेटा वापस करना शुरू कर दिया है। यदि किसी भी बिंदु पर आप तय करते हैं कि नौकरी बहुत लंबे समय से चल रही है, तो आप इसे स्टॉप-जॉब पर पाइप करके आसानी से रोक सकते हैं.
Get-Job -Name GetFileList | बंद करो-नौकरी
हालाँकि, एक बार आपने नौकरी रोक दी, जो भी डेटा प्राप्त हुआ वह उस बिंदु तक जब आपने उसे रोका था तब भी उपलब्ध है। एक गोटा है, हालांकि। PowerShell में, एक बार जब आप नौकरी के लिए परिणाम प्राप्त करते हैं, तो वे हटा दिए जाते हैं। उन्हें बने रहने के लिए, आपको प्राप्तकर्ता-नौकरी के स्विच स्विच पैरामीटर को निर्दिष्ट करना होगा.
Get-Job -Name GetFileList | प्राप्ति-नौकरी -कीप
एक बार जब आप एक नौकरी के साथ समाप्त हो जाते हैं, तो इसे हटाने के लिए सबसे अच्छा अभ्यास है। नौकरी निकालने के लिए, इसे निकालें-जॉब cmdlet पर पाइप करें.
Get-Job -Name GetFileList | निकालें-नौकरी
यह इसे उन नौकरियों की सूची से हटा देगा जो गेट-जॉब द्वारा लौटाए जाते हैं.
रिमोट जॉब्स
कुछ सबक पहले, हमने देखा कि हम इनवोक-कमांड का उपयोग करके रिमोट मशीन पर पॉवरशेल कमांड को निष्पादित करने के लिए रीमोटिंग का उपयोग कैसे कर सकते हैं, लेकिन क्या आप जानते हैं कि आप बैकग्राउंड में एक रीमोटिंग जॉब को किक करने के लिए इनवोक-कमांड का भी उपयोग कर सकते हैं? ऐसा करने के लिए, बस अपने कमांड के अंत में -AsJob पैरामीटर जोड़ें:
आह्वान-कमान -कंप्यूटरनाम फ्लैश, वाइपर -क्रेडिश्नल एडमिनिस्ट्रेटर -स्क्रिप्टब्लॉक gci -AsJob
यह एक साधारण आदेश था और अब तक क्रियान्वयन समाप्त हो जाना चाहिए ताकि हमारी नौकरियों की स्थिति पर एक नज़र डाल सकें.
हम्म, ऐसा लगता है कि यह विफल रहा। यह मुझे नौकरियों के साथ मेरे पहले गेटे पर लाता है। जब आप PowerShell में किसी भी प्रकार की नई नौकरी बनाते हैं, तो यह हर कंप्यूटर के लिए एक चाइल्ड जॉब के अलावा एक पैरेंट जॉब बनाता है, जिसके खिलाफ आप जॉब चला रहे हैं। जब आप गेट-जॉब cmdlet का उपयोग करते हैं, तो यह आपको केवल मूल नौकरियों को दिखाता है, और राज्य की संपत्ति सबसे खराब स्थिति है, जिसका अर्थ है कि भले ही कमान सौ कंप्यूटरों में से एक पर चलने में विफल हो, माता-पिता नौकरियों की स्थिति कहेंगे अनुत्तीर्ण होना। चाइल्ड जॉब्स की एक सूची देखने के लिए आपको इनक्लूडजोब पैरामीटर का उपयोग करना होगा.
यदि आप करीब से देखते हैं, तो आप देखेंगे कि नौकरी वास्तव में केवल एक कंप्यूटर पर विफल रही, जो हमें अगले गोच पर लाती है। जब आप प्रयास करते हैं और नौकरी के लिए परिणाम प्राप्त करते हैं, यदि आप माता-पिता की नौकरी का नाम या आईडी निर्दिष्ट करते हैं, तो PowerShell सभी बाल नौकरियों से डेटा वापस कर देगा। समस्या यह है कि यदि किसी बच्चे की नौकरी में कोई त्रुटि थी, तो हमें कुछ लाल पाठ के साथ छोड़ दिया जाएगा.
इसके आसपास होने के दो तरीके हैं। सबसे पहले, यदि आप जानते हैं कि आप किन कंप्यूटरों के लिए परिणाम चाहते हैं, तो आप बस Recieve -Jos cmletlet के ComputerName पैरामीटर का उपयोग कर सकते हैं.
गेट-जॉब -Id 3 | रिसीव-जॉब-कीप -कंप्यूटरनाम वाइपर
वैकल्पिक रूप से, आप इसकी नौकरी आईडी का उपयोग करके एक विशिष्ट बाल नौकरी से परिणाम प्राप्त कर सकते हैं.
गेट-जॉब -Id 3 -IncludeChildJob
गेट-जॉब -Id 5 | प्राप्ति-नौकरी -कीप
WMI नौकरियां
WMI जॉब्स रिमोट जॉब्स के समान ही हैं, गेट-WmiObject cmdlet में केवल -AsJob पैरामीटर को जोड़ने की आवश्यकता होती है.
दुर्भाग्य से, इसका मतलब है कि वे भी उसी गोचरों के अधीन हैं जिनका मैंने रिमोट जॉब्स अनुभाग में उल्लेख किया था.
अनुसूचित नौकरियां
पिछले तीन प्रकार की नौकरियों को हमने देखा, वे लगातार नहीं थे, जिसका अर्थ है कि वे केवल आपके वर्तमान सत्र में उपलब्ध हैं। मूल रूप से, इसका मतलब है कि यदि आप नौकरी से बाहर निकलते हैं और फिर एक और PowerShell कंसोल खोलते हैं और गेट-जॉब चलाते हैं, तो आप कोई नौकरी नहीं देखेंगे। हालाँकि, जिस कंसोल से आपने काम को बंद किया है, उस पर वापस आएं, आप इसकी स्थिति देख पाएंगे। यह अनुसूचित नौकरियों के विपरीत है लगातार हैं. मूल रूप से, अनुसूचित नौकरी एक स्क्रिप्ट ब्लॉक है जो एक शेड्यूल पर चलती है। अतीत में, विंडोज टास्क शेड्यूलर का उपयोग करके एक ही प्रभाव प्राप्त किया जा सकता था, जो वास्तव में हुड के नीचे हो रहा है। एक नया अनुसूचित नौकरी बनाने के लिए, हम निम्नलिखित कार्य करते हैं:
रजिस्टर-शेड्यूल्डजॉब -नाम GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
उस कमांड में अभी काफी कुछ चल रहा है, तो चलिए इसे तोड़ते हैं.
- सबसे पहले, हम अपनी अनुसूचित नौकरी को GetEventLogs का नाम देते हैं.
- फिर हम इसे बताते हैं कि जब ट्रिगर किया जाता है, तो हम चाहते हैं कि यह निर्दिष्ट स्क्रिप्ट ब्लॉक की सामग्री को चलाए, जिसे मूल रूप से सुरक्षा ईवेंट लॉग की नवीनतम 100 प्रविष्टियां मिलती हैं.
- अगला, हम एक ट्रिगर निर्दिष्ट करते हैं। चूंकि ट्रिगर पैरामीटर इनपुट के रूप में एक ट्रिगर ऑब्जेक्ट लेता है, इसलिए हमने ट्रिगर उत्पन्न करने के लिए एक पैरेंटिकल कमांड का उपयोग किया जो कि हर दिन 5PM पर बंद हो जाएगा.
- चूंकि हम ईवेंट लॉग के साथ काम कर रहे हैं, हमें एक व्यवस्थापक के रूप में चलाने की आवश्यकता है, जिसे हम एक नया शेड्यूलजोब ऑप्शन ऑब्जेक्ट बनाकर और शेड्यूल्ड जेओबीओशन पैरामीटर को पास करके निर्दिष्ट कर सकते हैं.
चूंकि यह थोड़ा अलग प्रकार का काम है, इसलिए आपको मशीन पर सभी अनुसूचित नौकरियों की सूची प्राप्त करने के लिए एक अलग कमांड का उपयोग करना होगा।.
Get-ScheduledJob
यही सब है इसके लिए.