PowerShell स्क्रिप्ट्स के साथ काम करने के लिए विंडोज को कॉन्फ़िगर कैसे करें आसानी से

विषयसूची:

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

कैसे और क्यों Windows & PowerShell स्क्रिप्ट निष्पादन को रोकता है।

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

Get-ChildItem '$env:SystemDrive' -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

उपरोक्त आदेश नहीं चलाओ!

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

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

  • PowerShell डिफ़ॉल्ट रूप से बाहरी स्क्रिप्ट निष्पादन की अनुमति नहीं देता है। निष्पादन PowerShell में नीति सेटिंग Windows के सभी संस्करणों में डिफ़ॉल्ट रूप से बाहरी स्क्रिप्ट के निष्पादन को रोकती है। कुछ विंडोज संस्करणों में, डिफ़ॉल्ट स्क्रिप्ट निष्पादन की अनुमति नहीं देता है। हमने आपको विंडोज 7 पर पावरशेल स्क्रिप्ट्स के निष्पादन की अनुमति देने के तरीके में इस सेटिंग को कैसे बदला है, लेकिन हम इसे यहां कुछ स्तरों पर भी कवर करेंगे।
  • PowerShell डिफ़ॉल्ट रूप से.PS1 फ़ाइल एक्सटेंशन से संबद्ध नहीं है। हमने शुरुआत में इसे हमारे पावरशेल गीक स्कूल श्रृंखला में लाया। विंडोज़ PowerShell कमांड दुभाषिया को भेजने के बजाय, नोटपैड में उन्हें खोलने के लिए.PS1 फ़ाइलों के लिए डिफ़ॉल्ट कार्रवाई सेट करता है। यह केवल दुर्भावनापूर्ण स्क्रिप्ट के आकस्मिक निष्पादन को रोकने के लिए है जब वे बस डबल-क्लिक किए जाते हैं।
  • कुछ PowerShell स्क्रिप्ट व्यवस्थापक अनुमतियों के बिना काम नहीं करेंगे। यहां तक कि एक प्रशासक-स्तरीय खाते के साथ भी चल रहा है, आपको अभी भी कुछ कार्य करने के लिए उपयोगकर्ता खाता नियंत्रण (यूएसी) से गुजरना होगा। कमांड लाइन टूल्स के लिए, यह कम से कम कहने के लिए थोड़ा बोझिल हो सकता है। हम यूएसी को अक्षम नहीं करना चाहते हैं, लेकिन यह अभी भी अच्छा है जब हम इसे सुलझाने में थोड़ा आसान बना सकते हैं।

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

.PS1 फ़ाइल एसोसिएशन बदलना।

पहला, और शायद सबसे महत्वपूर्ण, आस-पास होने की परेशानी.PS1 फ़ाइलों के लिए डिफ़ॉल्ट एसोसिएशन है। PowerShell.exe के अलावा इन फ़ाइलों को किसी अन्य चीज़ से संबद्ध करना अवांछनीय स्क्रिप्ट के आकस्मिक निष्पादन को रोकने के लिए समझ में आता है। लेकिन, इस बात पर विचार करते हुए कि पावरशेल एक एकीकृत स्क्रिप्टिंग पर्यावरण (आईएसई) के साथ आता है जिसे विशेष रूप से पावरशेल स्क्रिप्ट संपादित करने के लिए डिज़ाइन किया गया है, हम डिफ़ॉल्ट रूप से नोटपैड में.PS1 फ़ाइलों को क्यों खोलना चाहते हैं? यहां तक कि यदि आप डबल-क्लिक-टू-रन कार्यक्षमता को सक्षम करने के लिए पूरी तरह से स्विच करने के लिए तैयार नहीं हैं, तो आप शायद इन सेटिंग्स को ट्विक करना चाहेंगे।

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

रजिस्ट्री सेटिंग्स को नियंत्रित करता है कि PowerShell स्क्रिप्ट कैसे खोले जाते हैं, निम्न स्थान पर संग्रहीत होते हैं:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

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

शैल कुंजी का विस्तार करें, और आप तीन उप-कुंजी देखेंगे। इनमें से प्रत्येक एक क्रिया का प्रतिनिधित्व करता है जो आप कर सकते हैं जो PowerShell स्क्रिप्ट के लिए विशिष्ट है।

