共用方式為


Configuration Manager報表的 WMI 命名空間和類別Configuration Manager

安裝Configuration Manager時,會建立數個 Windows Management Instrumentation (WMI) 命名空間,而且根據命名空間,可以在每個命名空間下建立數百個類別。 此外,每個月臺可能會有其他月臺可能沒有的類別,視特定網站設定、追蹤的清查等而定。

Configuration Manager建立的 WMI 命名空間

下列 WMI 命名空間是由 Configuration Manager 所建立:

  • root\ccm
    • root\ccm\CCMPasswordSettings
    • root\ccm\CIModels
    • root\ccm\CIStateStore
    • root\ccm\CIStore
    • root\ccm\CITasks
    • root\ccm\ClientSDK
    • root\ccm\ContentTransferManager
    • root\ccm\DataTransferService
    • root\ccm\dcm
    • root\ccm\DCMAgent
    • root\ccm\evaltest
    • root\ccm\Events
    • root\ccm\InvAgt
    • root\ccm\LocationServices
    • root\ccm\Messaging
    • root\ccm\NetworkConfig
    • root\ccm\PeerDPAgent
    • root\ccm\Policy
    • root\ccm\PowerManagementAgent
    • root\ccm\RebootManagement
    • root\ccm\ScanAgent
    • root\ccm\Scheduler
    • root\ccm\SMSNapAgent
    • root\ccm\SoftMgmtAgent
    • root\ccm\SoftwareMeteringAgent
    • root\ccm\SoftwareUpdates
    • root\ccm\StateMsg
    • root\ccm\VulnerabilityAssessment
    • root\ccm\XmlStore
    • root\cimv2\sms
    • root\smsdm
    • root\sms
    • root\sms\site_< site code >

如何使用 Visual Basic 腳本擷取Configuration Manager WMI 命名空間和類別

列出已在您網站上建立之Configuration Manager相關類別的簡單方式,是執行Microsoft Visual Basic 腳本。 下列腳本會掃描上述每個 WMI 命名空間內的所有類別,並將結果輸出至文字檔。

