क्वेरी भाषा

मशीन से सवाल पूछें

एक भाषा, विंडो के खोज बॉक्स में भी और bws list --query में भी। अकेला शब्द नाम, प्रदर्शन नाम, खाते और लॉन्च पथ में खोजता है। फ़ील्ड उसे सीमित करता है। 21 फ़ील्ड, और टूल के दोनों हिस्सों में एक ही पाठ का एक ही मतलब होता है।

छह जो एक असली सवाल का जवाब देते हैं

जो चालू होना चाहिए और नहीं है

start:auto !status:running

ज़्यादातर लोग जो पहली क्वेरी लिखते हैं, और जिसका जवाब services.msc बिल्कुल नहीं दे सकता।

वे सेवाएँ जिनकी फ़ाइल गायब है

file:missing

ऐसी प्रविष्टि जो डिस्क पर मौजूद न रहने वाली बाइनरी की ओर इशारा करती है। आमतौर पर वह अनइंस्टॉल जिसने रजिस्ट्रेशन पीछे छोड़ दिया।

बिना हस्ताक्षर वाली, सत्र के शोर के बिना

signed:no peruser:no

प्रति-उपयोगकर्ता परिवार हर सत्र के लिए एक प्रति बनाते हैं और सूची को लगभग-एक-जैसी प्रविष्टियों से भर देते हैं। यह बाकी के बारे में पूछता है।

Disabled होने के बावजूद चल रही

mismatch:running

कॉन्फ़िगरेशन और स्थिति जो आपस में मेल नहीं खातीं: ऐसी प्रविष्टि जिसे प्रबंधक कभी शुरू न करने के लिए सेट है, फिर भी चल रही है।

कुछ भी जो डीबग अधिकार माँगता है

privilege:SeDebugPrivilege

एक विशेषाधिकार जो किसी प्रक्रिया को दूसरी किसी भी प्रक्रिया को खोलने देता है। यह जानना ज़रूरी है कि कौन सी सेवाएँ इसे माँगती हैं।

जो टूल पढ़ नहीं सका

account:?

वे प्रविष्टियाँ जिनमें यह सत्र खाता नहीं पढ़ सका। एक ऐसा सवाल जो services.msc पूछ भी नहीं सकता।

क्वेरी कैसे लिखी जाती है

शब्द

  • शब्द रिक्त स्थानों से अलग किए जाते हैं और सभी का मेल खाना ज़रूरी है। and कीवर्ड इसलिए नहीं है कि उसका और कोई मतलब हो ही नहीं सकता।
  • एक ही फ़ील्ड का दो बार लिखा जाना अकेला अपवाद है: status:running status:stopped का मतलब है दोनों में से कोई, क्योंकि दो फ़िल्टर टिक करने पर यही लिखा जाता है। किसी संख्या पर दो सीमाएँ फिर भी दायरा घटाती हैं: pid:>1000 pid:<2000 उन दोनों के बीच का दायरा है।
  • किसी शब्द के आगे ! उसे उलट देता है: !status:running। setlocal EnableDelayedExpansion वाली बैच फ़ाइल में cmd उस ! को बिना कुछ कहे खा जाता है और क्वेरी चुपचाप कुछ और मतलब रखने लगती है। वहाँ उद्धरण चिह्नों के अंदर ^! लिखें।
  • फ़ील्ड के अंदर अल्पविराम का मतलब या है: start:manual,disabled।
  • उद्धरण चिह्न ऐसी किसी भी चीज़ को सुरक्षित रखते हैं जिसमें रिक्त स्थान या कोलन हों: account:"NT SERVICE\McmSvc"।
  • जैसा है वैसा चिपकाया गया पथ, C:\Windows\System32\svchost.exe, खोजा जाता है, C नाम के फ़ील्ड के रूप में पढ़ा नहीं जाता।

