서비스에 대한 WMI 작업은 종속 서비스 또는 선행 서비스를 포함하여 서비스에 대한 정보를 가져옵니다. 다른 예제는 https://www.microsoft.com/technetTechNet ScriptCenter를 참조하세요.
이 항목에 표시된 스크립트 예제는 로컬 컴퓨터에서만 데이터를 가져옵니다. 스크립트를 사용하여 원격 컴퓨터에서 데이터를 가져오는 방법에 대한 자세한 내용은 원격 컴퓨터 WMI에 연결하는참조하세요.
다음 절차에서는 스크립트를 실행하는 방법을 설명합니다.
스크립트 실행하려면
- 코드를 복사하고 .vbs 확장명(예: filename.vbs파일에 저장합니다. 텍스트 편집기가 파일에 .txt 확장자를 추가하지 않는지 확인합니다.
- 명령 프롬프트 창을 열고 파일을 저장한 디렉터리로 이동합니다.
- 명령 프롬프트에서 cscript filename.vbs 입력합니다.
- 이벤트 로그에 액세스할 수 없는 경우 관리자 권한 명령 프롬프트에서 실행 중인지 확인합니다. 보안 이벤트 로그와 같은 일부 이벤트 로그는 UAC(사용자 액세스 제어)로 보호될 수 있습니다.
메모
기본적으로 cscript는 명령 프롬프트 창에 스크립트의 출력을 표시합니다. WMI 스크립트는 많은 양의 출력을 생성할 수 있으므로 출력을 파일로 리디렉션할 수 있습니다. 명령 프롬프트에서 cscript filename.vbs > outfile.txt 입력하여 filename.vbs 스크립트의 출력을 outfile.txt리디렉션합니다.
다음 표에서는 로컬 컴퓨터에서 다양한 형식의 데이터를 가져오는 데 사용할 수 있는 스크립트 예제를 나열합니다.
| ... 실행 중인 서비스와 실행되지 않는 서비스를 결정합니까? |
Win32_Service 클래스를 사용하여 모든 서비스의 상태를 확인합니다. 상태 속성을 사용하면 서비스가 중지되거나 실행 중인지 알 수 있습니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service",,48)
For Each objItem in colItems
Wscript.Echo "Service Name: " & objItem.Name & VBNewLine & "State: " & objItem.State
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | format-list Name, State
|
|
| ... Power Users가 특정 서비스를 시작하지 못하게 하시겠습니까? |
Win32_Service 클래스와 ChangeStartMode 메서드를 사용하여 StartMode 속성을 Disabled로 설정합니다. 비활성화된 서비스는 시작할 수 없으며 기본적으로 Power Users는 서비스의 시작 모드를 변경할 수 없습니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where StartMode = 'Manual'")
For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Disabled")
WScript.Echo "Changed manual service to disabled: " & objService.Name
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.startMode -eq "Manual"} | `
foreach-object { [void]$_.changeStartMode('Disabled') }
|
|
| ... 서비스를 시작하고 중지하시겠습니까? |
Win32_Service 클래스와 StopService 및 StartService 메서드를 사용합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='Alerter'")
For Each objService in colListOfServices
objService.StartService()
Wscript.Echo "Started Alerter service"
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.Name -eq "Alerter"} | `
foreach-object { [void]$_.StartService() }
|
|
| ... 스크립트를 사용하여 서비스 계정 암호를 변경하시겠습니까? |
Win32_Service 클래스와 Change 메서드를 사용합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objservice in colServiceList
If objService.StartName = ".\netsvc" Then
errReturn = objService.Change( , , , , , , , "password")
End If
Next
|
|
| .. 은 중지할 수 있는 서비스를 결정합니까? |
Win32_Service 클래스를 사용하고 AcceptStop 속성의 값을 확인합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where AcceptStop = True")
For Each objService in colServices
Wscript.Echo objService.DisplayName
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.AcceptStop -eq "True"} | `
format-list DisplayName
|
|
| ... DHCP 서비스를 시작하기 전에 실행해야 하는 서비스를 찾으시겠습니까? |
Win32_DependentService 클래스에 있고 Role 속성에 "Dependent"이 있는 "DHCP"라는 Win32_Service 클래스를 ASSOCIATORS를 쿼리합니다.
역할 DHCP 서비스의 역할을 의미합니다. 이 경우 시작 중인 다른 서비스에 따라 달라집니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators Of " _
& "{Win32_Service.Name='dhcp'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Dependent")
For Each objService in colServiceList
Wscript.Echo objService.DisplayName
Next
|
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
|
|
| ... WMI 서비스(Winmgmt) 서비스를 실행해야 시작할 수 있는 서비스를 찾을 수 있나요? |
Win32_DependentService 클래스에 있고 Role 속성에 "Antecendent"가 있는 "DHCP"라는 Win32_Service 클래스를 ASSOCIATORS를 쿼리합니다.
역할 rasman 서비스의 역할을 의미합니다. 이 경우 종속 서비스 전에 시작해야 합니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\ & strComputer & "\root\cimv2")
Set colServiceList = _
objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='winmgmt'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Antecedent" )
For Each objService in colServiceList
Wscript.Echo "Name: " & objService.Name & VBTab & "Display Name: " & objService.DisplayName
Next
|
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName
|
|
-
스크립트 및 애플리케이션 대한 WMI 작업
-
WMI C++ 애플리케이션 예제
-
TechNet ScriptCenter
`