El lenguaje de consulta

Haga una pregunta al equipo

Un único lenguaje, en el cuadro de búsqueda de la ventana y en bws list --query. Una palabra suelta busca en el nombre, el nombre para mostrar, la cuenta y la ruta de lanzamiento. Un campo la acota. 21 campos, y el mismo texto significa lo mismo en ambas mitades de la herramienta.

Seis que responden a una pregunta real

Lo que debería estar en marcha y no lo está

start:auto !status:running

La primera consulta que escribe casi todo el mundo, y la que services.msc no puede responder en absoluto.

Servicios cuyo archivo ha desaparecido

file:missing

Una entrada que apunta a un ejecutable que no está en el disco. Normalmente una desinstalación que dejó el registro tras de sí.

Sin firmar, sin el ruido de las sesiones

signed:no peruser:no

Las familias por usuario hacen una copia por sesión y llenan una lista de casi duplicados. Esto pregunta por el resto.

En marcha aunque esté deshabilitado

mismatch:running

Configuración y estado que no concuerdan: una entrada que el administrador tiene configurada para no iniciarse nunca, ejecutándose igualmente.

Todo lo que pide derechos de depuración

privilege:SeDebugPrivilege

Un privilegio que permite a un proceso abrir cualquier otro. Conviene saber qué servicios lo piden.

Lo que la herramienta no pudo leer

account:?

Las entradas cuya cuenta esta sesión no pudo leer. Una pregunta que services.msc ni siquiera puede hacer.

Cómo se escribe una consulta

Términos

  • Los términos se separan con espacios y todos deben coincidir: no hay palabra clave and porque no podría significar otra cosa.
  • El mismo campo escrito dos veces es la única excepción: status:running status:stopped significa uno u otro, porque eso es lo que escribe marcar dos filtros. Dos límites sobre un número sí acotan: pid:>1000 pid:<2000 es el intervalo entre ambos.
  • ! delante de un término lo niega: !status:running. En un archivo por lotes con setlocal EnableDelayedExpansion, cmd se come ese ! sin decir nada y la consulta significa en silencio otra cosa: escriba ^! entre las comillas allí.
  • Una coma dentro de un campo es un o: start:manual,disabled.
  • Las comillas protegen todo lo que lleve espacios o dos puntos: account:"NT SERVICE\McmSvc".
  • Una ruta pegada tal cual, C:\Windows\System32\svchost.exe, se busca, no se lee como un campo llamado C.

Cómo se compara el texto

  • name:spool coincide con todo lo que lo contiene: es lo predeterminado, porque es lo que se espera de un cuadro de búsqueda.
  • name:=spooler es exacto.
  • name:spool* admite comodines, * y ?.
  • name:/^Sql.*/ es una expresión regular, y entre las barras se escribe como se escriben las expresiones regulares: \?, \\ y una coma significan allí lo que significan allí. Una barra que nunca se cierra es un error; para buscar la propia barra, escriba \/ o use comillas.
  • Se ignoran las mayúsculas y minúsculas, también fuera de ASCII: un nombre para mostrar en polaco o en griego coincide se escriba como se escriba.

Tres palabras que acepta cualquier campo

  • any - hay un valor, sea cual sea
  • none - realmente no hay ningún valor: la entrada no tiene ninguno
  • ? - la herramienta no pudo leer este campo, o no lo ha leído, lo que es una pregunta que services.msc ni siquiera puede hacer

Un valor mal escrito es un error, nunca un resultado vacío. status:runing responde Did you mean running? y termina con el código 2. Una lista vacía parecería una respuesta, y la diferencia entre "nada coincide" y "lo escribió mal" es la diferencia entre un equipo limpio y una auditoría que no demostró nada. Una consulta que no acotaría nada también se rechaza en la línea de comandos, para que un script no opere sobre todo el equipo por una errata.

Más ejemplos

Cada uno funciona igual en el cuadro de búsqueda de la ventana y después de bws list --query, y cada uno se ejecutó en un Windows real antes de escribirse aquí. Lo que encuentra depende del equipo, y para una pregunta sobre problemas, una respuesta vacía es la que usted quiere.

Estado y tipo de inicio

ConsultaQué encuentra
status:stopPending,startPendingAtascados al detenerse o al iniciarse: la espera que muestra el complemento y que nunca termina.
start:auto status:stopped trigger:noneConfigurados para iniciarse automáticamente, detenidos y sin esperar a un desencadenador: la lista corta que vale la pena leer tras un reinicio.
start:delayedAutomático, iniciado un poco después de las demás entradas automáticas.
start:manual,disabled status:runningEn marcha aunque nada lo inicie al arrancar: algo lo pidió, un desencadenador lo inició o alguien lo hizo.

Cuentas

ConsultaQué encuentra
account:localsystem !publisher:microsoftSe ejecuta como LocalSystem, la cuenta más poderosa, desde un archivo que Microsoft no firmó. Una consulta sobre el editor lee las firmas por sí sola, así que tarda unos segundos.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessServicios que se ejecutan bajo cualquier otra cuenta: una virtual, una administrada o la de una persona.
account:"NT SERVICE"Una cuenta virtual del propio servicio. Las comillas mantienen juntas las palabras, por el espacio.

Archivos y firmas

ConsultaQué encuentra
signed:notSigned,untrustedRoot,tamperedSin firma, una cadena en la que Windows no confía, o un archivo modificado después de firmarse.
signed:trusted !publisher:microsoftFirmado, de confianza y no por Microsoft: el software que otras empresas han puesto en este equipo.
type:driver start:boot,system !signed:trustedControladores cargados al arrancar Windows cuya firma Windows no considera de confianza. En un equipo sano, ninguno.
!path:C:\Windows type:ownProcessUn servicio con proceso propio cuyo archivo está fuera de la carpeta de Windows.
path:\AppData\Lanzado desde dentro del perfil de alguien, el último lugar donde se espera un servicio.
path:\System32\\ type:ownProcessUna barra invertida delante de un espacio hace que el espacio forme parte de la palabra, así que una ruta que acaba en barra invertida se escribe con dos cuando le sigue otro término. Al final de la consulta basta una.

Desencadenadores y dependencias

ConsultaQué encuentra
trigger:device status:stoppedEsperando a que llegue un dispositivo, por lo que están detenidos por una razón.
trigger:networkIniciado cuando llega una solicitud a un punto de conexión de red: un puerto, una canalización con nombre o una interfaz RPC.
trigger:stopEntradas que un desencadenador puede detener, no solo iniciar.
dependson:WinmgmtEntradas que necesitan WMI para ejecutarse.
requiredby:SpoolerTodo lo que el Print Spooler necesita para ejecutarse, y lo que a su vez necesitan esos.

Privilegios y procesos

ConsultaQué encuentra
privilege:SeTcbPrivilegePide actuar como parte del sistema operativo.
privilege:SeImpersonatePrivilege !account:localsystemPuede actuar en nombre de un cliente mientras se ejecuta bajo una cuenta distinta de LocalSystem.
sidtype:unrestrictedLleva en su proceso un SID de servicio propio, de modo que los permisos pueden nombrarlo a él solo. sidtype:restricted pregunta por aquellos cuyo proceso además tiene restringida la escritura.
type:sharedProcess status:runningEn ejecución dentro de un svchost compartido, junto con otros.
memory:>200MBUn proceso que usa más de 200 MB. La memoria se lee por sí sola cuando una consulta pregunta por ella.
pid:1000-2000En un proceso cuyo identificador está entre 1000 y 2000.

Nombres y texto

ConsultaQué encuentra
spoolUna palabra suelta, buscada en el nombre, el nombre para mostrar, la cuenta y la ruta de lanzamiento.
name:=wuauservExactamente este nombre, y nada que solo lo contenga.
name:win*Nombres que empiezan por win, escritos con un comodín.
name:/svc$/Nombres que terminan en svc, escritos como expresión regular.
description:noneNinguna descripción en absoluto, que es el caso de la mayoría de los controladores.
description:?Una descripción que Windows no pudo entregar, normalmente porque apunta a un archivo de idioma que no está.
peruser:templateLas plantillas por usuario que Windows copia para cada sesión iniciada.

Cada campo

Construida a partir del propio programa, de modo que esta tabla no puede desviarse de lo que acepta la herramienta. Un campo sin lista de valores acepta texto, un número o un tamaño; la tercera columna dice cuál.

CampoPregunta porValores
nameel nombre del servicio, por el que lo identifica Windowstexto
displayel nombre para mostrar, como lo escribe este Windowstexto
descriptionlo que la entrada dice de sí mismatexto
typequé clase de entrada esdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
perusersi es una de las familias por usuario de las que Windows hace una copia por sesiónyes, no, template, instance
statuslo que está haciendo ahora mismorunning, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startlo que hace el administrador con ella en el próximo arranqueautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountla cuenta con la que se ejecuta, como la escribe el administradortexto, p. ej. localsystem
pidel proceso en el que se ejecutaun número: 1234, >1000, 100-200
triggeruna condición que la inicia o la detienedevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathla línea de comandos que lanza el administradortexto
filesi el archivo que ejecuta está en el discopresent, missing
signedlo que Windows piensa de la firma del archivo, sin comprobar la revocaciónyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherquién firmó el archivo: solo demostrado por una firma de confianzatexto
privilegeun privilegio que pide la entradatexto, p. ej. SeDebugPrivilege
dependsonlo que necesita estaun nombre de servicio
requiredbylo que deja de funcionar si esta se detieneun nombre de servicio
sidtypeel tipo de SID del serviciounrestricted, restricted, unknown
sddlel descriptor de seguridad, como textotexto
memorylo que usa su procesoun tamaño con unidad: 500MB, >1GB, 100MB-1GB
mismatchconfiguración y estado que no concuerdanstopped, running

Dos cosas que conviene saber

Algunos campos son caros, y pedirlos activa la lectura

Las firmas tardan varios segundos en todo un equipo y la memoria es una medición y no un ajuste, así que ninguna se lee para un listado salvo que se pida. Una consulta que menciona una activa esa lectura por sí sola: no tiene que acordarse de --signatures además de signed:no. En la ventana, una consulta sobre firmas dice que la respuesta está incompleta hasta que llegan, en lugar de mostrar una lista más corta como si fuera la respuesta.

Un resultado juzgado sobre algo ilegible lo dice

Si se juzgaron entradas por un campo que esta sesión no pudo leer, el resultado lleva una línea que dice cuántas, porque un resultado así puede estar omitiendo entradas, o contener otras que no corresponden. Es la misma regla que sigue toda la herramienta: una lectura fallida es visible en la respuesta, nunca se traga. Un editor recibe el mismo trato cuando solo el certificado lo afirma: junto a cualquier veredicto que no sea trusted el nombre se muestra como not verified, y publisher: cuenta la entrada como dudosa en una línea aparte, de modo que !publisher:microsoft conserva un archivo de Microsoft que alguien modificó después de firmarse.

La referencia de la línea de comandos