Почему множественный поиск не работает в запросе 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
$