आप मूल्यों का पता लगाने के लिए प्रत्येक कुंजी का विस्तार कर सकते हैं, लेकिन वे मूल रूप से निम्नलिखित डिफ़ॉल्टों के बराबर हैं:
आप मूल्यों का पता लगाने के लिए प्रत्येक कुंजी का विस्तार कर सकते हैं, लेकिन वे मूल रूप से निम्नलिखित डिफ़ॉल्टों के बराबर हैं:
  • 0 - PowerShell के साथ चलाएं। "PowerShell के साथ चलाएं" वास्तव में PowerShell स्क्रिप्ट के संदर्भ मेनू में पहले से ही एक विकल्प का नाम है। अन्य लोगों की तरह कुंजी नाम का उपयोग करने के बजाय पाठ को किसी अन्य स्थान से खींचा जाता है। और यह अभी भी डिफ़ॉल्ट डबल-क्लिक कार्रवाई नहीं है।
  • संपादित करें - पावरशेल आईएसई में खोलें। यह नोटपैड की तुलना में अधिक समझ में आता है, लेकिन आपको डिफ़ॉल्ट रूप से इसे करने के लिए.PS1 फ़ाइल पर राइट-क्लिक करना होगा।
  • ओपन - नोटपैड में खोलें। ध्यान दें कि यह कुंजी नाम शेल कुंजी के "(डिफ़ॉल्ट)" मान में संग्रहीत स्ट्रिंग भी है। इसका अर्थ यह है कि फ़ाइल को डबल-क्लिक करने से इसे "ओपन" किया जाएगा, और यह क्रिया सामान्यतः नोटपैड का उपयोग करने के लिए सेट की जाती है।

यदि आप पहले से उपलब्ध प्री-बिल्ट कमांड स्ट्रिंग्स के साथ चिपकना चाहते हैं, तो आप उस कुंजी के नाम से मेल खाने के लिए शैल कुंजी में "(डिफ़ॉल्ट)" मान बदल सकते हैं जो आप जो डबल-क्लिक करना चाहते हैं उससे मेल खाते हैं। यह आसानी से रेजीडिट के भीतर से किया जा सकता है, या आप हमारे पुन: प्रयोज्य स्क्रिप्ट को शुरू करने के लिए PowerShell (प्लस एक छोटा PSDrive tweak) के साथ रजिस्ट्री की खोज करने पर हमारे ट्यूटोरियल से सीखे गए पाठों का उपयोग कर सकते हैं जो आपके सिस्टम को आपके लिए कॉन्फ़िगर कर सकते हैं। नीचे दिए गए आदेशों को एक उन्नत PowerShell सत्र से चलाया जाना चाहिए, जैसे कि चल रहे सीएमडी को प्रशासक के रूप में।

सबसे पहले, आप HKEY_CLASSES_ROOT के लिए एक PSDrive कॉन्फ़िगर करना चाहते हैं क्योंकि यह डिफ़ॉल्ट रूप से सेट नहीं है। इसके लिए आदेश है:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

अब आप नियमित रूप से HKCU और HKLM PSDrives में जैसे ही HKEY_CLASSES_ROOT में रजिस्ट्री कुंजियों और मानों को नेविगेट और संपादित कर सकते हैं।

PowerShell स्क्रिप्ट को सीधे लॉन्च करने के लिए डबल-क्लिक कॉन्फ़िगर करने के लिए:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 0

PowerShell ISE में PowerShell स्क्रिप्ट खोलने के लिए डबल-क्लिक कॉन्फ़िगर करने के लिए:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Edit'

डिफ़ॉल्ट मान को पुनर्स्थापित करने के लिए (नोटपैड में पावरशेल स्क्रिप्ट खोलने के लिए डबल-क्लिक सेट करें):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Open'

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

PowerShell निष्पादन नीति सेटिंग बदलना।

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

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

जैसा कि अपरिभाषित विवरण के अनुसार सुझाव दिया गया है, उपरोक्त नीतियों को कई या अधिक स्कोप में सेट किया जा सकता है। आप सभी स्कोप और उनके वर्तमान कॉन्फ़िगरेशन को देखने के लिए, लिस्ट पैरामीटर के साथ Get-ExecutionPolicy का उपयोग कर सकते हैं।