पाठ का मिलान कैसे होता है

  • name:spool उस हर चीज़ से मेल खाता है जिसमें वह शामिल हो। यह डिफ़ॉल्ट है, क्योंकि खोज बॉक्स से लोग यही उम्मीद करते हैं।
  • name:=spooler सटीक मिलान है।
  • name:spool* वाइल्डकार्ड लेता है, * और ?।
  • name:/^Sql.*/ एक रेगुलर एक्सप्रेशन है, और स्लैश के अंदर वह वैसे ही लिखा जाता है जैसे रेगुलर एक्सप्रेशन लिखे जाते हैं: \?, \\ और अल्पविराम का वही मतलब है जो वहाँ होता है। जो स्लैश कभी बंद नहीं होता वह त्रुटि है। स्लैश को ही खोजने के लिए \/ लिखें या उद्धरण चिह्न इस्तेमाल करें।
  • बड़े और छोटे अक्षरों का भेद अनदेखा किया जाता है, ASCII के बाहर भी: पोलिश या ग्रीक में प्रदर्शन नाम चाहे जैसे टाइप किया जाए, मेल खाता है।

तीन शब्द जो हर फ़ील्ड स्वीकार करता है

  • any - कोई मान है, चाहे जो भी हो
  • none - सचमुच कोई मान नहीं है: प्रविष्टि के पास कोई नहीं है
  • ? - टूल इस फ़ील्ड को पढ़ नहीं सका, या इसे पढ़ा नहीं है, जो ऐसा सवाल है जिसे services.msc पूछ भी नहीं सकता

गलत टाइप किया गया मान त्रुटि है, कभी खाली नतीजा नहीं। status:runing जवाब देता है Did you mean running? और कोड 2 के साथ खत्म होता है। खाली सूची जवाब जैसी दिखती, और “कुछ मेल नहीं खाता” तथा “आपने गलत टाइप किया” के बीच का अंतर ही साफ़-सुथरी मशीन और ऐसे ऑडिट के बीच का अंतर है जिसने कुछ साबित नहीं किया। जो क्वेरी कुछ भी सीमित न करती उसे कमांड लाइन पर भी मना कर दिया जाता है, ताकि टाइपो की वजह से कोई स्क्रिप्ट पूरी मशीन पर काम न करने लगे।

और उदाहरण

हर एक विंडो के खोज बॉक्स में और bws list --query के बाद एक जैसा काम करता है, और हर एक को यहाँ लिखे जाने से पहले असली Windows पर चलाया गया था। वह क्या ढूँढता है यह मशीन पर निर्भर है, और परेशानी के बारे में पूछे गए सवाल का खाली जवाब वही है जो आप चाहते हैं।

स्थिति और स्टार्टअप प्रकार

क्वेरीयह क्या ढूँढता है
status:stopPending,startPendingरुकने या शुरू होने पर अटकी हुई: वह इंतज़ार जो snap-in दिखाता है और जो कभी खत्म नहीं होता।
start:auto status:stopped trigger:noneअपने-आप शुरू होने के लिए सेट, रुकी हुई, और किसी ट्रिगर का इंतज़ार न करती: रीस्टार्ट के बाद पढ़ने लायक छोटी सूची।
start:delayedऑटोमैटिक, पर बाकी ऑटोमैटिक प्रविष्टियों से थोड़ी देर बाद शुरू होने वाली।
start:manual,disabled status:runningचल रही है जबकि बूट पर इसे कोई शुरू नहीं करता: किसी ने इसे माँगा, किसी ट्रिगर ने इसे शुरू किया, या किसी व्यक्ति ने।

खाते

क्वेरीयह क्या ढूँढता है
account:localsystem !publisher:microsoftLocalSystem के रूप में चल रही, सबसे शक्तिशाली खाता, ऐसी फ़ाइल से जिस पर Microsoft ने हस्ताक्षर नहीं किए। प्रकाशक के बारे में क्वेरी हस्ताक्षर अपने आप पढ़ती है, इसलिए इसमें कुछ सेकंड लगते हैं।
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessकिसी भी दूसरे खाते के अंतर्गत चलती सेवाएँ: वर्चुअल खाता, प्रबंधित खाता या किसी व्यक्ति का अपना खाता।
account:"NT SERVICE"सेवा का अपना वर्चुअल खाता। उद्धरण चिह्न शब्दों को साथ रखते हैं, रिक्त स्थान की वजह से।

फ़ाइलें और हस्ताक्षर

क्वेरीयह क्या ढूँढता है
signed:notSigned,untrustedRoot,tamperedकोई हस्ताक्षर नहीं, ऐसी श्रृंखला जिस पर Windows भरोसा नहीं करता, या हस्ताक्षर के बाद बदली गई फ़ाइल।
signed:trusted !publisher:microsoftहस्ताक्षरित, भरोसेमंद, और Microsoft द्वारा नहीं: वह सॉफ़्टवेयर जो दूसरी कंपनियों ने इस मशीन पर रखा है।
type:driver start:boot,system !signed:trustedWindows के शुरू होते समय लोड होने वाले ड्राइवर जिनके हस्ताक्षर पर Windows भरोसा नहीं करता। स्वस्थ मशीन पर, एक भी नहीं।
!path:C:\Windows type:ownProcessअपनी अलग प्रक्रिया वाली सेवा जिसकी फ़ाइल Windows फ़ोल्डर के बाहर है।
path:\AppData\किसी के प्रोफ़ाइल के अंदर से लॉन्च की गई, वह आखिरी जगह जहाँ किसी सेवा की उम्मीद की जाती है।
path:\System32\\ type:ownProcessरिक्त स्थान से पहले का बैकस्लैश रिक्त स्थान को शब्द का हिस्सा बना देता है, इसलिए बैकस्लैश पर खत्म होने वाला पथ, जब उसके बाद कोई और शब्द आए, दो बैकस्लैश के साथ लिखा जाता है। क्वेरी के अंत में एक काफ़ी है।

ट्रिगर और निर्भरताएँ

क्वेरीयह क्या ढूँढता है
trigger:device status:stoppedकिसी डिवाइस के आने का इंतज़ार कर रही, इसलिए किसी कारण से रुकी हुई।
trigger:networkतब शुरू होती है जब किसी नेटवर्क एंडपॉइंट पर अनुरोध आता है: पोर्ट, नेम्ड पाइप या RPC इंटरफ़ेस।
trigger:stopवे प्रविष्टियाँ जिन्हें कोई ट्रिगर रोक भी सकता है, सिर्फ़ शुरू ही नहीं।
dependson:Winmgmtवे प्रविष्टियाँ जिन्हें चलने के लिए WMI चाहिए।
requiredby:Spoolerवह सब जो Print Spooler को चलने के लिए चाहिए, और बदले में उन्हें क्या चाहिए।

विशेषाधिकार और प्रक्रियाएँ

क्वेरीयह क्या ढूँढता है
privilege:SeTcbPrivilegeऑपरेटिंग सिस्टम के हिस्से के रूप में काम करने का अनुरोध करती है।
privilege:SeImpersonatePrivilege !account:localsystemLocalSystem के अलावा किसी खाते के अंतर्गत चलते हुए क्लाइंट की ओर से काम कर सकती है।
sidtype:unrestrictedअपनी प्रक्रिया में अपना एक सेवा SID रखती है, इसलिए अनुमतियाँ उसे अकेले नाम दे सकती हैं। sidtype:restricted उनके लिए पूछता है जिनकी प्रक्रिया लिखने पर भी प्रतिबंधित है।
type:sharedProcess status:runningसाझा svchost के अंदर, दूसरों के साथ चल रही।
memory:>200MBऐसी प्रक्रिया जो 200 MB से ज़्यादा इस्तेमाल करती है। जब क्वेरी मेमोरी के बारे में पूछती है तो मेमोरी अपने आप पढ़ी जाती है।
pid:1000-2000ऐसी प्रक्रिया में जिसकी आईडी 1000 और 2000 के बीच है।

नाम और पाठ

क्वेरीयह क्या ढूँढता है
spoolअकेला शब्द, जो नाम, प्रदर्शन नाम, खाते और लॉन्च पथ में खोजा जाता है।
name:=wuauservठीक यही नाम, और ऐसा कुछ नहीं जो सिर्फ़ इसे शामिल करता हो।
name:win*वे नाम जो win से शुरू होते हैं, वाइल्डकार्ड के साथ लिखे हुए।
name:/svc$/वे नाम जो svc पर खत्म होते हैं, रेगुलर एक्सप्रेशन के रूप में लिखे हुए।
description:noneकोई विवरण बिल्कुल नहीं, जो ज़्यादातर ड्राइवरों के साथ है।
description:?ऐसा विवरण जो Windows सौंप नहीं सका, आमतौर पर इसलिए कि वह किसी ऐसी भाषा फ़ाइल की ओर इशारा करता है जो मौजूद नहीं।
peruser:templateप्रति-उपयोगकर्ता टेम्पलेट जिन्हें Windows हर साइन-इन किए गए सत्र के लिए कॉपी करता है।

हर फ़ील्ड

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

फ़ील्डकिसके बारे में पूछता हैमान
nameसेवा का नाम, जिससे Windows उसे पहचानता हैपाठ
displayप्रदर्शन नाम, जैसा यह Windows उसे लिखता हैपाठ
descriptionप्रविष्टि अपने बारे में क्या कहती हैपाठ
typeयह किस तरह की प्रविष्टि हैdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserक्या यह उन प्रति-उपयोगकर्ता परिवारों में से एक है जिनकी Windows हर सत्र के लिए एक प्रति बनाता हैyes, no, template, instance
statusयह अभी क्या कर रही हैrunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startप्रबंधक अगले बूट पर इसके साथ क्या करता हैautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountवह खाता जिसके रूप में यह चलती है, जैसा प्रबंधक उसे लिखता हैपाठ, जैसे localsystem
pidवह प्रक्रिया जिसमें यह चल रही हैएक संख्या: 1234, >1000, 100-200
triggerएक शर्त जो इसे शुरू या बंद करती हैdevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathवह कमांड लाइन जिसे प्रबंधक लॉन्च करता हैपाठ
fileक्या वह फ़ाइल जो यह चलाती है डिस्क पर हैpresent, missing
signedफ़ाइल के हस्ताक्षर के बारे में Windows क्या सोचता है, निरस्तीकरण जाँचे बिनाyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherफ़ाइल पर किसने हस्ताक्षर किए, यह सिर्फ़ भरोसेमंद हस्ताक्षर से साबित होता हैपाठ
privilegeवह विशेषाधिकार जो प्रविष्टि माँगती हैपाठ, जैसे SeDebugPrivilege
dependsonइसे क्या चाहिएएक सेवा का नाम
requiredbyइसके रुकने पर क्या टूटता हैएक सेवा का नाम
sidtypeसेवा SID का प्रकारunrestricted, restricted, unknown
sddlsecurity descriptor, पाठ के रूप मेंपाठ
memoryइसकी प्रक्रिया क्या इस्तेमाल कर रही हैइकाई के साथ एक आकार: 500MB, >1GB, 100MB-1GB
mismatchकॉन्फ़िगरेशन और स्थिति जो आपस में मेल नहीं खातींstopped, running

दो बातें जानने लायक

कुछ फ़ील्ड महँगे हैं, और उन्हें माँगना पढ़ना चालू कर देता है

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

जिस नतीजे का फ़ैसला पढ़ी न जा सकने वाली चीज़ पर हुआ, वह यह बता देता है

यदि प्रविष्टियों का फ़ैसला किसी ऐसे फ़ील्ड पर हुआ जिसे यह सत्र पढ़ नहीं सका, तो नतीजे में एक पंक्ति होती है जो बताती है कितनी, क्योंकि ऐसे नतीजे में प्रविष्टियाँ छूट सकती हैं, या ऐसी प्रविष्टियाँ हो सकती हैं जो वहाँ की नहीं हैं। यही वह नियम है जो पूरा टूल निभाता है: असफल पढ़ना जवाब में दिखता है, कभी निगला नहीं जाता। प्रकाशक के साथ भी यही बर्ताव होता है जब उसका दावा सिर्फ़ प्रमाणपत्र करता है: trusted के अलावा किसी भी फ़ैसले के बगल में नाम not verified के रूप में दिखाया जाता है, और publisher: प्रविष्टि को अपनी एक अलग पंक्ति में अनिश्चित गिनता है, इसलिए !publisher:microsoft उस Microsoft फ़ाइल को रखता है जिसे हस्ताक्षर के बाद किसी ने बदल दिया।

कमांड लाइन संदर्भ