अपनी Windows सेवाएँ खोजें, हर बदलाव का पूर्वावलोकन देखें, और कल से क्या ड्रिफ्ट हुआ यह जानें

Better Windows Services वही services.msc है, जिसे Windows मशीनों का प्रशासन करने वालों के लिए नए सिरे से बनाया गया है। एक ही इंजन पर एक विंडो और एक कमांड लाइन। आठ सौ पंक्तियाँ स्क्रोल करने के बजाय मशीन से सवाल पूछें। कोई बदलाव क्या करेगा, यह कुछ भी दबाने से पहले देखें। और वह हिस्सा जो services.msc में कभी था ही नहीं: हर सेवा को एक फ़ाइल में फ़्रीज़ करें, और एक हफ़्ते बाद पूछें कि क्या बदला।

  • मुफ़्त और ओपन सोर्स, GPL-3.0
  • एक फ़ाइल, या इंस्टॉलर
  • देखने के लिए व्यवस्थापक अधिकार नहीं चाहिए
  • इंटरनेट से कभी संपर्क नहीं करता
पाँच प्रविष्टियाँ चुनी हुई विंडो, जिसमें सूची के ऊपर उन्हें शुरू करने की योजना दिखाई गई है: पाँच चरण, यह टिप्पणी कि उनमें से दो पहले से उसी स्थिति में हैं, हर प्रविष्टि के लिए एक bws start पंक्ति, और Start 5 entries बटन।
चुनी हुई प्रविष्टियाँ, कुछ भी होने से पहले दिखाई गई योजना, और वह bws पंक्ति जो ठीक यही काम माँगती है। प्रोग्राम अंग्रेज़ी में बोलता है। विंडो अपने बगल में रखी भाषा फ़ाइल को पढ़ती है, इसलिए अनुवाद बिना दोबारा बिल्ड किए संभव है।
इसके साथ आधा मिनट

उपयोग में यह कैसा दिखता है

एक असली सत्र, पोलिश भाषा में इंस्टॉल किए गए Windows पर। प्रदर्शन नाम Windows से आते हैं, इसलिए वे उसी की भाषा में हैं। विंडो खुद अंग्रेज़ी में है।

चार प्रविष्टियाँ चुनी गईं और उन्हें शुरू करने की योजना, Local Session Manager का ज़बरदस्ती रीस्टार्ट जिसकी योजना चेतावनी देती है कि इसके बिना मशीन काम नहीं करती और बटन चलने से पहले इसका नाम माँगती है, खाली खोज बॉक्स के नीचे शुरुआत के लिए सवाल, और नाम का एक हिस्सा टाइप करके खोजी गई तथा शुरू की गई Print Spooler।
चार प्रविष्टियाँ चुनी गईं और उन्हें शुरू करने की योजना, एक ज़बरदस्ती रीस्टार्ट जो ऐसी सेवा का नाम माँगता है जिसकी मशीन को ज़रूरत है, खाली खोज बॉक्स के नीचे के सवाल, और टाइप करके खोजी व शुरू की गई Print Spooler।
शुरुआती स्क्रीन: इस मशीन के बारे में संख्याओं के तीन कार्ड, यानी चल रही सेवाएँ, अपने-आप शुरू होने के लिए सेट वे सेवाएँ जो शुरू नहीं हुईं, और अपने-आप शुरू होने के लिए सेट वे सेवाएँ जिनकी फ़ाइल गायब है, और एक Show the list बटन।
यह इस मशीन की कुछ संख्याओं के साथ खुलता है। हर संख्या एक सवाल है। उस पर क्लिक करें और सवाल खोज बॉक्स में चला जाता है।
सेवाओं की सूची, जिसमें खोज बॉक्स के ऊपर तीन सूचियाँ, एक खाली खोज बॉक्स, स्थिति, स्टार्टअप प्रकार, हस्ताक्षर, विसंगतियों और ट्रिगर के लिए पंक्तियों में खुले फ़िल्टर बटन, और नीचे सूची है।
फ़िल्टर बटन खोज बॉक्स में लिखते हैं, इसलिए आपने जो क्लिक किया वह एक ऐसी क्वेरी है जिसे आप पढ़ और संपादित कर सकते हैं।
यह क्यों बना

services.msc Windows 2000 के बाद से लगभग वैसा ही है