स्कॉप्स को प्राथमिकता क्रम में सूचीबद्ध किया गया है, जिसमें शीर्ष परिभाषित क्षेत्र सभी अन्य लोगों को ओवरराइड कर रहा है। यदि कोई नीति परिभाषित नहीं की जाती है, तो सिस्टम अपनी डिफ़ॉल्ट सेटिंग पर वापस आ जाता है (ज्यादातर मामलों में, यह प्रतिबंधित है)।
स्कॉप्स को प्राथमिकता क्रम में सूचीबद्ध किया गया है, जिसमें शीर्ष परिभाषित क्षेत्र सभी अन्य लोगों को ओवरराइड कर रहा है। यदि कोई नीति परिभाषित नहीं की जाती है, तो सिस्टम अपनी डिफ़ॉल्ट सेटिंग पर वापस आ जाता है (ज्यादातर मामलों में, यह प्रतिबंधित है)।
  • MachinePolicy कंप्यूटर स्तर पर प्रभाव में समूह नीति का प्रतिनिधित्व करता है। यह आमतौर पर केवल एक डोमेन में लागू होता है, लेकिन स्थानीय रूप से भी किया जा सकता है।
  • UserPolicy उपयोगकर्ता पर प्रभाव में समूह नीति का प्रतिनिधित्व करता है। यह आमतौर पर केवल एंटरप्राइज़ वातावरण में उपयोग किया जाता है।
  • प्रक्रिया PowerShell के इस उदाहरण के लिए विशिष्ट एक दायरा है। इस दायरे में नीति में परिवर्तन अन्य चल रहे पावरशेल प्रक्रियाओं को प्रभावित नहीं करेंगे, और इस सत्र समाप्त होने के बाद अप्रभावी होगा। यह PowerShell लॉन्च होने पर -ExecutionPolicy पैरामीटर द्वारा कॉन्फ़िगर किया जा सकता है, या इसे सत्र के भीतर से उचित सेट-निष्पादन नीति सिंटैक्स के साथ सेट किया जा सकता है।
  • CurrentUser एक ऐसा दायरा है जो स्थानीय रजिस्ट्री में कॉन्फ़िगर किया गया है और PowerShell लॉन्च करने के लिए उपयोग किए गए उपयोगकर्ता खाते पर लागू होता है। इस दायरे को सेट-एक्जिक्यूशन पॉलिसी के साथ संशोधित किया जा सकता है।
  • स्थानीयमाचिन स्थानीय रजिस्ट्री में कॉन्फ़िगर किया गया है और सिस्टम पर सभी उपयोगकर्ताओं को लागू किया गया है। यह डिफ़ॉल्ट दायरा है जो सेट-एक्जिक्यूशन पॉलिसी-स्कोप पैरामीटर के बिना चलाया जाता है। चूंकि यह सिस्टम पर सभी उपयोगकर्ताओं पर लागू होता है, इसे केवल एक उन्नत सत्र से बदला जा सकता है।

चूंकि यह आलेख मुख्य रूप से प्रयोज्यता की सुविधा के लिए सुरक्षा के आसपास होने के बारे में है, इसलिए हम केवल निम्न तीन क्षेत्रों के बारे में चिंतित हैं। MachinePolicy और UserPolicy सेटिंग्स केवल तभी उपयोगी होती हैं जब आप एक प्रतिबंधित नीति को लागू करना चाहते हैं जो इतनी आसानी से बाईपास न हो। प्रक्रिया स्तर या नीचे हमारे परिवर्तनों को ध्यान में रखते हुए, हम किसी भी समय किसी भी स्थिति के लिए उपयुक्त नीति सेटिंग का उपयोग आसानी से कर सकते हैं।

सुरक्षा और प्रयोज्यता के बीच कुछ संतुलन बनाए रखने के लिए, स्क्रीनशॉट में दिखाया गया नीति शायद सबसे अच्छा है। प्रतिबंधित करने के लिए LocalMachine नीति को सेट करना आम तौर पर आपके अलावा किसी अन्य व्यक्ति द्वारा चल रही स्क्रिप्ट को रोकता है। बेशक, यह उन उपयोगकर्ताओं द्वारा छोड़ा जा सकता है जो जानते हैं कि वे बिना किसी प्रयास के क्या कर रहे हैं। लेकिन इसे किसी भी गैर-तकनीकी-समझदार उपयोगकर्ताओं को गलती से PowerShell में कुछ विनाशकारी ट्रिगर करने से रोकना चाहिए। CurrentUser (i.e.: you) को अनियंत्रित के रूप में सेट करने के बाद आप कमांड लाइन से स्क्रिप्ट को मैन्युअल रूप से निष्पादित करने की अनुमति देते हैं, लेकिन इंटरनेट से डाउनलोड की गई स्क्रिप्ट के लिए सावधानी बरतने की अनुमति देता है। प्रोसेस स्तर पर रिमोटसाइंड सेटिंग को PowerShell.exe या (जैसा कि हम नीचे करेंगे) रजिस्ट्री मानों में शॉर्टकट में किया जाना चाहिए जो PowerShell स्क्रिप्ट के व्यवहार को नियंत्रित करता है। यह बाहरी स्रोतों से (संभावित रूप से दुर्भावनापूर्ण) स्क्रिप्ट के अनजाने निष्पादन के खिलाफ एक मजबूत बाधा डालने के दौरान, आपके द्वारा लिखी गई किसी भी स्क्रिप्ट के लिए आसान डबल-क्लिक-टू-रन कार्यक्षमता की अनुमति देगा। हम इसे यहां करना चाहते हैं क्योंकि आमतौर पर इसे एक इंटरैक्टिव सत्र से मैन्युअल रूप से कॉल करने के लिए गलती से एक स्क्रिप्ट को डबल-क्लिक करना अधिक आसान होता है।

