본문 바로가기

RDBMS/SQL Server

WMI Code Creator v1.0

다운로드 링크 : http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&DisplayLang=en

* 분류를 SQL Server에 두기는 약간 난감하지만 SQL Server의 성능 카운터 조회 작업을 하려다가 찾은 유틸이다보니 일단 여기에 적어두도록 하겠다.

SQL Server, 혹은 윈도우 계열 서버에서 운용중인 서비스에 대해서 성능 카운터를 조회하고 로그를 남기는 등의 작업이 필요한 경우가 있다. 일반적인 서버 성능 카운터(네트워크 대역 사용량이라든가 CPU 사용량이라든가)에 대한 스크립트는 예제 코드를 구하기가 쉬운 편이나 SQL Server, 혹은 아예 서드파티의 서버를 사용하고 있다면 성능 카운터가 있다는 것은 알겠는데 대체 WMI에 랩핑된 이름을 알 수 없는 경우가 종종 있다. 물론 아예 닷넷 프로그램을 작성할 수 있다면 닷넷 프레임워크에서 제공하는 성능 카운터 관련 어셈블리를 사용하면 되겠지만, 그게 또 항상 닷넷을 사용할 수 있는 것도 아니고, 윈도우 계열 서버에서 일반적인 관리 작업은 거의 vbs를 사용하다보니 wmi 기반으로 작업하는 것이 여러모로 편하다.

해서,

MS에서는 WMI 클래스를 조회하고, 클래스에 대한 코드를 자동으로 생성해주는 툴을 제공하고 있다.


사용자 삽입 이미지

WMI Code Creator

상당히 직관적이기 때문에 대충 이것저것 클릭해보면 뭐에 쓰는지는 충분히 알 수 있을 듯. 여기에서 생성한 스크립트를 조금만 고쳐서 파일로 저장, 로그를 생성하거나 다른 서버로 보내는 등 활용 방법은 고민해보면 여러 가지가 있지 않을까 싶다.

다음은 WMI를 조회하는 vbs의 예 :

Dim oFSO
Dim oOutput
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\Comshare\APSRV")
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM APSRV_AppServer",,48)

For Each objItem in colItems
    if objItem.Inst = "AppServ1" then
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        Set oOutput = oFSO.CreateTextFile("c:\output.txt")
        oOutput.Write "Inst: " & objItem.Inst & vbCrLf
        oOutput.Write "Major: " & objItem.Major & vbCrLf
        oOutput.Write "Minor: " & objItem.Minor & vbCrLf
        oOutput.Write "MaxUsers: " & objItem.MaxUsers & vbCrLf
        oOutput.Write "NumUsers: " & objItem.NumUsers & vbCrLf
        oOutput.Write "Build: " & objItem.Build & vbCrLf
        oOutput.Write "StateString: " & objItem.StateString & vbCrLf
        oOutput.Close
        Set oOutput = Nothing
        Set oFSO = Nothing
    end if
Next