通過 COM 從 Orchestrator 中獲得更深入的訊息

我們發現很多用戶會利用 Orchestrator 來獲得一些有關安裝過程的內部工作機制的訊息,而這些訊息都是無法通過 Web 服務所獲得的。Web 服務可讓您檢索有關以下內容的資訊:

• 文件夾

• Runbook

• Runbook 參數

• 活動

• 作業

• Runbook 實例

• Runbook 實例參數

• 活動實例

• 活動實例數據

• Runbook 服務器

• Runbook 關系圖

• 統計訊息

• 事件

除了開始和停止作業外,其他所有通過 Web 服務所獲得的內容都是唯讀的。但是,用戶希望能夠編寫和修改,並執行類似於以下的操作:

•    查看並修改變量和計數器

•    查看安裝了哪些集成包

•    查看日誌歷史記錄

•    導出或導入 Runbook

•    簽入或簽出(或取消簽出)Runbook

•    查看哪位用戶擁有連接到 Management Server 的 Runbook Designer

這些功能,以及更多功能均可於 Orchestrator COM 介面使用。我們將撰寫一篇新的文章來解釋如何連接到 COM 介面,並使用該介面來進行多個有助於您進一步自動化與 Orchestrator 交互的操作。由於使用 C# 代碼進行編寫和編譯更為簡單,我們將在這些範例中使用 PowerShell。

首先,先打開一個 PowerShell (x86) ISE(這是因為 Orchestrator 2012 為 64 位軟體)。請注意,在這一範例中,您將需要在 Orchestrator Management Server 上進行操作。

使用以下命令在 PowerShell 中創建一個新項目:

$oismgr = new-object -com OpalisManagementService.OpalisManager

可以從這裡查看到 COM 的內容,以及所有可用的方法列表(這些方法的數量很多!):

$oismgr | gm

   TypeName: System.__ComObject#{9b7ffff7-3ac0-40ce-b2ae-99514a43307e}

$oismgr | gm

   TypeName: System.__ComObject#{9b7ffff7-3ac0-40ce-b2ae-99514a43307e}

