गीक स्कूल: पॉवरशेल में संग्रह के साथ काम करना

विषयसूची:

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

श्रृंखला में पिछले लेखों को पढ़ना सुनिश्चित करें:

  • PowerShell के साथ विंडोज स्वचालित करने के लिए जानें
  • PowerShell में Cmdlets का उपयोग करना सीखना
  • PowerShell में ऑब्जेक्ट्स का उपयोग कैसे करें सीखना
  • PowerShell में स्वरूपण, फ़िल्टरिंग और तुलना करना सीखना
  • PowerShell में रिमोटिंग का उपयोग करना सीखें
  • कंप्यूटर जानकारी प्राप्त करने के लिए PowerShell का उपयोग करना

और पूरे सप्ताह श्रृंखला के बाकी हिस्सों के लिए देखते रहें।

बैच सीएमडीलेट का उपयोग करना

इससे पहले श्रृंखला में, जब हमने आपको पाइपलाइन पर पेश किया, तो हमने आपको दिखाया कि आप उन वस्तुओं को कैसे ले सकते हैं जो एक cmdlet आउटपुट करते हैं और उन्हें इस तरह कुछ का उपयोग करके किसी अन्य cmdlet में इनपुट के रूप में पास करते हैं:

Get-Process -Name notepad | Stop-Process

यह किसी भी प्रक्रिया को "नोटपैड" नाम से मार देगा। लेकिन आप शायद सोच रहे हैं कि कैसे PowerShell एक कमांड के साथ नोटपैड के हर उदाहरण को मारने में सक्षम है। जवाब स्टॉप-प्रोसेस cmdlet की मदद से निहित है।

help Stop-Process –Full

Image
Image

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

डब्ल्यूएमआई का उपयोग करना

यद्यपि डब्लूएमआई माइक्रोसॉफ्ट मुख्यालय से जहाज के लिए प्रौद्योगिकी का सबसे अच्छा टुकड़ा नहीं है, लेकिन वस्तुओं के संग्रह के साथ काम करने के तरीके की सूची में यह दूसरे स्थान पर आता है। हम आसानी से Win32_Process कक्षा से चल रही प्रक्रियाओं की एक सूची प्राप्त कर सकते हैं:

Get-WmiObject –Class Win32_Process

चूंकि डब्लूएमआई क्वेरी अपनी तरह की ऑब्जेक्ट लौटाती है, इसलिए आपको उस प्रक्रिया को देखना होगा जो प्रक्रिया को रोक सकता है, इसलिए पाइप को गेट-सदस्य प्राप्त करने दें।
चूंकि डब्लूएमआई क्वेरी अपनी तरह की ऑब्जेक्ट लौटाती है, इसलिए आपको उस प्रक्रिया को देखना होगा जो प्रक्रिया को रोक सकता है, इसलिए पाइप को गेट-सदस्य प्राप्त करने दें।

Get-WmiObject –Class Win32_Process | Get-Member

Image
Image

ऐसा लगता है कि बंद करने की सबसे नज़दीकी चीज समाप्त प्रक्रिया है, इसलिए यह एक होना चाहिए। WMI ऑब्जेक्ट पर कोई विधि कॉल करने के लिए, आप इसे केवल Invoke-WmiMethod पर पाइप करें और विधि का नाम निर्दिष्ट करें।

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

बढ़िया, यह चाल है। जब भी आपको डब्लूएमआई में 0 का रिटर्न वैल्यू मिलता है, तो बस याद रखें कि आदेश सफलतापूर्वक निष्पादित किया गया है।
बढ़िया, यह चाल है। जब भी आपको डब्लूएमआई में 0 का रिटर्न वैल्यू मिलता है, तो बस याद रखें कि आदेश सफलतापूर्वक निष्पादित किया गया है।

गणना

अन्य दो विधियों को विफल करना, यदि आपको वस्तुओं के समूह में कुछ करना है तो आप संपूर्ण वस्तु का आकलन कर सकते हैं और प्रत्येक व्यक्तिगत वस्तु पर कार्य कर सकते हैं। सबसे पहले आपको एक विधि को रोकने के लिए उपयोग की जाने वाली विधि को ढूंढना होगा।

Get-Process | Get-Member -MemberType Method

बिल्कुल सही, ऐसा लगता है कि हम किल विधि का उपयोग कर सकते हैं और फिर उन सभी को मारने के लिए ForEach-Object में पाइप कर सकते हैं।
बिल्कुल सही, ऐसा लगता है कि हम किल विधि का उपयोग कर सकते हैं और फिर उन सभी को मारने के लिए ForEach-Object में पाइप कर सकते हैं।

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

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

सारांश

विकल्प एक

Get-Process -Name notepad | Stop-Process

विकल्प दो

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

चॉइस तीन

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

इस समय लोगों के लिए यह सब कुछ है, अगले पावरशेल मज़े के लिए आपको अगले सप्ताह देखें।

सिफारिश की: