لغة الاستعلام

اسأل الجهاز سؤالًا

لغة واحدة، في مربع بحث النافذة وفي bws list --query. الكلمة المجردة تبحث في الاسم والاسم المعروض والحساب ومسار التشغيل. والحقل يضيّق البحث. 21 حقلًا، والنص نفسه يعني الشيء نفسه في نصفي الأداة.

ستة استعلامات تجيب عن سؤال حقيقي

ما يجب أن يعمل ولا يعمل

start:auto !status:running

أول استعلام يكتبه معظم الناس، وهو الذي لا يستطيع services.msc الإجابة عنه إطلاقًا.

خدمات اختفى ملفها

file:missing

عنصر يشير إلى ملف تنفيذي غير موجود على القرص. وهو عادةً إزالة تثبيت تركت التسجيل خلفها.

غير موقّعة، دون ضجيج الجلسات

signed:no peruser:no

تصنع العائلات الخاصة بكل مستخدم نسخة لكل جلسة وتملأ القائمة بما يكاد يتطابق. وهذا يسأل عن الباقي.

تعمل رغم تعطيلها

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:microsoftتعمل بحساب LocalSystem، وهو أقوى حساب، من ملف لم توقّعه 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:trustedبرامج تشغيل تُحمَّل أثناء بدء Windows ولا يثق 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:localsystemتستطيع التصرف نيابةً عن عميل وهي تعمل بحساب غير LocalSystem.
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

شيئان يستحقان أن تعرفهما

بعض الحقول مكلفة، وطلبها يشغّل القراءة

قراءة التوقيعات تستغرق عدة ثوانٍ على جهاز كامل، والذاكرة قياس وليست إعدادًا، فلا يُقرأ أيٌّ منهما للقائمة ما لم يُطلب. والاستعلام الذي يذكر أحدهما يشغّل تلك القراءة من تلقاء نفسه، فلا داعي لأن تتذكر --signatures مع signed:no. وفي النافذة يقول الاستعلام عن التوقيعات إن الجواب غير مكتمل إلى أن تصل، بدل أن يعرض قائمة أقصر كأنها الجواب.

النتيجة التي حُكم فيها على شيء غير مقروء تقول ذلك

إذا حُكم على عناصر بناءً على حقل تعذرت على هذه الجلسة قراءته، فإن النتيجة تحمل سطرًا يذكر كم عنصرًا، لأن نتيجة كهذه قد تنقصها عناصر، أو تضم عناصر لا تنتمي إليها. وهذه القاعدة نفسها التي تلتزم بها الأداة كلها: القراءة الفاشلة ظاهرة في الجواب، ولا تُبتلع أبدًا. والناشر يعامل المعاملة نفسها حين لا تدّعيه إلا الشهادة: بجانب أي حكم غير trusted يُعرض الاسم على أنه not verified، ويحتسب publisher: العنصر غير مؤكَّد في سطر مستقل، فيُبقي !publisher:microsoft على ملف من Microsoft غيّره أحدهم بعد توقيعه.

مرجع سطر الأوامر