2011-01-19 4 views
3

"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 ...) 

왜 이름 대신에 출력물이 나옵니까? 이름을 얻으려면 무엇을 입력해야합니까?

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

편집 :

답변

5

그것을 달성하기위한 가장 쉬운 방법은 당신이 그것을 수정할 수 있습니다

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

이 경우, 당신은 단지, 여기에 코드와 함께 가고 싶은 방법 -Filter 매개 변수입니다 사용 : LIKE 연산자는 일치하는 패턴을 지원하기 위해 몇 가지 메타 문자를 사용합니다.

[] - 범위를 매칭합니다. 예를 들어 Name LIKE '[a-f]%'은 a에서 f까지의 모든 문자로 시작하는 모든 서비스를 나열합니다.

^ - 아닙니다. 예를 들어 Name LIKE '[^a-f]%'은 a에서 f까지의 문자로 시작하지 않는 서비스를 나열합니다.

_ - 한 문자와 일치합니다. 예를 들어 Name LIKE 'S_L%'은 S로 시작하고 그 뒤에 임의의 문자가 오는 서비스를 나열합니다.

+0

감사합니다. 나의 다음 학습 작업 사이의 차이를 이해하기"를 선택 객체 -ExpandProperty 이름 " 및 "select-object {$ _. Name}" –

11

당신은 서비스-받기 대신 얻을-WMIObject에서 사용하고 이런 식으로 작업을 수행 할 수 있습니다 "

get-service sql* | select -expand name 
4
Get-Service | Where-Object {$_.Name -match "SQL"} |Select-Object Name 
관련 문제