व्यवस्थापक इसमें हफ़्ते के कई घंटे बिताते हैं और हर बार उन्हीं दीवारों से टकराते हैं।

  • कोई खोज नहीं। नेविगेट करने का एकमात्र तरीका प्रदर्शन नाम के पहले अक्षर पर कूदना है।
  • कोई फ़िल्टरिंग नहीं। यह पूछने का कोई तरीका नहीं कि मुझे वह दिखाओ जो अपने-आप शुरू होने के लिए सेट है और चल नहीं रहा।
  • एक बार में एक पंक्ति। बारह सेवाएँ रीस्टार्ट करने का मतलब है बारह राइट-क्लिक और बारह बार इंतज़ार।
  • “Stopping...” हमेशा के लिए, और Task Manager तथा प्रक्रिया का अंदाज़ा लगाने के सिवा बाहर निकलने का कोई रास्ता नहीं।
  • कोई इतिहास नहीं। कोई नहीं जानता कि उस स्टार्टअप प्रकार को Disabled किसने किया, या कब।
  • छिपा हुआ डेटा। प्रक्रिया, ट्रिगर, विशेषाधिकार, security descriptor, निष्पादन योग्य फ़ाइल पर किसने हस्ताक्षर किए, यह सब याद से sc.exe चलाने या रजिस्ट्री खंगालने पर ही मिलता है।
  • कमांड लाइन में बराबरी नहीं। sc.exe का सिंटैक्स नब्बे के दशक का है, और Windows PowerShell 5.1 में Windows के साथ आने वाला Get-Service यह तक नहीं दिखाता कि सेवा किस खाते से चलती है, विवरण तो दूर की बात है। PowerShell 7 दोनों दिखाता है, और वह अलग से इंस्टॉल होता है।

दूसरे टूल इसका एक-एक हिस्सा ठीक करते हैं

Process Hacker और System Informer भरपूर जानकारी वाली सूची दिखाते हैं और ज़बरदस्ती प्रक्रिया खत्म कर सकते हैं, पर उनमें न ऑडिट है न कमांड लाइन। sc.exe और PsService सब कुछ कर सकते हैं पर आपको कुछ बताते नहीं। PowerShell के *-Service cmdlet स्क्रिप्ट में चल सकते हैं पर उथले हैं।

खोजी जा सकने वाली सूची, हर बदलाव से पहले पूर्वावलोकन, और समय के साथ क्या बदला इसका रिकॉर्ड, इन तीनों को कोई एक साथ नहीं देता। और पहली दोपहर के बाद इसे मशीन पर रखने की वजह यही रिकॉर्ड है।

पूरी तुलना
यह क्या करता है

एक इंजन पर एक विंडो और एक कमांड लाइन

स्क्रोल करने के बजाय पूछें

start:auto !status:running का मतलब है जो चालू होना चाहिए और नहीं है। एक ही भाषा, खोज बॉक्स में भी और bws list --query में भी, और टाइप करते समय फ़ील्ड सुझाए जाते हैं।

कुछ भी होने से पहले योजना दिखाएँ

हर स्टॉप, स्टार्ट, रीस्टार्ट और स्टार्टअप प्रकार का बदलाव उन सेवाओं के साथ पूर्वावलोकन में दिखता है जिन्हें वह अपने साथ बंद करता है, और जो पूर्वावलोकन में दिखता है वही चलता है।

बताएँ कि क्या ड्रिफ्ट हुआ और किसने बदला

bws snapshot create मशीन को एक फ़ाइल में फ़्रीज़ कर देता है, और bws snapshot diff बताता है कि तब से क्या बदला, और कॉन्फ़िगरेशन को उससे अलग रखता है जो सिर्फ़ शुरू या बंद हुआ। bws history System लॉग से बताता है कि स्टार्टअप प्रकार किसने बदला और सेवा किसने इंस्टॉल की। विंडो ये तीनों काम Audit... के तहत करती है।

एक बटन दबाकर आम समस्या ठीक करें

Tools टैब और bws tool fix उस सेवा को रीस्टार्ट करते हैं जो प्रिंट न करने वाले प्रिंटर, बंद पड़ी आवाज़ या अटकी हुई खोज के पीछे होती है, साथ ही उन सेवाओं को भी जो उस पर निर्भर हैं, और यह सब बाकी हर चीज़ वाली उसी योजना के ज़रिए होता है।

ऐसी सेवा रोकें जो रुकती ही नहीं

यह पहले विनम्रता से कहता है और प्रक्रिया को तभी खत्म करता है जब वह विफल हो, और उसमें रहने वाली हर दूसरी सेवा का नाम बताता है।

वह दिखाएँ जो services.msc छिपाता है

निष्पादन योग्य फ़ाइल पर किसने हस्ताक्षर किए और Windows उस पर भरोसा करता है या नहीं, ट्रिगर, विशेषाधिकार, security descriptor, प्रक्रिया और उसकी मेमोरी। कॉलम के रूप में भी, और खोजने की चीज़ों के रूप में भी।

बताएँ कि कब कुछ पढ़ नहीं पाया

जो फ़ील्ड पढ़ा नहीं जा सका उसे “पढ़ा नहीं गया” बताया जाता है, खाली कभी नहीं दिखाया जाता। व्यवस्थापक अधिकारों के बिना लिया गया स्नैपशॉट यह बात फ़ाइल के अंदर ही बता देता है।

स्क्रिप्ट में आसानी से फ़िट हो

हर कमांड पर --json, हर अंत के लिए एक एग्ज़िट कोड, और जब diff को ड्रिफ्ट मिले तो 5।

एक फ़ाइल से चलाएँ, ऑफ़लाइन

अनज़िप करके चलाएँ, या पूरी मशीन के लिए इंस्टॉल करें। .NET इंस्टॉल करने की ज़रूरत नहीं, और यह इंटरनेट से कभी संपर्क नहीं करता। पढ़ने के लिए व्यवस्थापक अधिकार नहीं चाहिए। GPL-3.0।

वह हिस्सा जो services.msc ने कभी नहीं किया

कल से क्या बदला

स्नैपशॉट एक पल में पूरी मशीन है: हर सेवा और ड्राइवर, उसके स्टार्टअप प्रकार, खाते, लॉन्च पथ, उसकी फ़ाइल के हैश और हस्ताक्षरकर्ता, निर्भरताओं, ट्रिगर, विशेषाधिकारों और security descriptor के साथ। यह JSON है जिसमें हर पंक्ति में एक फ़ील्ड है, इसलिए यह रिपॉज़िटरी में रखा जा सकता है और git diff इसे पढ़ लेता है।

$ bws snapshot diff before.json --live --exit-code
Changed (2):
  Spooler  Print Spooler
    startType: Manual -> Automatic
    status: Stopped -> Running  (running state, not configuration)
  wlidsvc  Microsoft Account Sign-in Assistant
    status: Stopped -> Running  (running state, not configuration)

Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
  • कॉन्फ़िगरेशन और चलने की स्थिति अलग-अलग बताई जाती हैं। एक दिन के अंतर से लिए गए दो स्नैपशॉट इसमें अलग होते हैं कि क्या चल रहा है, और उसमें से लगभग कुछ भी ड्रिफ्ट नहीं होता। जो स्टार्टअप प्रकार बदला वही पंक्ति पढ़ने लायक है।
  • जिसकी तुलना नहीं हो सकी वह सूचीबद्ध है, छिपा नहीं। जो फ़ील्ड किसी एक स्नैपशॉट ने कभी पढ़ा ही नहीं, वह तुलना नहीं की गई के रूप में सामने आता है, इसलिए जो diff कुछ नहीं बदला कहता है उसका मतलब है कि जो दोनों पक्ष देख सके उसमें कुछ नहीं बदला।
  • --exit-code कॉन्फ़िगरेशन अलग होने पर 5 के साथ खत्म होता है, इसलिए एक शेड्यूल किया गया टास्क डिप्लॉयमेंट के समय स्नैपशॉट ले सकता है और मशीन के ड्रिफ्ट होने की पहली ही रात किसी को अलर्ट भेज सकता है।
  • दो मशीनें, दो फ़ाइलें। स्टेजिंग पर एक स्नैपशॉट लें और प्रोडक्शन पर एक, और उनकी तुलना कहीं भी करें।
स्नैपशॉट और ड्रिफ्ट कैसे काम करते हैं
योजना के बिना कुछ नहीं होता

पूर्वावलोकन ही निष्पादन है

कुछ भी लिखने वाला हर ऑपरेशन पहले एक योजना बनाता है, और वही योजना पूर्वावलोकन है, निर्भर सेवाओं का कैस्केड है, कुछ दबाने से पहले का इनकार है, वही काम माँगने वाली कमांड लाइन है, और बाद में वापस लौटने का रास्ता है।

$ bws stop Winmgmt --dry-run --dependents
Plan: stop Winmgmt  (2 steps)
  1. stop  vmms      (would break otherwise)
  2. stop  Winmgmt   (asked for)

