इससे पहले कि मैं नीचे गोली मारता हूं, मुझे पता है कि किसी कार्य को कैसे शेड्यूल करना है, किसी सेवा को पावरशेल के साथ पुनरारंभ करें या किसी गैर-व्यवस्थापक खाते को सेवा को पुनरारंभ करने के लिए विशेषाधिकार दें। यह समस्या नहीं है। हालाँकि समस्या यह है कि इन तीनों कार्यों का संयोजन संयुक्त है।
मेरे पास एक विंडोज़ सेवा है जिसे नेटवर्क फ़ोल्डर पर फ़ाइलों को संसाधित करने की आवश्यकता है। इसलिए यह एक "सेवा खाते" के साथ लॉग ऑन करता है जो वास्तव में सिर्फ एक नियमित डोमेन खाता है। यह डोमेन खाता एक व्यवस्थापक नहीं है, लेकिन इसमें उक्त फ़ोल्डर के एक्सेस अधिकार हैं। सेवा ठीक चलती है और यह काम करती है।
हालाँकि, कभी-कभी फ़ाइलों में से एक में कोई त्रुटि होती है जो अन्य फ़ाइलों को संसाधित होने से रोकती है। आमतौर पर किसी को नोटिस करने में कुछ समय लगता है और कुछ बैकलॉग होता है।
इसलिए, मैंने पावरप्लेश में एक मॉनिटरिंग स्क्रिप्ट बनाई जो इन त्रुटिपूर्ण फाइलों के लिए नेटवर्क फ़ोल्डर को प्रदूषित करती है। यदि वे पाए जाते हैं, तो फ़ाइलों को समीक्षा के लिए एक अस्थायी फ़ोल्डर में ले जाया जाता है और सेवा को पुनरारंभ करने की आवश्यकता होती है।
मैंने सेवा शुरू करने और रोकने के लिए समूह नीति के माध्यम से सेवा खाता विशेषाधिकार दिए।
जब मैं सेवा खाते के साथ सर्वर पर लॉगऑन करता हूं, तो मैं सेवा एमएमसी का उपयोग करके मैन्युअल रूप से सेवा को पुनरारंभ करने में सक्षम हूं। मैं पॉवरशेल स्क्रिप्ट को निष्पादित करने में भी सक्षम हूं और यह वही करता है जो इसे करना चाहिए: फ़ोल्डर को पोल करें, फाइलों को स्थानांतरित करें और सेवा को पुनरारंभ करें। महान!
अगले चरण में, मैंने एक निर्धारित कार्य बनाया जो प्रत्येक 10 मिनट चलता है। कार्य उसी सेवा खाते का उपयोग करता है, जो पॉवरशेल स्क्रिप्ट को निष्पादित करने की सेवा के रूप में है। बॉक्स "उच्चतम विशेषाधिकार के साथ निष्पादित" की जाँच की जाती है। जैसा कि मैंने कहा, पॉवरशेल स्क्रिप्ट को नेटवर्क ड्राइव तक पहुंच की आवश्यकता है, इसलिए मैं इसे स्थानीय सर्वर व्यवस्थापक के रूप में नहीं चला सकता हूं और मैं इस तरह के एक क्षेत्रीय कार्य के लिए डोमेन व्यवस्थापक क्रेडेंशियल्स का उपयोग नहीं करना चाहता हूं। (मैं जितना हो सके कम से कम विशेषाधिकार के सिद्धांत को लागू करने की कोशिश करता हूं।)
मैंने स्थानीय सुरक्षा नीति MMC का उपयोग करके स्थानीय सर्वर पर "लॉगऑन बैच वर्क" के रूप में सेवा खाता दिया।
अब उस भाग के लिए जिसे मैं समझ नहीं पा रहा हूं: निर्धारित समय पर निर्धारित कार्य सफलतापूर्वक पूरा हो जाता है और पावरस्लिप स्क्रिप्ट निष्पादित हो रही है। स्क्रिप्ट फ़ोल्डर और त्रुटि फ़ाइलों को स्थानांतरित करती है। केवल एक चीज जो काम नहीं करती है वह है सेवा को पुनरारंभ करना ...?! फिर से, स्क्रिप्ट को मैन्युअल रूप से चलाने के रूप में एक ही उपयोगकर्ता ने पूरी तरह से काम किया।
मुझे इवेंट व्यूअर में बहुत कुछ दिखाई नहीं दे रहा है, लेकिन मेरी स्क्रिप्ट पर लॉगिंग में यह त्रुटि है:
TerminatingError (Stop-Service): "कंप्यूटर पर सेवा नियंत्रण प्रबंधक नहीं खोल सकता है।" इस ऑपरेशन के लिए अन्य विशेषाधिकारों की आवश्यकता हो सकती है। "
सेवा को पुनरारंभ करने के लिए मैं जिन आदेशों का उपयोग करता हूं वे हैं:
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
(मैं 2008 R2 डोमेन पर विंडोज़ सर्वर 2012 R2 और पावरशेल 4 संस्करण का उपयोग कर रहा हूं।)
अद्यतन: मैंने दोनों उप-कुंडल का उपयोग करके उपयोगकर्ता के लिए सेवा अनुमतियाँ निर्धारित करने की कोशिश की (जैसा कि यहाँ वर्णित है ) और मैन्युअल रूप से एसडीडीएल स्ट्रिंग सेट करना (जैसा कि यहाँ वर्णित है ), इसलिए मेरे नियंत्रण झंडे इस तरह दिखते हैं (ए ;; CCLCSWRPWPDDLOCRRC ;;; S-1-; एक्स-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)। मैंने GPO में पूर्ण नियंत्रण के लिए सेवा पर विशेषाधिकार स्थापित करने का भी प्रयास किया। इनमें से किसी ने भी इस मुद्दे को हल नहीं किया। यह विशेषाधिकारों के साथ मुझे एक एक मुद्दा होना चाहिए कहीं मैं अभी भी अनदेखी कर रहा हूँ कि, क्योंकि जब मैं एक डोमेन खाते सर्वर पर एक स्थानीय व्यवस्थापक है कि साथ काम अनुसूची, यह सिर्फ ठीक काम करता है।
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
बजाय प्रयास करने के बारे में कैसे Stop-Service
? स्टॉप-सर्विस और स्टार्ट-सर्विस स्पष्ट रूप से इस उत्तर के अनुसार दूरस्थ-सक्षम नहीं हैं : दूरस्थ कंप्यूटर पर Get-Service -ComputerName का उपयोग नहीं कर सकते हैं और आपका त्रुटि संदेश "दूरस्थ" स्थानीयहोस्ट 'से कनेक्ट करने का प्रयास करने से संबंधित हो सकता है।' (<== यह एक बिंदी है।)