ऊपर दिए गए स्क्रीनशॉट में CurrentUser और LocalMachine नीतियों को सेट करने के लिए, निम्न PowerShell सत्र से निम्न आदेश चलाएं:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

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

Get-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand | Select-Object '(Default)'

आपकी डिफ़ॉल्ट कॉन्फ़िगरेशन शायद निम्न दो तारों में से एक होगी, या कुछ समान समान है:

(PowerShell 2.0 के साथ विंडोज 7 एसपी 1 एक्स 64 पर देखा गया)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-file' '%1'

(पावरशेल 4.0 के साथ विंडोज 8.1 x64 पर देखा गया)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' 'if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1''

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

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

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

यदि आप चाहें तो आप PowerShell के भीतर से सेटिंग भी बदल सकते हैं। HKCR PSDrive मैप किए गए, एक उन्नत सत्र से ऐसा करने के लिए याद रखें।
यदि आप चाहें तो आप PowerShell के भीतर से सेटिंग भी बदल सकते हैं। HKCR PSDrive मैप किए गए, एक उन्नत सत्र से ऐसा करने के लिए याद रखें।

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

व्यवस्थापक के रूप में PowerShell स्क्रिप्ट चलाएं।

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

Regedit में ऐसा करने के लिए, शैल कुंजी में वापस जाएं, यहां:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

वहां, एक नई उप-कुंजी बनाएं। इसे कॉल करें "पावरशेल (व्यवस्थापक) के साथ चलाएं"। इसके नीचे, "कमांड" नामक एक और उप-कुंजी बनाएं।फिर, कमांड के तहत "(डिफ़ॉल्ट)" मान सेट करें:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

PowerShell में ऐसा करने के लिए वास्तव में इस समय तीन पंक्तियों की आवश्यकता होगी। प्रत्येक नई कुंजी के लिए एक, और एक कमांड के लिए "(डिफ़ॉल्ट)" मान सेट करने के लिए। ऊंचाई और एचकेसीआर मानचित्रण को मत भूलना।
PowerShell में ऐसा करने के लिए वास्तव में इस समय तीन पंक्तियों की आवश्यकता होगी। प्रत्येक नई कुंजी के लिए एक, और एक कमांड के लिए "(डिफ़ॉल्ट)" मान सेट करने के लिए। ऊंचाई और एचकेसीआर मानचित्रण को मत भूलना।

New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)' New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

साथ ही, PowerShell और रजिस्ट्री में जा रहे वास्तविक मूल्य के माध्यम से होने वाली स्ट्रिंग के बीच अंतरों पर सावधानीपूर्वक ध्यान दें। विशेष रूप से, हमें कमांड पार्सिंग में त्रुटियों से बचने के लिए, एकल-कोट्स में पूरी चीज को लपेटना होगा, और आंतरिक सिंगल-कोट्स पर डबल-अप करना होगा।

अब आपके पास PowerShell स्क्रिप्ट्स के लिए एक नया संदर्भ-मेनू प्रविष्टि होना चाहिए, जिसे "PowerShell (Admin) के साथ चलाएं" कहा जाता है।

