SWbemObject를 사용하여 스크립팅

SWbemObject 스크립팅 개체는 SWbemObject 개체가 바인딩된 특정 WMI 개체에 관계없이 사용할 수 있는 속성과 메서드를 정의하는 제네릭 WMI 개체입니다. Win32_Process의 인스턴스 또는 그 외 모든 WMI 데이터 클래스 등 모든 WMI 개체는 SWbemObject로 표시되며 고유한 특정 속성 및 메서드 외에도 SWbemObject 공통 속성과 메서드를 사용할 수 있습니다.

예를 들어 다음 스크립트를 사용하여 SWbemObject.Instances_ 메서드를 호출하여 Win32_Process의 모든 인스턴스를 가져옵니다. clsobjProcess는 Win32_Process 클래스 정의와 SWbemObject를 모두 나타냅니다.

strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set clsobjProcess = objWMIServices.Get("Win32_Process")
Set colProcesses = clsobjProcess.Instances_()
For Each Process in colProcesses
    WScript.Echo Process.Name
Next

다음 예제에서는 Alerter 서비스를 나타내며 이 서비스를 objAlerter에 저장하는 Win32_Service의 특정 인스턴스를 가져옵니다. 그런 다음 WScript.Echo objAlerter.Path_ 같은 SWbemObject 메서드 또는 WScript.Echo objAlerter.State와 같은 데이터 클래스에서 정의한 메서드를 호출할 수 있습니다. objAlerter - Win32_Service의 인스턴스와 SWbemObject를 모두 나타냅니다.

strComputer = "." 
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objAlerter = objWMIServices.Get("Win32_Service.Name='Alerter'")
WScript.Echo objAlerter.Path_
objAlerter.StopService()
WScript.Echo objAlerter.State
For each Prop in myObject.Properties_
    Wscript.Echo Prop.Name
Next

SWbemObject.Instances_ 호출은 또 다른 제네릭 WMI 스크립팅 개체인 SWbemObjectSet을 가져옵니다. 표시된 것처럼 SWbemObjectSet 개체는 컬렉션으로 처리할 수 있습니다.

Set clsobjProcess = objWMIServices.Get("Win32_Process")

SWbemObject 메서드는 모두 밑줄(_)로 끝나기 때문에 식별할 수 있습니다(예: SWbemObject.Instances_).

SWbemObjectExSWbemObject의 속성을 확장합니다. 예를 들어 이제 SWbemObjectEx.Refresh_를 호출하여 Win32_Process 인스턴스 등 모든 WMI 개체의 데이터를 업데이트할 수 있습니다.

다음 예제에서는 시스템 프로세스 페이지 오류 데이터를 5초마다 새로 고칠 수 있는 방법을 보여줍니다.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'System'",,48) 
For Each Process in colProcesses
        i = 0
        Do Until i = 5
            i = i + 1
            Wscript.Echo "PageFaults = " & Process.PageFaults 
            Wscript.Sleep 10000
            Process.Refresh_
        Loop
Next

SWbemRefresher 개체를 사용하여 데이터를 새로 고치는 방법에 관한 자세한 내용은 스크립트에서 WMI 데이터 새로 고침을 참조하세요.

SWbemObject.Put_PutAsync_를 사용하면 변경 내용을 WMI 개체에 다시 쓸 수 있습니다. 이러한 메서드는 개체가 생성된 네임스페이스에서 그 개체에 대한 변경 내용만 커밋합니다. SWbemServicesEx.Put 또는 SWbemServicesEx.PutAsync를 사용하여 개체를 다른 네임스페이스에 쓸 수 있습니다.

WMI용 스크립팅 API

WMI 스크립트 만들기

전체 인스턴스 업데이트

메서드 호출