गैर-व्यवस्थापक सेवा खाते के रूप में पावरशेल के साथ किसी सेवा का शेड्यूल्ड पुनरारंभ


11

इससे पहले कि मैं नीचे गोली मारता हूं, मुझे पता है कि किसी कार्य को कैसे शेड्यूल करना है, किसी सेवा को पावरशेल के साथ पुनरारंभ करें या किसी गैर-व्यवस्थापक खाते को सेवा को पुनरारंभ करने के लिए विशेषाधिकार दें। यह समस्या नहीं है। हालाँकि समस्या यह है कि इन तीनों कार्यों का संयोजन संयुक्त है।

मेरे पास एक विंडोज़ सेवा है जिसे नेटवर्क फ़ोल्डर पर फ़ाइलों को संसाधित करने की आवश्यकता है। इसलिए यह एक "सेवा खाते" के साथ लॉग ऑन करता है जो वास्तव में सिर्फ एक नियमित डोमेन खाता है। यह डोमेन खाता एक व्यवस्थापक नहीं है, लेकिन इसमें उक्त फ़ोल्डर के एक्सेस अधिकार हैं। सेवा ठीक चलती है और यह काम करती है।

हालाँकि, कभी-कभी फ़ाइलों में से एक में कोई त्रुटि होती है जो अन्य फ़ाइलों को संसाधित होने से रोकती है। आमतौर पर किसी को नोटिस करने में कुछ समय लगता है और कुछ बैकलॉग होता है।

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

मैंने सेवा शुरू करने और रोकने के लिए समूह नीति के माध्यम से सेवा खाता विशेषाधिकार दिए।

यहाँ छवि विवरण दर्ज करें

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

अगले चरण में, मैंने एक निर्धारित कार्य बनाया जो प्रत्येक 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 में पूर्ण नियंत्रण के लिए सेवा पर विशेषाधिकार स्थापित करने का भी प्रयास किया। इनमें से किसी ने भी इस मुद्दे को हल नहीं किया। यह विशेषाधिकारों के साथ मुझे एक एक मुद्दा होना चाहिए कहीं मैं अभी भी अनदेखी कर रहा हूँ कि, क्योंकि जब मैं एक डोमेन खाते सर्वर पर एक स्थानीय व्यवस्थापक है कि साथ काम अनुसूची, यह सिर्फ ठीक काम करता है।


यह कुछ मदद से हो सकता है serverfault.com/questions/357424/… ऐसा लगता है कि
पॉवरशेल


@ Drifter104: आखिरकार, मैं GPO का उपयोग सेवा पर अनुमतियों को सेट करने के लिए करता हूं, सबिनैकल के लिए नहीं, मैंने इसे एसटीओई मापदंडों के साथ वैसे भी कोशिश की, लेकिन फिर भी उसी परिणाम को देखते हुए। डबल ने मेरी GPO सेटिंग्स की जाँच की और उनके पास Enumerate Dependent Services विकल्प भी सक्षम है।
वोलरथ.फैलन

@ MyronSemack-msemack मैंने मैन्युअल रूप से लेख में वर्णित सेवा के लिए SDDL स्ट्रिंग सेट करने का प्रयास किया, लेकिन फिर भी मुझे नहीं लगता कि अंततः एक GPO और सबइंक्ल एक ही काम करते हैं, क्योंकि वे एक और दूसरे को ओवरराइड करते हैं।
वोलाथ.फैलन

1
CmdLet के Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....बजाय प्रयास करने के बारे में कैसे Stop-Service? स्टॉप-सर्विस और स्टार्ट-सर्विस स्पष्ट रूप से इस उत्तर के अनुसार दूरस्थ-सक्षम नहीं हैं : दूरस्थ कंप्यूटर पर Get-Service -ComputerName का उपयोग नहीं कर सकते हैं और आपका त्रुटि संदेश "दूरस्थ" स्थानीयहोस्ट 'से कनेक्ट करने का प्रयास करने से संबंधित हो सकता है।' (<== यह एक बिंदी है।)
जॉन उर्फ ​​हॉट २ डिसे

जवाबों:


3

एक और सवाल के लिए anwser मेरी मुद्दे के रूप में अच्छी तरह से संकल्प लिया।

मैंने जो कदम उठाए थे:

  1. enable-psremoting एक व्यवस्थापक में सर्वर पर शीघ्र शक्तियां
  2. Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI एक व्यवस्थापक में सर्वर पर शीघ्र शक्तियां
  3. पूर्ण विशेषाधिकार के साथ सेवा खाता (या सुरक्षा समूह) जोड़ा गया
  4. sc sdshow scmanager एक व्यवस्थापक कमांड प्रॉम्प्ट में सर्वर पर
  5. एसडीडीएल आउटपुट को कॉपी करें
  6. (A;;KA;;;SID_OF_USER_OR_SECURITY_GROUP)S: भाग से पहले SDDL में जोड़ें
  7. sc sdset scmanager THE_MODIFIED_SDDL मेरा इस तरह देखा: sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;KA;;;S-1-X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
  8. मेरी Start-Serviceपॉवरशेल स्क्रिप्ट को बदलें ताकि यह CddLet के बजाय Set-Service(सेट-सर्विस ने काम न किया हो) का उपयोग करता है।

लगता है कि कुछ सरल तरीके से निकला, जिस तरह से इसे और अधिक जटिल होना चाहिए था ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.