PowerShell लिपियों के साथ काम करने के लिए विंडोज को कैसे कॉन्फ़िगर करें अधिक आसानी से
विंडोज और पावरशेल में अंतर्निहित सुरक्षा विशेषताएं और डिफ़ॉल्ट कॉन्फ़िगरेशन हैं जो अंत उपयोगकर्ताओं को उनकी दैनिक गतिविधियों के दौरान गलती से स्क्रिप्ट लॉन्च करने से रोकने के लिए हैं। हालाँकि, यदि आपकी दैनिक गतिविधियों में नियमित रूप से लेखन और अपनी पॉवरशेल स्क्रिप्ट को चलाना शामिल है, तो यह एक लाभ से अधिक उपद्रव हो सकता है। यहां, हम आपको दिखाएंगे कि सुरक्षा पर पूरी तरह से समझौता किए बिना इन सुविधाओं के आसपास कैसे काम करें.
कैसे और क्यों Windows और PowerShell स्क्रिप्ट निष्पादन को रोकते हैं.
PowerShell प्रभावी रूप से कमांड शेल और स्क्रिप्टिंग भाषा है जिसका उद्देश्य विंडोज सिस्टम पर CMD और बैच स्क्रिप्ट को बदलना है। जैसे, एक PowerShell स्क्रिप्ट बहुत कुछ कॉन्फ़िगर किया जा सकता है जो आप कमांड लाइन से मैन्युअल रूप से कर सकते हैं। यह आपके सिस्टम पर व्यावहारिक रूप से किसी भी बदलाव को संभव बनाता है, आपके उपयोगकर्ता खाते पर प्रतिबंधों तक। इसलिए, यदि आप पॉवरशेल स्क्रिप्ट को सिर्फ डबल-क्लिक कर सकते हैं और इसे पूर्ण प्रशासक विशेषाधिकारों के साथ चला सकते हैं, तो इस तरह एक साधारण एक-लाइनर वास्तव में आपके दिन को बर्बाद कर सकता है:
Get-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction चुपचाप बंद करो | निकालें-आइटम -Force -Recurse -ErrorAction चुपचाप बंद करो
उपरोक्त आदेश न चलाएं!
वह बस फ़ाइल सिस्टम के माध्यम से जाता है और जो कुछ भी कर सकता है उसे हटा देता है। दिलचस्प बात यह है कि यह सिस्टम को निष्क्रिय नहीं कर सकता है जितना जल्दी आप सोच सकते हैं - यहां तक कि जब एक ऊंचा सत्र से चलाया जाता है। लेकिन अगर कोई आपको इस स्क्रिप्ट को चलाने के बाद कॉल करता है, क्योंकि वे अचानक अपनी फाइलें नहीं ढूंढ सकते हैं या कुछ प्रोग्राम नहीं चला सकते हैं, तो "इसे बंद करें और फिर से चालू करें" शायद उन्हें विंडोज स्टार्टअप रिपेयर में ले जाएगा जहां वे वहां जाने वाले हैं। समस्या को ठीक करने के लिए कुछ भी नहीं किया जा सकता है। इससे बुरी बात यह हो सकती है कि एक स्क्रिप्ट मिलने के बजाय, जो कि उनके फाइल सिस्टम को चकरा देती है, हो सकता है कि आपके दोस्त को एक ऐसा चाल चल रहा हो जो डाउनलोड और कीलॉगर या रिमोट एक्सेस सर्विस स्थापित करता हो। फिर, स्टार्टअप रिपेयर के बारे में आपसे सवाल पूछने के बजाय, वे पुलिस से बैंक धोखाधड़ी के बारे में कुछ सवाल पूछ सकते हैं!
अब तक यह स्पष्ट होना चाहिए कि अंत-उपयोगकर्ताओं को खुद से बचाने के लिए कुछ चीजों की आवश्यकता क्यों है, इसलिए बोलने के लिए। लेकिन बिजली उपयोगकर्ता, सिस्टम प्रशासक, और अन्य geeks आम तौर पर (हालांकि अपवाद हैं) इन खतरों से थोड़ा अधिक सावधान हैं, यह जानने के लिए कि उन्हें कैसे स्पॉट करना और आसानी से बचना है, और बस अपना काम पूरा करने के साथ प्राप्त करना चाहते हैं। ऐसा करने के लिए, उन्हें कुछ सड़क ब्लॉकों के आसपास या तो अक्षम करना होगा या काम करना होगा:
- PowerShell डिफ़ॉल्ट रूप से बाह्य स्क्रिप्ट निष्पादन की अनुमति नहीं देता है.
PowerShell में ExecutionPolicy सेटिंग विंडोज के सभी संस्करणों में डिफ़ॉल्ट रूप से बाहरी स्क्रिप्ट के निष्पादन को रोकती है। कुछ विंडोज संस्करणों में, डिफ़ॉल्ट स्क्रिप्ट निष्पादन को बिल्कुल भी अनुमति नहीं देता है। हमने आपको दिखाया कि विंडोज 7 पर PowerShell लिपियों के निष्पादन की अनुमति देने के लिए इस सेटिंग को कैसे बदलना है, लेकिन हम इसे यहां कुछ स्तरों पर भी कवर करेंगे. - PowerShell डिफ़ॉल्ट रूप से .PS1 फ़ाइल एक्सटेंशन से संबद्ध नहीं है.
हमने इसे अपनी पॉवरशेल गीक स्कूल श्रृंखला में शुरू में लाया। Windows उन्हें PowerShell कमांड दुभाषिया में भेजने के बजाय, Notepad में खोलने के लिए .PS1 फ़ाइलों के लिए डिफ़ॉल्ट क्रिया सेट करता है। यह सीधे दुर्भावनापूर्ण स्क्रिप्ट के आकस्मिक निष्पादन को रोकने के लिए है जब वे बस डबल-क्लिक किए जाते हैं. - कुछ PowerShell स्क्रिप्ट्स प्रशासक की अनुमति के बिना काम नहीं करेंगी.
यहां तक कि एक प्रशासक-स्तरीय खाते के साथ चलने पर, आपको अभी भी कुछ क्रियाओं को करने के लिए उपयोगकर्ता खाता नियंत्रण (UAC) के माध्यम से प्राप्त करना होगा। कमांड-लाइन टूल के लिए, यह कम से कम कहने के लिए थोड़ा बोझिल हो सकता है। हम UAC को अक्षम नहीं करना चाहते हैं, लेकिन यह तब भी अच्छा है जब हम इससे निपटना थोड़ा आसान बना सकते हैं.
पॉवरशेल स्क्रिप्ट को रन करने के लिए आसान बनाने के लिए कैसे एक बैच फ़ाइल का उपयोग करने के लिए इन समान मुद्दों को लाया जाता है, जहां हम आपको बैच फ़ाइल लिखने के माध्यम से अस्थायी रूप से उनके चारों ओर पाने के लिए चलते हैं। अब, हम आपको यह दिखाने जा रहे हैं कि अपने सिस्टम को अधिक दीर्घकालिक समाधान के साथ कैसे सेट करें। इस बात को ध्यान में रखें कि आपको आम तौर पर उन प्रणालियों पर इन परिवर्तनों को नहीं करना चाहिए जो आपके द्वारा विशेष रूप से उपयोग नहीं किए जाते हैं - अन्यथा, आप अन्य उपयोगकर्ताओं को उन्हीं समस्याओं में चलने के उच्च जोखिम में डाल रहे हैं जिन्हें रोकने के लिए इन सुविधाओं का इरादा है।.
.PS1 फ़ाइल एसोसिएशन बदलना.
पहला, और शायद सबसे महत्वपूर्ण, लगभग पाने के लिए गुस्सा .PS1 फ़ाइलों के लिए डिफ़ॉल्ट एसोसिएशन है। PowerShell.exe के अलावा इन फ़ाइलों को किसी भी चीज़ में जोड़ने से अवांछनीय स्क्रिप्ट के आकस्मिक निष्पादन को रोकने के लिए समझ में आता है। लेकिन, यह देखते हुए कि PowerShell एक एकीकृत स्क्रिप्टिंग पर्यावरण (ISE) के साथ आता है, जो विशेष रूप से PowerShell स्क्रिप्ट को संपादित करने के लिए डिज़ाइन किया गया है, हम डिफ़ॉल्ट रूप से नोटपैड में .PS1 फाइलें क्यों खोलना चाहेंगे? यहां तक कि अगर आप डबल-क्लिक-टू-रन कार्यक्षमता को सक्षम करने के लिए पूरी तरह से स्विच करने के लिए तैयार नहीं हैं, तो आप शायद इन सेटिंग्स को ट्विस्ट करना चाहेंगे.
आप डिफ़ॉल्ट प्रोग्राम कंट्रोल पैनल के साथ जो भी प्रोग्राम चाहते हैं, उसके लिए .PS1 फ़ाइल एसोसिएशन को बदल सकते हैं, लेकिन सीधे रजिस्ट्री में खोदने से आपको फ़ाइलों को खोलने के तरीके पर थोड़ा अधिक नियंत्रण मिलेगा। यह आपको अतिरिक्त विकल्प सेट करने या बदलने देता है जो .PS1 फ़ाइलों के लिए संदर्भ मेनू में उपलब्ध हैं। ऐसा करने से पहले रजिस्ट्री का बैकअप बनाना न भूलें!
PowerShell स्क्रिप्ट को खोलने के तरीके को नियंत्रित करने वाली रजिस्ट्री सेटिंग्स को निम्न स्थान पर संग्रहीत किया जाता है:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ शैल
इन सेटिंग को बदलने से पहले, हमें उन्हें बदलने के लिए, Reedit के साथ उस कुंजी और उसके उप-कुंजी पर एक नज़र डालनी चाहिए। शेल कुंजी का केवल एक मान होना चाहिए, "डिफ़ॉल्ट ("), जो "ओपन" पर सेट है। यह फ़ाइल को डबल-क्लिक करने के लिए डिफ़ॉल्ट कार्रवाई का एक संकेतक है, जिसे हम उप-कुंजियों में देखेंगे.
शेल कुंजी का विस्तार करें, और आप तीन उप-कुंजी देखेंगे। इनमें से प्रत्येक एक क्रिया का प्रतिनिधित्व करता है जिसे आप कर सकते हैं जो पॉवरशेल स्क्रिप्ट के लिए विशिष्ट है.
आप मानों का पता लगाने के लिए प्रत्येक कुंजी का विस्तार कर सकते हैं, लेकिन वे मूल रूप से निम्नलिखित चूक के बराबर हैं:
- 0 - PowerShell के साथ चलाएँ। "रन विद पॉवरशेल" वास्तव में पॉवरशेल स्क्रिप्ट के लिए संदर्भ मेनू में पहले से ही एक विकल्प का नाम है। पाठ को अन्य लोगों की तरह कुंजी नाम का उपयोग करने के बजाय केवल दूसरे स्थान से खींचा जाता है। और यह अभी भी डिफ़ॉल्ट डबल-क्लिक क्रिया नहीं है.
- संपादित करें - PowerShell ISE में खोलें। यह नोटपैड की तुलना में बहुत अधिक समझ में आता है, लेकिन आपको अभी भी डिफ़ॉल्ट रूप से इसे करने के लिए .PS1 फ़ाइल को राइट-क्लिक करना होगा.
- ओपन - नोटपैड में खोलें। ध्यान दें कि यह कुंजी नाम शेल कुंजी के "(डिफ़ॉल्ट)" मान में संग्रहीत स्ट्रिंग भी है। इसका मतलब यह है कि फ़ाइल को डबल-क्लिक करने से यह "ओपन" हो जाएगा, और यह क्रिया सामान्य रूप से नोटपैड का उपयोग करने के लिए सेट है.
यदि आप पहले से उपलब्ध पूर्व-निर्मित कमांड स्ट्रिंग्स के साथ रहना चाहते हैं, तो आप शेल में कुंजी के नाम से मिलान करने के लिए "डिफ़ॉल्ट (") "मान" को बदल सकते हैं, जो कि आप एक डबल-क्लिक करना चाहते हैं। यह आसानी से Regedit के भीतर से किया जा सकता है, या आप पुन: प्रयोज्य स्क्रिप्ट का निर्माण शुरू करने के लिए PowerShell (साथ में एक छोटा PSDrive tweak) के साथ रजिस्ट्री की खोज पर हमारे ट्यूटोरियल से सीखे गए पाठों का उपयोग कर सकते हैं। प्रशासक के रूप में CMD चलाने के समान, नीचे दिए गए आदेशों को एक उन्नत PowerShell सत्र से चलाया जाना चाहिए.
पहले, आप HKEY_CLASSES_ROOT के लिए एक PSDrive कॉन्फ़िगर करना चाहते हैं क्योंकि यह डिफ़ॉल्ट रूप से सेट नहीं किया गया है। इसके लिए कमांड है:
नई-PSDrive HKCR रजिस्ट्री HKEY_CLASSES_ROOT
अब आप HKEY_CLASSES_ROOT में रजिस्ट्री कुंजी और मानों को नेविगेट और संपादित कर सकते हैं जैसे आप नियमित HKCU और HKLM PSDrives में करेंगे.
सीधे PowerShell स्क्रिप्ट लॉन्च करने के लिए डबल-क्लिक करने के लिए कॉन्फ़िगर करें:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(डिफ़ॉल्ट)' 0
PowerShell ISE में PowerShell स्क्रिप्ट खोलने के लिए डबल-क्लिक कॉन्फ़िगर करने के लिए:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(डिफ़ॉल्ट) "संपादित करें"
डिफ़ॉल्ट मान को पुनर्स्थापित करने के लिए (नोटपैड में PowerShell स्क्रिप्ट खोलने के लिए डबल-क्लिक करें):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(डिफ़ॉल्ट) "ओपन'
बस डिफ़ॉल्ट डबल-क्लिक क्रिया को बदलने की मूल बातें हैं। हम अगले अनुभाग में एक्सप्लोरर से PowerShell में खोले जाने पर PowerShell स्क्रिप्ट को कैसे संभाला जाता है, इसे कस्टमाइज़ करने पर हम और अधिक विस्तार से देखेंगे। ध्यान रखें कि स्कोपिंग, PSDrives को सत्रों में बने रहने से रोकता है। इसलिए, आप संभवतः इस उद्देश्य के लिए आपके द्वारा बनाई गई किसी भी कॉन्फ़िगरेशन स्क्रिप्ट की शुरुआत में नई-पीएसडीआर लाइन को शामिल करना चाहते हैं, या इसे अपने पावरस्ले प्रोफ़ाइल में जोड़ सकते हैं। अन्यथा, आपको इस तरह से बदलाव करने की कोशिश करने से पहले मैन्युअल रूप से उस बिट को चलाने की आवश्यकता होगी.
PowerShell एक्ज़ीक्यूशन में परिवर्तन करना.
PowerShell का निष्पादनPolicy दुर्भावनापूर्ण स्क्रिप्ट के निष्पादन के विरुद्ध सुरक्षा की एक और परत है। इसके लिए कई विकल्प हैं, और कुछ अलग तरीके से इसे सेट किया जा सकता है। सबसे कम से कम सुरक्षित, उपलब्ध विकल्प हैं:
- प्रतिबंधित - किसी भी स्क्रिप्ट को चलाने की अनुमति नहीं है। (अधिकांश सिस्टम के लिए डिफ़ॉल्ट सेटिंग।) यह आपकी प्रोफाइल स्क्रिप्ट को चलने से भी रोकेगा.
- AllSigned - उपयोगकर्ता को संकेत दिए बिना चलाने के लिए सभी लिपियों को एक विश्वसनीय प्रकाशक द्वारा डिजिटल रूप से हस्ताक्षरित किया जाना चाहिए। प्रकाशकों द्वारा हस्ताक्षरित लिपियों को स्पष्ट रूप से अविश्वसनीय रूप से परिभाषित किया गया है, या स्क्रिप्ट को डिजिटल रूप से बिल्कुल भी हस्ताक्षरित नहीं किया जाएगा, नहीं चलेगा। PowerShell पुष्टि के लिए उपयोगकर्ता को संकेत देगा यदि कोई स्क्रिप्ट एक प्रकाशक द्वारा हस्ताक्षरित है, जिसे अभी तक विश्वसनीय या अविश्वास के रूप में परिभाषित नहीं किया गया है। यदि आपने अपनी प्रोफ़ाइल स्क्रिप्ट पर डिजिटल हस्ताक्षर नहीं किए हैं, और उस हस्ताक्षर में विश्वास स्थापित किया है, तो वह नहीं चल पाएगा। सावधान रहें जो आप पर भरोसा करते हैं, क्योंकि अगर आप गलत पर भरोसा करते हैं तो आप अभी भी दुर्भावनापूर्ण स्क्रिप्ट चला सकते हैं.
- रिमोटसाइनड - इंटरनेट से डाउनलोड की गई लिपियों के लिए, यह प्रभावी रूप से "ऑलसाइनड" के समान है। हालाँकि, स्थानीय रूप से बनाई गई या इंटरनेट के अलावा अन्य स्रोतों से आयातित लिपियों को बिना किसी पुष्टिकरण के शीघ्र चलाने की अनुमति है। यहां, आपको सावधान रहना होगा कि आप किन डिजिटल हस्ताक्षरों पर भरोसा करते हैं, लेकिन उन गैर-हस्ताक्षरित लिपियों से भी अधिक सावधान रहें जिन्हें आप चलाना चाहते हैं। यह उच्चतम सुरक्षा स्तर है जिसके तहत आप डिजिटली हस्ताक्षर करने के बिना एक काम कर सकते हैं.
- अप्रतिबंधित - सभी लिपियों को चलाने की अनुमति है, लेकिन इंटरनेट से स्क्रिप्ट के लिए एक पुष्टिकरण संकेत की आवश्यकता होगी। इस बिंदु से, यह पूरी तरह से आपके ऊपर है कि आप अविश्वसनीय स्क्रिप्ट चलाने से बचें.
- बाईपास - सब कुछ एक चेतावनी के बिना चलता है। इससे सावधान रहें.
- अपरिभाषित - वर्तमान दायरे में कोई नीति परिभाषित नहीं की गई है। इसका उपयोग निचली स्कोप (नीचे अधिक विवरण) या ओएस डिफॉल्ट्स में परिभाषित नीतियों को गिरने से रोकने के लिए किया जाता है.
जैसा कि अनिर्धारित के विवरण द्वारा सुझाया गया है, उपरोक्त नीतियां कई स्कोपों में से एक या अधिक में सेट की जा सकती हैं। आप स्कोप और उनके वर्तमान कॉन्फ़िगरेशन को देखने के लिए, -List पैरामीटर के साथ Get-ExecutionPolicy का उपयोग कर सकते हैं.
स्कोप्स को पूर्ववर्ती क्रम में सूचीबद्ध किया गया है, जिसमें अन्य सभी को पछाड़ते हुए सबसे ऊपरी परिभाषित गुंजाइश है। यदि कोई नीतियाँ परिभाषित नहीं हैं, तो सिस्टम अपनी डिफ़ॉल्ट सेटिंग पर वापस आ जाता है (ज्यादातर मामलों में, यह प्रतिबंधित है).
- MachinePolicy कंप्यूटर स्तर पर प्रभाव में एक समूह नीति का प्रतिनिधित्व करता है। यह आमतौर पर केवल एक डोमेन में लागू किया जाता है, लेकिन स्थानीय स्तर पर भी किया जा सकता है.
- UserPolicy उपयोगकर्ता पर प्रभाव में एक समूह नीति का प्रतिनिधित्व करता है। यह भी आमतौर पर केवल एंटरप्राइज़ वातावरण में उपयोग किया जाता है.
- पॉवरशेल के इस उदाहरण के लिए प्रक्रिया एक स्कोप है। इस दायरे में नीति में परिवर्तन अन्य चल रही पॉवरशेल प्रक्रियाओं को प्रभावित नहीं करेगा, और इस सत्र के समाप्त होने के बाद अप्रभावी हो जाएगा। PowerShell लॉन्च होने पर इसे -ExecutionPolicy पैरामीटर द्वारा कॉन्फ़िगर किया जा सकता है, या इसे सत्र के भीतर से उचित Set-ExecutionPolicy सिंटैक्स के साथ सेट किया जा सकता है.
- CurrentUser एक ऐसा स्कोप है जो स्थानीय रजिस्ट्री में कॉन्फ़िगर किया गया है और PowerShell लॉन्च करने के लिए उपयोग किए जाने वाले उपयोगकर्ता खाते पर लागू होता है। इस दायरे को सेट-एक्ज़ीक्यूशनपॉलिश के साथ संशोधित किया जा सकता है.
- LocalMachine स्थानीय रजिस्ट्री और सिस्टम पर सभी उपयोगकर्ताओं के लिए लागू होने वाला एक स्कोप है। यह डिफ़ॉल्ट स्कोप है जो सेट-एक्ज़ीकपशनपॉलिशिअल -Scope पैरामीटर के बिना चलाया जाता है। चूंकि यह सिस्टम के सभी उपयोगकर्ताओं पर लागू होता है, इसे केवल एक उन्नत सत्र से बदला जा सकता है.
चूंकि यह लेख मुख्य रूप से प्रयोज्य को सुविधाजनक बनाने के लिए सुरक्षा प्राप्त करने के बारे में है, हम केवल निचले तीन स्कोपों के बारे में चिंतित हैं। MachinePolicy और UserPolicy सेटिंग्स वास्तव में केवल तभी उपयोगी होती हैं, जब आप एक प्रतिबंधात्मक नीति लागू करना चाहते हैं जो कि बस बायपास न हो। प्रक्रिया स्तर या नीचे हमारे परिवर्तनों को ध्यान में रखते हुए, हम किसी भी समय किसी भी स्थिति के लिए उपयुक्त पॉलिसी सेटिंग का उपयोग कर सकते हैं.
सुरक्षा और प्रयोज्य के बीच कुछ संतुलन बनाए रखने के लिए, स्क्रीनशॉट में दिखाई गई नीति संभवतः सर्वोत्तम है। आमतौर पर प्रतिबंधित करने के लिए LocalMachine नीति सेट करना आपके अलावा किसी अन्य द्वारा स्क्रिप्ट चलाने से रोकता है। बेशक, यह उन उपयोगकर्ताओं द्वारा बाईपास किया जा सकता है जो जानते हैं कि वे बहुत प्रयास किए बिना क्या कर रहे हैं। लेकिन यह किसी भी गैर-तकनीक-प्रेमी उपयोगकर्ताओं को गलती से पावरशेल में कुछ भयावह ट्रिगर कर सकता है। करंट यूज़र (यानी: आप) के रूप में सेट अप्रतिबंधित आपको मैन्युअल रूप से कमांड लाइन से स्क्रिप्ट को निष्पादित करने की अनुमति देता है, लेकिन आप इंटरनेट से डाउनलोड की गई स्क्रिप्ट के लिए सावधानी की एक चेतावनी को बनाए रखते हैं। प्रक्रिया स्तर पर दूरस्थ सेटिंग को PowerShell.exe या (जैसा कि हम नीचे करेंगे) शॉर्टकट में PowerShell स्क्रिप्ट के व्यवहार को नियंत्रित करने वाले रजिस्ट्री मानों में करने की आवश्यकता होगी। यह आपके द्वारा लिखी गई किसी भी स्क्रिप्ट के लिए आसान डबल-क्लिक-टू-रन कार्यक्षमता की अनुमति देगा, जबकि बाहरी स्रोतों से अनजाने में निष्पादन (संभावित दुर्भावनापूर्ण) स्क्रिप्ट के खिलाफ एक मजबूत बाधा डाल सकता है। हम इसे यहाँ करना चाहते हैं क्योंकि यह गलती से स्क्रिप्ट को डबल-क्लिक करना बहुत आसान है, आमतौर पर इसे एक इंटरैक्टिव सत्र से मैन्युअल रूप से कॉल करना है.
CurrentUser और LocalMachine नीतियों को ऊपर स्क्रीनशॉट में सेट करने के लिए, एक उन्नत PowerShell सत्र से निम्न आदेश चलाएँ:
सेट-एक्ज़ीक्यूशनपॉलिश रिस्ट्रिक्टेड सेट-एक्ज़ीक्यूशन
एक्सप्लोरर से चलाई जाने वाली स्क्रिप्ट पर दूरस्थ रूप से लागू की गई नीति को लागू करने के लिए, हमें पहले देख रहे रजिस्ट्री कुंजियों में से एक के अंदर एक मूल्य बदलना होगा। यह विशेष रूप से महत्वपूर्ण है, क्योंकि आपके PowerShell या Windows संस्करण के आधार पर, डिफ़ॉल्ट कॉन्फ़िगरेशन AllSign को छोड़कर सभी ExecutionPolicy सेटिंग्स को बायपास करने के लिए हो सकता है। यह देखने के लिए कि आपके कंप्यूटर के लिए वर्तमान कॉन्फ़िगरेशन क्या है, आप इस कमांड को चला सकते हैं (सुनिश्चित करें कि HKCR PSDrive को पहले मैप किया गया है):
Get-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command | सेलेक्ट-ऑब्जेक्ट '(डिफ़ॉल्ट)'
आपका डिफ़ॉल्ट कॉन्फ़िगरेशन संभवतः निम्नलिखित दो तारों में से एक होगा, या काफी कुछ समान होगा:
(PowerShell 2.0 के साथ विंडोज 7 SP1 x64 पर देखा गया)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-file" "2%"
(PowerShell 4.0 के साथ विंडोज 8.1 x64 पर देखा गया)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-कमांड" "अगर ((प्राप्त करें -Policy) - 'AllSign') Set-ExecutionPolicy -Scope प्रक्रिया बायपास; & '% 1; ' "
पहले वाला बहुत बुरा नहीं है, क्योंकि यह सभी मौजूदा एक्ज़ीक्यूशनपॉलिशी सेटिंग्स के तहत स्क्रिप्ट निष्पादित करता है। अधिक दुर्घटना-संभावित कार्रवाई के लिए सख्त प्रतिबंध लागू करके इसे बेहतर बनाया जा सकता है, लेकिन मूल रूप से इसका उद्देश्य वैसे भी डबल-क्लिक पर ट्रिगर नहीं होना था, और डिफ़ॉल्ट नीति आमतौर पर सभी के बाद प्रतिबंधित है। दूसरा विकल्प, हालाँकि, जो भी ExecutionPolicy है, उसके पूर्ण बायपास होने की संभावना है - यहाँ तक कि प्रतिबंधित भी। चूंकि बाईपास प्रक्रिया के दायरे में लागू किया जाएगा, यह केवल उन सत्रों को प्रभावित करता है जो एक्सप्लोरर से स्क्रिप्ट चलाने पर लॉन्च किए जाते हैं। हालाँकि, इसका मतलब है कि आप उन स्क्रिप्ट को लॉन्च कर सकते हैं, जिन्हें आप अन्यथा कर सकते हैं (और चाहते हैं) कि आपकी नीति निषिद्ध है.
एक्सप्लोरर से शुरू की गई स्क्रिप्ट के लिए प्रोसेस-लेवल एक्जिक्यूशनपॉलिशी सेट करने के लिए, ऊपर दिए गए स्क्रीनशॉट के अनुरूप, आपको उसी रजिस्ट्री मान को संशोधित करना होगा जिसे हमने अभी-अभी उद्धृत किया है। आप इसे मैन्युअल रूप से रीडगिट में कर सकते हैं, इसे इसे बदलकर:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
यदि आप चाहें तो आप PowerShell के भीतर से सेटिंग भी बदल सकते हैं। एक ऊंचे सत्र से ऐसा करना याद रखें, HKCR PSDrive मैप के साथ.
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(डिफ़ॉल्ट) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe "" -ExecutionPolicy "" दूरस्थ-"" -file "" % 1 " '
व्यवस्थापक के रूप में PowerShell स्क्रिप्ट चलाएँ.
जिस तरह UAC को पूरी तरह से अक्षम करना एक बुरा विचार है, उसी तरह से ऊंचे विशेषाधिकारों के साथ स्क्रिप्ट या प्रोग्राम चलाने के लिए भी खराब सुरक्षा अभ्यास है जब तक कि आपको वास्तव में उन ऑपरेशनों को करने की आवश्यकता नहीं होती है जिनके लिए प्रशासक पहुंच की आवश्यकता होती है। इसलिए, PowerShell स्क्रिप्ट के लिए डिफ़ॉल्ट क्रिया में UAC प्रॉम्प्ट बनाने की अनुशंसा नहीं की जाती है। हालाँकि, हम एक नए संदर्भ मेनू विकल्प को जोड़ सकते हैं, जिससे हमें जरूरत पड़ने पर ऊंचे सत्रों में आसानी से स्क्रिप्ट चलाने की अनुमति मिल सके। यह सभी फ़ाइलों के संदर्भ मेनू में "नोटपैड के साथ ओपन" जोड़ने के लिए उपयोग की जाने वाली विधि के समान है - लेकिन यहां हम केवल PowerShell स्क्रिप्ट को लक्षित करने जा रहे हैं। हम पिछले लेख में उपयोग की जाने वाली कुछ तकनीकों को भी ले जा रहे हैं, जहाँ हमने अपनी पॉवरस्क्रिप्शन स्क्रिप्ट लॉन्च करने के लिए रजिस्ट्री हैक्स के बजाय बैच फ़ाइल का उपयोग किया है.
Regedit में ऐसा करने के लिए, शेल कुंजी में वापस जाएँ:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ शैल
वहां, एक नई उप-कुंजी बनाएं। इसे "PowerShell (व्यवस्थापन) के साथ चलाएं" कहें। इसके विपरीत, "कमांड" नामक एक और उप-कुंजी बनाएं। फिर, इस के लिए कमांड के तहत "(डिफ़ॉल्ट)" मान सेट करें:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-Command" "" और Start-Process PowerShell.exe -rgumentList '-ExecutionPolicy RemoteSigned -File \ "% 1" \ _Verb RunAs "
पावरशेल में ऐसा करने से वास्तव में इस समय तीन लाइनों की आवश्यकता होगी। प्रत्येक नई कुंजी के लिए एक, और एक कमांड के लिए "(डिफ़ॉल्ट)" मान सेट करने के लिए। ऊँचाई और HKCR मैपिंग को न भूलें.
नया-आइटम 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (Admin)' नया-आइटम 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (व्यवस्थापन) \ कमांड' सेट- ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (Admin) \ Command "(डिफ़ॉल्ट)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-Command" "" और प्रारंभ-प्रक्रिया PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Verb RunAs "'
इसके अलावा, PowerShell और रजिस्ट्री में जा रहे वास्तविक मूल्य के माध्यम से लगाए जाने वाले स्ट्रिंग के बीच के अंतर पर सावधानीपूर्वक ध्यान दें। विशेष रूप से, हमें पूरी चीज़ों को सिंगल-कोट्स में लपेटने के लिए मिला है, और आंतरिक सिंगल-कोट्स पर डबल-अप किया गया है, ताकि कमांड पार्सिंग में त्रुटियों से बचा जा सके.
अब आपके पास PowerShell स्क्रिप्ट के लिए एक नया संदर्भ-मेनू प्रविष्टि होना चाहिए, जिसे "PowerShell (व्यवस्थापन) के साथ चलाएँ" कहा जाता है.
नया विकल्प लगातार दो PowerShell उदाहरणों को स्पॉन करेगा। पहला सिर्फ दूसरे के लिए एक लांचर है, जो नए सत्र के लिए उन्नयन का अनुरोध करने के लिए "-Verb RunAs" पैरामीटर के साथ स्टार्ट-प्रोसेस का उपयोग करता है। UAC प्रॉम्प्ट पर क्लिक करने के बाद वहां से, आपकी स्क्रिप्ट को व्यवस्थापक विशेषाधिकारों के साथ चलाने में सक्षम होना चाहिए.
अंतिम समापन कार्य.
इसमें बस कुछ और जुड़वाँ हैं जो जीवन को थोड़ा आसान बनाने में मदद कर सकते हैं। एक के लिए, नोटपैड फ़ंक्शन से पूरी तरह से छुटकारा पाने के बारे में कैसे? खुले के नीचे एक ही स्थान पर संपादित करें (नीचे) के तहत कमांड कुंजी से "(डिफ़ॉल्ट)" मान को कॉपी करें.
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"
या, आप PowerShell के इस बिट का उपयोग कर सकते हैं (निश्चित रूप से व्यवस्थापक और HKCR के साथ):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(डिफ़ॉल्ट) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell_ise.exe ""% 1 "
एक स्क्रिप्ट पूरी हो जाने के बाद एक और मामूली झुंझलाहट कंसोल की आदत है। जब ऐसा होता है, तो हमारे पास त्रुटियों या अन्य उपयोगी जानकारी के लिए स्क्रिप्ट आउटपुट की समीक्षा करने का कोई मौका नहीं होता है। आपकी प्रत्येक स्क्रिप्ट के अंत में एक ठहराव डालकर, इस पर ध्यान दिया जा सकता है। वैकल्पिक रूप से, हम "-NoExit" पैरामीटर को शामिल करने के लिए हमारी कमांड कुंजियों के लिए "(डिफ़ॉल्ट)" मूल्यों को संशोधित कर सकते हैं। नीचे संशोधित मूल्य हैं.
(एडमिन एक्सेस के बिना)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(एडमिन एक्सेस के साथ)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe" "-Command" "" और Start-Process PowerShell.exe -rgumentList '-NoExit -ExecutionPPicy RemoteSigned -File \ "% 1 \" - - Verb RunAs "
और हां, हम आपको PowerShell कमांड में भी देंगे। अंतिम अनुस्मारक: ऊंचाई और HKCR!
(गैर-प्रशासन)
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(डिफ़ॉल्ट) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powerhell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned "" -फाइल ""% 1 "'
(व्यवस्थापक)
Set-ItemProperty 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (Admin) \ Command "(डिफ़ॉल्ट)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" और Start-Process PowerShell.exe -rgumentList "-NoExit -ExecutionPolicy RemoteSigned -File \"% 1 \ "- Verb RunAs"
इसे एक स्पिन के लिए लेना.
इसका परीक्षण करने के लिए, हम एक ऐसी स्क्रिप्ट का उपयोग करने जा रहे हैं, जो हमें ExecutionPolicy सेटिंग्स को दिखा सकती है और स्क्रिप्ट को व्यवस्थापक अनुमतियों के साथ लॉन्च किया गया था या नहीं। स्क्रिप्ट को "MyScript.ps1" कहा जाएगा और हमारे नमूना सिस्टम पर "D: \ Script लैब" में संग्रहीत किया जाएगा। संदर्भ के लिए कोड नीचे है.
if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ())। IsInRole ([Security.Principal.WindowsBuiltInRole "" Administrator ")) Write-Output’ को प्रशासक के रूप में चल रहा है! ” और! लिखें-आउटपुट ’रनिंग लिमिटेड!’ Get-ExecutionPolicy -List
"PowerShell के साथ चलाएँ" क्रिया का उपयोग करना:
यूएसी के माध्यम से क्लिक करने के बाद "रन विद पावरशेल (एडमिन)" कार्रवाई का उपयोग करना:
प्रक्रिया स्कोप में एक्ज़ीक्यूशनपॉलिशी इन एक्शन को प्रदर्शित करने के लिए, हम विंडोज को यह सोच सकते हैं कि फ़ाइल इंटरनेट से इस PowerShell कोड के साथ आए:
Add-Content -Path 'D: \ Script Lab \ MyScript.ps1' -Value "[ZoneTransfer] 'nZoneId = 3" -Stream' Zone.Identifier '
सौभाग्य से, हमारे पास -NoExit सक्षम था। अन्यथा, वह त्रुटि अभी तक झपकी ले चुकी होगी, और हमें नहीं पता होगा!
जोन.डेंटिफायर को इसके साथ हटाया जा सकता है:
क्लियर-कंटेंट -पैथ 'डी: \ स्क्रिप्ट लैब \ MyScript.ps1' -Stream 'Zone.Identifier'
उपयोगी संदर्भ:
- एक बैच फ़ाइल से PowerShell स्क्रिप्ट चलाना - डैनियल श्रोएडर के प्रोग्रामिंग ब्लॉग
- PowerShell में व्यवस्थापक अनुमतियों के लिए जाँच - अरे, स्क्रिप्टिंग गाइ! ब्लॉग