नया विकल्प लगातार दो पावरशेल उदाहरणों को जन्म देगा। पहला, दूसरे के लिए केवल एक लॉन्चर है, जो नए सत्र के लिए उन्नयन का अनुरोध करने के लिए "-Verb RunAs" पैरामीटर के साथ स्टार्ट-प्रोसेस का उपयोग करता है। वहां से, यूएसी प्रॉम्प्ट के माध्यम से क्लिक करने के बाद, आपकी स्क्रिप्ट प्रशासक विशेषाधिकारों के साथ चलने में सक्षम होना चाहिए।
नया विकल्प लगातार दो पावरशेल उदाहरणों को जन्म देगा। पहला, दूसरे के लिए केवल एक लॉन्चर है, जो नए सत्र के लिए उन्नयन का अनुरोध करने के लिए "-Verb RunAs" पैरामीटर के साथ स्टार्ट-प्रोसेस का उपयोग करता है। वहां से, यूएसी प्रॉम्प्ट के माध्यम से क्लिक करने के बाद, आपकी स्क्रिप्ट प्रशासक विशेषाधिकारों के साथ चलने में सक्षम होना चाहिए।

अंतिम समापन कार्य।

इसमें कुछ और बदलाव हैं जो जीवन को थोड़ा आसान बनाने में मदद कर सकते हैं। एक के लिए, नोटपैड फ़ंक्शन से पूरी तरह से छुटकारा पाने के बारे में कैसे? ओपन के तहत उसी स्थान पर संपादित करें (नीचे) के तहत कमांड कुंजी से "(डिफ़ॉल्ट)" मान को कॉपी करें।

'C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1'

या, आप PowerShell के इस बिट का उपयोग कर सकते हैं (पाठ्यक्रम के व्यवस्थापक और HKCR के साथ):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellOpenCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1''

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

(व्यवस्थापक पहुंच के बिना)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

(व्यवस्थापक पहुंच के साथ)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

और निश्चित रूप से, हम आपको PowerShell कमांड में भी देंगे। अंतिम अनुस्मारक: ऊंचाई और HKCR!

(गैर-प्रशासन)

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

(व्यवस्थापक)

Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-NoExit -ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

इसे एक स्पिन के लिए लेना।

इसका परीक्षण करने के लिए, हम एक स्क्रिप्ट का उपयोग करने जा रहे हैं जो हमें निष्पादन नीतियों को जगह में दिखा सकता है और स्क्रिप्ट को व्यवस्थापक अनुमतियों के साथ लॉन्च किया गया था या नहीं। स्क्रिप्ट को "MyScript.ps1" कहा जाएगा और हमारे नमूना सिस्टम पर "डी: स्क्रिप्ट लैब" में संग्रहीत किया जाएगा। संदर्भ के लिए कोड नीचे है।

if(([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {Write-Output 'Running as Administrator!'} else {Write-Output 'Running Limited!'} Get-ExecutionPolicy -List

"PowerShell के साथ चलाएं" क्रिया का उपयोग करना:

यूएसी के माध्यम से क्लिक करने के बाद "पावरशेल (व्यवस्थापक) के साथ चलाएं" क्रिया का उपयोग करना:
यूएसी के माध्यम से क्लिक करने के बाद "पावरशेल (व्यवस्थापक) के साथ चलाएं" क्रिया का उपयोग करना:
प्रोसेस स्कोप पर कार्रवाई में निष्पादन नीति का प्रदर्शन करने के लिए, हम विंडोज़ को यह सोच सकते हैं कि फ़ाइल इस पावरशेल कोड के साथ इंटरनेट से आई है:
प्रोसेस स्कोप पर कार्रवाई में निष्पादन नीति का प्रदर्शन करने के लिए, हम विंडोज़ को यह सोच सकते हैं कि फ़ाइल इस पावरशेल कोड के साथ इंटरनेट से आई है:

Add-Content -Path 'D:Script LabMyScript.ps1' -Value '[ZoneTransfer]`nZoneId=3' -Stream 'Zone.Identifier'

सौभाग्य से, हमने -NoExit सक्षम किया था। अन्यथा, वह त्रुटि बस झपकी देगी, और हम नहीं जानते!
सौभाग्य से, हमने -NoExit सक्षम किया था। अन्यथा, वह त्रुटि बस झपकी देगी, और हम नहीं जानते!

जोन। इंडेंटिफायर को इसके साथ हटाया जा सकता है:

Clear-Content -Path 'D:Script LabMyScript.ps1' -Stream 'Zone.Identifier'

उपयोगी संदर्भ:

  • एक बैच फ़ाइल से पावरशेल स्क्रिप्ट चलाना - डैनियल श्रोएडर प्रोग्रामिंग ब्लॉग
  • PowerShell में व्यवस्थापक अनुमतियों की जांच - अरे, स्क्रिप्टिंग गाय! ब्लॉग

सिफारिश की: