Почему множественный поиск не работает в запросе SC

Я написал командную строку

sc query PlugPlay | FIND "SERVICE_NAME" | FIND "STATE"

перечислять только название сервиса и его статус, но он не дает никакого вывода. Пожалуйста, исправьте меня, как перечислить только название службы и ее СОСТОЯНИЕ (работает или остановлено).

2 ответа

Вы можете сделать это с помощью встроенного в Windows findstr команда. Если вы дадите ему несколько слов для поиска, разделенных пробелами, он напечатает строки, соответствующие любому слову (т.е. findstr "a b" эквивалентно grep -E 'a|b').

sc query plugplay | findstr "SERVICE_NAME STATE"

Запуск двух конвейеров, подобных этому, не является операцией "или", это операция "и". Он будет выводить только те строки, которые содержат как SERVICE_NAME, так и STATE (которые будут отсутствовать, поэтому вывод не будет правильным). Если вы запускаете только первый найти, это дает

C:\>sc query PlugPlay | FIND "SERVICE_NAME"
SERVICE_NAME: PlugPlay

C:\>

и, таким образом, информация о состоянии уже удалена.

Окна find Команда слишком проста и ограничена, чтобы делать то, что вы хотите, но это может быть достигнуто с помощью команды unix grep. Например, из cygwin:

$ sc query PlugPlay | grep -E 'SERVICE_NAME|STATE'
SERVICE_NAME: PlugPlay
        STATE              : 4  RUNNING
$
Другие вопросы по тегам