Name                                    MemberType Definition                                                                                   
----                                    ---------- ----------                                                                                   
AccessCheck                             Method     void AccessCheck (int, string, int, string, Variant)                                         
AddFolder                               Method     void AddFolder (int, string, Variant)                                                        
AddIntegrationPack                      Method     void AddIntegrationPack (int, Variant)                                                       
AddPolicy                               Method     void AddPolicy (int, string, Variant)                                                        
AddResource                             Method     void AddResource (int, string, Variant)                                                      
AddUserToRuntimeRole                    Method     void AddUserToRuntimeRole (int, string)                                                      
ChangeLicense                           Method     void ChangeLicense (string, string)                                                          
CheckIn                                 Method     void CheckIn (int, string, string, string)                                                   
CheckOut                                Method     void CheckOut (int, string, string, Variant)                                                 
ClientConnectSignal                     Method     void ClientConnectSignal (Variant)                                                           
ConfigureActionServer                   Method     void ConfigureActionServer (int, string, Variant)                                            
Connect                                 Method     void Connect (string, string, Variant)                                                       
CreatePolicyRequest                     Method     void CreatePolicyRequest (int, string, int, string, string, string, string, Variant, Variant)
DeleteEvent                             Method     void DeleteEvent (int, string)                                                               
DeleteFolder                            Method     void DeleteFolder (int, string, int)                                                         
DeleteLogEntry                          Method     void DeleteLogEntry (int, string, string)                                                    
DeleteObject                            Method     void DeleteObject (int, string, string, int)                                                 
DeletePolicy                            Method     void DeletePolicy (int, string, int)                                                         
DeletePolicyImages                      Method     void DeletePolicyImages (Variant)                                                            
DeleteResource                          Method     void DeleteResource (int, string, string)                                                    
Disconnect                              Method     void Disconnect (int, string)                                                                
DoesPolicyExist                         Method     void DoesPolicyExist (string)                                                                
Find                                    Method     void Find (int, string, int, string, string, Variant)                                        
FindPoliciesWithoutImages               Method     void FindPoliciesWithoutImages (int, Variant)                                                
GetActionServers                        Method     void GetActionServers (int, string, Variant)                                                 
GetActionServerTypes                    Method     void GetActionServerTypes (int, Variant)                                                     
GetAuditHistory                         Method     void GetAuditHistory (int, string, string, string, Variant)                                  
GetCheckOutStatus                       Method     void GetCheckOutStatus (int, string, Variant)                                                
GetClientConnections                    Method     void GetClientConnections (int, Variant)                                                     
GetConfigurationIds                     Method     void GetConfigurationIds (int, Variant)                                                      
GetConfigurationValues                  Method     void GetConfigurationValues (int, string, Variant)                                           
GetCountersValueAndMarker               Method     void GetCountersValueAndMarker (Variant)                                                     
GetCustomStartParameterName             Method     void GetCustomStartParameterName (string, Variant)                                           
GetCustomStartParameters                Method     void GetCustomStartParameters (Variant)                                                      
GetDatastoreType                        Method     void GetDatastoreType (int)                                                                  
GetEventDetails                         Method     void GetEventDetails (string, Variant)                                                       
GetEvents                               Method     void GetEvents (Variant)                                                                     
GetFolderContents                       Method     void GetFolderContents (int, string, Variant)                                                
GetFolderPathFromID                     Method     void GetFolderPathFromID (string, Variant)                                                   
GetFolders                              Method     void GetFolders (int, string, Variant)                                                       
GetInstanceStatusForRequests            Method     void GetInstanceStatusForRequests (int, Variant, Variant, Variant)                           
GetIntegrationPacks                     Method     void GetIntegrationPacks (int, Variant)                                                      
GetLatestPolicyReturnDataDefinition     Method     void GetLatestPolicyReturnDataDefinition (string, Variant, Variant)                          
GetLicenseExpirationTime                Method     void GetLicenseExpirationTime (string)                                                       
GetLicenseInformation                   Method     void GetLicenseInformation (int, string, Variant)                                            
GetLogHistory                           Method     void GetLogHistory (int, string, int, Variant)                                               
GetLogHistoryObjectDetails              Method     void GetLogHistoryObjectDetails (int, string, string, string, Variant)                       
GetLogHistoryObjects                    Method     void GetLogHistoryObjects (int, string, string, Variant)                                     
GetLogObjectDetails                     Method     void GetLogObjectDetails (int, string, string, string, Variant)                              
GetObjectSecurity                       Method     void GetObjectSecurity (int, string, Variant)                                                
GetObjectTypes                          Method     void GetObjectTypes (int, Variant)                                                           
GetPolicyIDFromPath                     Method     void GetPolicyIDFromPath (string, Variant)                                                   
GetPolicyInputParameterId               Method     void GetPolicyInputParameterId (int, string, string, string)                                 
GetPolicyObjectList                     Method     void GetPolicyObjectList (int, string, Variant)                                              
GetPolicyPathFromID                     Method     void GetPolicyPathFromID (string, Variant)                                                   
GetPolicyPublishState                   Method     void GetPolicyPublishState (int, string, int)                                                
GetPolicyRunningState                   Method     void GetPolicyRunningState (Variant, Variant)                                                
GetPolicyRunStatus                      Method     void GetPolicyRunStatus (int, string, Variant)                                               
GetProductKey                           Method     void GetProductKey (string)                                                                  
GetRequestOutputData                    Method     void GetRequestOutputData (int, Variant, Variant, Variant)                                   
GetResources                            Method     void GetResources (int, string, string, Variant)                                             
GetRunbookTesterPublishedRequests       Method     void GetRunbookTesterPublishedRequests (int, Variant)                                        
GetVersionInformation                   Method     void GetVersionInformation (Variant)                                                         
Initialize                              Method     void Initialize ()                                                                           
IsPolicyRunning                         Method     void IsPolicyRunning (int, string)                                                           
LoadObject                              Method     void LoadObject (int, string, Variant)                                                       
LoadPolicy                              Method     void LoadPolicy (int, string, Variant)                                                       
LoadResource                            Method     void LoadResource (int, string, Variant)                                                     
ModifyFolder                            Method     void ModifyFolder (int, string, Variant)                                                     
ModifyObject                            Method     void ModifyObject (int, string, string, Variant)                                             
ModifyPolicy                            Method     void ModifyPolicy (int, string, Variant, Variant)                                            
ModifyResource                          Method     void ModifyResource (int, string, Variant)                                                   
MoveObject                              Method     void MoveObject (int, string, string, string)                                                
PolicyHasMonitor                        Method     void PolicyHasMonitor (int, string, Variant)                                                 
RemoveClientConnection                  Method     void RemoveClientConnection (string)                                                         
RemoveIntegrationPack                   Method     void RemoveIntegrationPack (int, Variant)                                                    
RemoveSatellite                         Method     void RemoveSatellite (string)                                                                
Replace                                 Method     void Replace (int, string, int, string, string, string, Variant)                             
RetrievePoliciesLinkedToAS              Method     void RetrievePoliciesLinkedToAS (string, Variant)                                            
SetConfigurationValues                  Method     void SetConfigurationValues (int, string, Variant)                                           
SetLicenseInformation                   Method     void SetLicenseInformation (int, string, Variant)                                            
SetObjectSecurity                       Method     void SetObjectSecurity (int, string, string)                                                 
SetPolicyImage                          Method     void SetPolicyImage (int, string, int, Variant)                                              
SetPolicyPublishState                   Method     void SetPolicyPublishState (int, string, int)                                                
SetPolicyPublishStateWithParams         Method     void SetPolicyPublishStateWithParams (int, string, int, string)                              
SetPolicyPublishStateWithParamsAndGetID Method     void SetPolicyPublishStateWithParamsAndGetID (int, string, int, string, Variant)             
SetReportingOptions                     Method     void SetReportingOptions (int, string)                                                       
StartSqmNotification                    Method     void StartSqmNotification ()                                                                 
UndoCheckOut                            Method     void UndoCheckOut (int, string, int, Variant)                                                
UpdateClientActivity                    Method     void UpdateClientActivity (string, string)