若要執行腳本來掃描 WMI 命名空間和類別

  1. 將下列程式碼複製到記事本:

        '======================================================================================= 
        ' 
        ' NAME: WMIScan.vbs 
        ' 
        ' AUTHOR:  Microsoft Corporation 
        ' DATE  : 10/24/2013 (Revised for System Center 2012 Configuration Manager by Rob Stack) 
        ' 
        ' COMMENT: Script to scan Configuration Manager WMI classes. 
        ' 
        '======================================================================================= 
    
        Dim SearchChar 
        Dim TotChar 
        Dim RightChar 
        Dim ClassName 
        Dim Computer 
        Dim strComputer 
        Dim strUser 
        Dim strPassword 
        Dim strSiteCode 
        Dim strNameSpace 
        Dim strFolder 
        Dim strFile 
        Dim strLogFile 
        Dim strFullFile 
        Dim strFullLogFile 
        Dim isError 
    
        Const ForWriting = 2 
        Const ForAppending = 8 
        Const adOpenStatic = 3 
        Const adLockOptimistic = 3 
        Const adUseClient = 3 
    
        set colNamedArguments=wscript.Arguments.Named 
        If colNamedArguments.Exists("Sitecode") Then 
          strSiteCode = colNamedArguments.Item("Sitecode") 
        Else 
          WScript.Echo "Invalid Command Line Arguments" & vbCrLf & _ 
            vbCrLf & "Usage: WMIScan.vbs /Sitecode:<sitecode> " & _ 
            "/Computer:<computername>" & vbCrLf & vbCrLf & _ 
            "Example1: WMIScan.vbs /Sitecode:PS1" & vbCrLf & _ 
            "Example2: WMIScan.vbs /Sitecode:PS1 /Computer:Computer1" 
          WScript.Quit(1) 
        End If 
        If colNamedArguments.Exists("Computer") Then 
          strComputer = colNamedArguments.Item("Computer") 
        Else strComputer = "." 
        End If 
    
        'Define the values for files and folders. 
        strFolder = "c:\WMIScan" 
        strFile = "WMIScan.txt" 
        strLogFile = "WMIScan.log" 
        strFullFile = strFolder & "\" & strFile 
        strFullLogFile = strFolder & "\" & strLogFile 
        isError = 0 
    
        'List of Configuration Manager namespaces are put into an array. 
        arrNameSpaces = Array("root\ccm","root\ccm\CCMPasswordSettings","root\ccm\CIModels",_
        "root\ccm\CIStateStore","root\ccm\CIStore","root\ccm\CITasks",_
        "root\ccm\ClientSDK","root\ccm\ContentTransferManager","root\ccm\DataTransferService",_
        "root\ccm\dcm","root\ccm\DCMAgent","root\ccm\evaltest",_
        "root\ccm\Events","root\ccm\InvAgt","root\ccm\LocationServices",_
        "root\ccm\Messaging","root\ccm\NetworkConfig","root\ccm\PeerDPAgent",_
        "root\ccm\Policy","root\ccm\PowerManagementAgent","root\ccm\RebootManagement",_
        "root\ccm\ScanAgent","root\ccm\Scheduler","root\ccm\SMSNapAgent",_
        "root\ccm\SoftMgmtAgent","root\ccm\SoftwareMeteringAgent","root\ccm\SoftwareUpdates",_
        "root\ccm\StateMsg","root\ccm\VulnerabilityAssessment","root\ccm\XmlStore",_
        "root\cimv2\sms","root\smsdm","root\sms",_
        "root\sms\site_"& strSiteCode)
    
        'Creates the folder and files for the scan output and log file. 
        Set objFSO = CreateObject("Scripting.FileSystemObject") 
    
        'Does strFolder Folder exist? If not, it's created. 
        If Not objFSO.FolderExists(strFolder) then 
          Set objFolder = objFSO.CreateFolder(strFolder) 
        End If 
    
        'Creates the WMIScan.txt and WMIScan.log files. 
        Set objFile = objFSO.CreateTextFile(strFullFile) 
        Set objLogFile = objFSO.CreateTextFile(strFullLogFile) 
        objFile.close 
        objLogFile.close 
    
        'Opens the WMIScan.log file in write mode. 
        Set objFSO = CreateObject("Scripting.FileSystemObject") 
        Set objLogFile = objFSO.OpenTextFile(strFullLogFile, ForWriting) 
        objLogFile.WriteLine "********************************************" 
        objLogFile.WriteLine " WMIScan Tool Executed - " & Now() 
        objLogFile.WriteLine "********************************************" 
    
        'Opens the WMIScan.txt file in write mode. 
        Set objFile = objFSO.OpenTextFile(strFullFile, ForWriting) 
        objLogFile.WriteLine "--------------------------------------------" 
        Computer = strComputer 
        If Computer = "." Then Computer = "Local System" 
        objLogFile.WriteLine " Scanning WMI Namespaces On " & Computer 
        objLogFile.WriteLine "--------------------------------------------" 
    
        WScript.echo "Starting WMI scan on " & Computer 
    
        'Create a collection of Namespaces from the array, and 
        ' call the EnumNameSpaces subroutine to do the scan. 
        For Each strNameSpace In arrNameSpaces 
           Call EnumNameSpaces(strNameSpace, strComputer) 
        Next 
        objLogFile.WriteLine "---------------------------------------------" 
        objLogFile.WriteLine " Done scanning WMI Namespaces on " & Computer 
        objLogFile.WriteLine "---------------------------------------------" 
    
        'Close the WMISscan.txt file. 
        objFile.close 
    
        If isError = 1 Then 
          WScript.Echo "WMI Scan has Completed with Errors!" & vbCrLf & _ 
          "Check the " & strLogFile & " file for more details." & vbCrLf & _ 
          vbCrLf & strFile & " & " & strLogFile & " have been written to "_ 
          & strFolder & "." 
        Else 
          WScript.Echo "WMI Scan has Completed without any Errors!" & _ 
          vbCrLf & vbCrLf & strFile & " & " & strLogFile & _ 
          " have been written to " & strFolder & "." 
        End If   
    
        '*************************************************************** 
        '***   Subroutine to do the classes scan on the namespace.   *** 
        '*************************************************************** 
        Sub EnumNameSpaces(strNameSpace, strComputer) 
          Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
          On Error Resume next 
          Set objSWbemServices= objSWbemLocator.ConnectServer (strComputer,_ 
            strNameSpace) 
          objLogFile.Write "Connecting to the \\" & strComputer & "\" &_ 
            strNameSpace & " WMI NameSpace...." 
          If Err.number = 0 Then  
            objLogFile.WriteLine "Success!!" 
            objLogFile.Write "  Scanning for Classes in "&strNameSpace _ 
              & "..." 
    
            'Create a collection of all the subclasses of the namespace. 
            Set colClasses = objSWbemServices.SubclassesOf() 
    
            'Scan all WMI classes, and write them to the scan1.txt file. 
            objFile.WriteBlanklines(1) 
            objFile.WriteLine "\\" & strComputer & "\" & strNameSpace 
    
            For Each objClass In colClasses 
              SearchChar = instr(objClass.Path_.Path, ":") 
              TotChar = len(objClass.Path_.Path) 
              RightChar = TotChar - SearchChar 
              ClassName = right(objClass.Path_.Path,RightChar) 
              objFile.WriteLine "   " & ClassName 
            Next 
            objLogFile.WriteLine "Success!!" 
          ElseIf Err.Number = -2147024891 Then 
            objLogFile.WriteLine "Error " & Err.Number & _ 
              "! Connection to "& strComputer & " Failed!" 
            isError = 1 
          Elseif Err.Number = -2147217394 Then 
            objLogFile.WriteLine "Error " & Err.Number & "!! Namespace "&_ 
              strNameSpace & " NOT Found!!" 
            isError = 1   
          Else 
            objLogFile.WriteLine "Error " & Err.Number & "!!" 
          isError = 1 
          End If 
    
        End Sub
    
  2. 建立名為 C:\WMIScan 的資料夾。

  3. 將腳本儲存為 C:\WMIScan 資料夾中的WMIScan.vbs。

  4. 開啟 [命令提示字元] 視窗。

  5. 輸入 C:\WMIScan\WMIScan.vbs /sitecode:ABC ,然後按 Enter 鍵。 請務必將 ABC 取代為適當的月臺碼。

    注意事項

    上述命令列假設腳本是從Configuration Manager月臺伺服器執行。 若要連線到遠端月臺伺服器上的 WMI,請使用 /computer: < computername 自變 > 量來指定遠端電腦。 例如,若要連線到 Computer1 上的月臺碼 ABC,您會在命令列中輸入 C:\WMIScan\WMIScan.vbs /sitecode:ABC /computer:Computer1。

當在Configuration Manager主要月臺伺服器上執行時,腳本會在 C:\WMIScan) 中建立文字檔 (,其中包含每個 WMI 命名空間中的所有 WMI 類別,以供Configuration Manager使用。 也會建立記錄檔,其中列出所有掃描的命名空間,以及掃描是否成功。 請注意,某些月臺伺服器上不會有某些命名空間,視已設定的選項而定。

另請參閱

Configuration Manager中的 SMS 提供者 WMI 架構參考