Показать все имена сервисов, соответствующие строковому шаблону - PullRequest
7 голосов
/ 19 января 2011

Я пытаюсь отобразить имя (только имя) всех установленных служб, которые содержат строку «SQL».Например, я хочу видеть

  • SQLAgent $ SQL2008_R2
  • SQLBrowser
  • SQLWriter

Поэтому я пытаюсь это сделать:

Get-WmiObject Win32_Service

Здесь отображаются все службы, но в виде списка.

Exit Code : 0
Name      : ProtectedStorage
ProcessId : 664
StartMode : Manual
State     : Running
Status    : OK

Exit Code : 1077
Name      : QWAVE
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK
(etc...)

Это хорошо, но я просто хочу увидеть название.Поэтому я набираю:

Get-WmiObject Win32_Service | select-object Name

И получаю то, что ожидаю:

sppuinotfy
SQLAgent$SQL2008_RT
SQLBrowser
SQLWriter
SSDPSRV
(etc ..)

Все хорошо.Я делаю следующий шаг фильтрации имен, чтобы включить только связанные с SQL:

Get-WmiObject Win32_Service | select-object Name | select-string -pattern 'SQL'

И теперь это сбивает с толку.Вот мой вывод:

@{Name=BcmSqlStartupSvc}
@{Name=MSOLAP$SQL2008_R2}
@{Name=MSSQL$SQL2008_R2}
(etc ...)

Почему я получаю этот вывод, а не только имена?Что я должен печатать, чтобы получить только имена?

Ответы [ 3 ]

17 голосов
/ 19 января 2011

Вы можете использовать Get-Service вместо get-WMIObject и делать это так "

get-service sql* | select -expand name
12 голосов
/ 19 января 2011

Самый простой способ добиться этого - использовать -Filter Параметр

Get-WMIObject Win32_Service -Filter "Name LIKE '%SQL%'" | 
Select -ExpandProperty Name

Если вы хотите использовать только свой код, вы можете изменить его следующим образом:

Get-WmiObject Win32_Service | Select-Object -ExpandProperty Name | 
Select-String -pattern 'SQL'

Редактировать: оператор LIKE принимает несколько метасимволов для поддержки сопоставления с шаблоном.

[] - для согласования диапазона.Например, Name LIKE '[a-f]%' перечислит все службы, начиная с любой буквы от a до f.

^ - нет.Например, Name LIKE '[^a-f]%' будет перечислять службы, которые не начинаются с какой-либо буквы от a до f.

_ - соответствует одной букве.Например, Name LIKE 'S_L%' выведет список служб, которые начинаются с буквы S и сопровождаются любой буквой.

7 голосов
/ 25 февраля 2015
Get-Service | Where-Object {$_.Name -match "SQL"} |Select-Object Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...