Warnings:
  - Stopping Winmgmt also stops one other entry: vmms
  - Winmgmt starts automatically, so it will be back after the next restart.
  • --dry-run के बिना चलाएँ तो वही चरण चलते हैं, उसी क्रम में, और उनके साथ वही कारण। असली काम के लिए कोई दूसरा कोड पथ नहीं है।
  • जो उसके साथ बंद होता है वह योजना में है। जो सेवाएँ टूटतीं वे अपने आप में अलग चरण हैं, और जो योजना मशीन की ज़रूरत की किसी चीज़ को बंद कर देती उसकी चेतावनियों में यह लिखा होता है।
  • इनकार बटन से पहले आता है। ड्राइवर, ऐसी सेवा जिसे बंद करने का अनुरोध सेवा प्रबंधक स्वीकार नहीं करता, सिस्टम द्वारा सुरक्षित प्रक्रिया: इन सबको योजना बनते समय ही कारण के साथ मना कर दिया जाता है। विंडो बटन को धूसर कर देती है और उसके बगल में कारण बताती है।
  • ज़बरदस्ती रोकना दो चरणों का है, और दूसरा सशर्त है। bws kill सेवा से रुकने को कहता है और उसकी प्रक्रिया को तभी खत्म करता है जब वह काम न करे, और उसमें रहने वाली हर दूसरी सेवा का नाम बताता है।
जब कोई सेवा रुकने से इनकार करे
इसके साथ दो मिनट

कमांड लाइन से

विंडो वाला ही इंजन, स्क्रिप्ट, शेड्यूल किए गए टास्क और CI के लिए। डेटा स्टैंडर्ड आउटपुट में जाता है और बाकी सब स्टैंडर्ड एरर में, इसलिए bws list --json | jq काम करता है और कोई चेतावनी आपके JSON में कभी नहीं आती।

bws list --query "start:auto !status:running"     जो चालू होना चाहिए और नहीं है
bws list --query "file:missing"                   वे सेवाएँ जिनकी बाइनरी गायब है
bws list --query "signed:no peruser:no"           बिना हस्ताक्षर वाली, प्रति-सत्र प्रतियों के बिना
bws show Spooler                                  एक प्रविष्टि के बारे में जो कुछ पता है
bws stop Winmgmt --dry-run --dependents           इसे रोकने से और क्या बंद होगा
bws kill Spooler --dry-run                        इसकी प्रक्रिया खत्म करने से साथ में क्या जाएगा
bws start-type Spooler manual --dry-run           इसे ऑटोमैटिक से हटाने पर क्या होगा
bws snapshot create before.json                   बदलाव से पहले मशीन को फ़्रीज़ करें
bws snapshot diff before.json --live --exit-code  तब से क्या बदला, सेटअप बदला हो तो 5
bws history Spooler                               इसका स्टार्टअप प्रकार किसने और कब बदला
bws tool fix printer --dry-run                    अटके प्रिंटर का त्वरित समाधान क्या करेगा
हर कमांड, विकल्प और एग्ज़िट कोड
इसे पाएँ

अनज़िप करके चलाएँ, या इंस्टॉल करें

Windows 10 1809 या Windows Server 2019 और उसके बाद के संस्करण, 64-बिट। आर्काइव को इंस्टॉलर नहीं चाहिए और वे रजिस्ट्री में कुछ नहीं लिखते, और देखने के लिए व्यवस्थापक अधिकार नहीं चाहिए। कुछ भी बदलने के लिए उन्नत अधिकारों वाला सत्र चाहिए, और दोनों हिस्से चुपचाप विफल होने के बजाय यह बता देते हैं। विंडो Restart as admin का विकल्प देती है।

फ़ाइलयह क्या है
BetterWindowsServices-win-x64.zipविंडो, एक अपने-आप में पूर्ण निष्पादन योग्य फ़ाइल, .NET इंस्टॉल करने की ज़रूरत नहीं
bws-cli-win-x64.zipकमांड लाइन, एक अपने-आप में पूर्ण निष्पादन योग्य फ़ाइल, स्क्रिप्ट और CI के लिए
BetterWindowsServices-win-x64.msiइंस्टॉलर: दोनों प्रोग्राम मशीन के हर खाते के लिए, विंडो Start मेनू में और bws PATH में

निष्पादन योग्य फ़ाइलों पर Authenticode हस्ताक्षर है, इसलिए Windows अज्ञात प्रकाशक की चेतावनी देने के बजाय प्रकाशक का नाम बताता है।