很遺憾,其他地方都沒有記錄這些方法,因此有時您需要進行多次嘗試才能正常運行,幸運的是,我們將為您避免這些麻煩。在使用 COM 介面時,Orchestrator 中的安全模式仍然有效,而且您需要擁有管理員權限才能使用其中很多功能,因此,這實際上稍微提高了 Orchestrator 的限制程度,而這對於用戶而言將是一條好消息。而且大多數操作需要用戶(通過連接方法)建立一個連接控制代碼,但是用戶也可在不進行連接的情況下使用其他方法(如 GetEvents)。此處所顯示的一些介面並未真正執行,或可從外部代碼中查詢。

為了向您展示這些內容的工作原理,我們將從不需要任何連接控制代碼就可以運行的 GetEvents 開始。對於許多方法而言,它們需要在一個對象周圍設置一個 “可變包裝”,以創立該方法所預期的 “可變” 類型。此外,您還將經常在一個將成為該方法輸出的引用變量中傳遞,而非只是在 HResult 程式碼的 “返回值” 中傳遞。

        $oismgr = new-object -com OpalisManagementService.OpalisManager
        $oevents = New-Object object
        $events = $events = New-Object Runtime.InteropServices.VariantWrapper($oevents)
        $oismgr.GetEvents([ref]$events)
        $xml = [XML]$events
        $xml.OuterXml

該方法將輸出類似於以下內容的程式碼(我們編排了該 XML 的格式,以更易於您查看):

<Events>
  <Event>
    <UniqueID>{09A4CEEE-8EBE-4D1C-B5DD-06DA3EBCE01A}</UniqueID>
    <Type>Information</Type>
    <Computer></Computer>
    <Summary>Completed Log Cleanup</Summary>
    <DateTime>
      129782594190000000
    </DateTime>
  </Event>
</Events>

因此,您可發現從 COM 介面中獲取訊息相對而言會簡單很多。當然,我們更願意從 Web 服務中獲取諸如事件之類的訊息,因此這樣更容易處理。現在,一起來看看將如何執行需要憑據和連接的操作。將第一個參數顯示為一個 int 的任何方法基本上都需要連接。例如,GetIntegrationPacks 方法。以下 PowerShell 範例將使用連接方法來為 COM 介面創建一個連接控制代碼,並返回一個包含連接 ID 的整數。($Username 為 “<domain>\<username>”)

            $oismgr = new-object -com OpalisManagementService.OpalisManager
            $ohandle = New-Object object
            $handle = $handle = New-Object Runtime.InteropServices.VariantWrapper($ohandle)
            $retval = $oismgr.Connect($UserName, $password, [ref]$handle)
            $handle

然後,您將使用該控制代碼 ID 作為該“需要連接”方法的第一個參數,如下:

            $odetails = new-object object
            $ipdetails = $evdetails = New-Object Runtime.InteropServices.VariantWrapper($odetails)
            $retval = $oismgr.GetIntegrationPacks($Handle, [ref]$ipdetails)
            $output = [XML]$ipdetails
            $output.OuterXml

上述程式碼將產生類似於以下的 XML:

<IntegrationPacks>
  <IntegrationPack>
    <UniqueIDdatatype="string">{12A45CB8-39DE-43A7-8FA2-E90379A5091F}</UniqueID>
    <Namedatatype="string">System Center Integration Pack for Microsoft .NET Framework Activities</Name>
    <Descriptiondatatype="string">Activities for Orchestrator Integration Toolkit for Microsoft .NET</Description>
    <Versiondatatype="int64">7</Version>
    <Librarydatatype="string">Microsoft.SystemCenter.Orchestrator.Integration.Toolkit.IP.ServerExtension.dll</Library>
    <ProductNamedatatype="string">{12A45CB8-39DE-43a7-8FA2-E90379A5091F}.OIP</ProductName>
    <ProductIDdatatype="string">{E88EF9F3-448F-49DC-BF02-2C93BFC8BB29}</ProductID>
  </IntegrationPack>
</IntegrationPacks>

正如您可看到的,獲得這些消息將十分容易。實際上,我們編寫了一個 PowerShell 範例,該範例可在您將資訊導入之前先驗證 Runbook,以確保 Runbook 中所含的活動實際上已安裝,並作為 IP 中的一部分。

希望您能享受編碼的過程!:)

本文原始發布於 通过 COM 从 Orchestrator 中获得更深入的信息