Share via


附錄 D - Universal Connector

適用於: Operations Manager 2007 R2, Operations Manager 2007 SP1

警示訊息整合邏輯範例

使用 Universal Connector一節所述,您必須開發整合邏輯,才能解譯由 Interop Provider 儲存的警示訊息內容,並將這些內容傳送到 Universal Connector 所服務的遠端系統。 下列各範例顯示的 Windows PowerShell 指令碼可以當做這項工作的起點。 在這些範例中,遠端系統會被指定為 EMS 模擬器。

用來處理新警示的指令碼

#  Copyright (c) Microsoft Corporation.   All rights reserved.  # # 此範例指令碼係用於處理由 Operations Manager 2007 R2 傳入並# 透過 Universal Connector 轉寄的警示。 #

## 從 Operations Manager 轉寄之警示 XML 檔案的路徑。 $FromOMPath="C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\FromOpsMgr"

## EMS 模擬器的路徑。 $EMSPath="C:\Program Files\EMSEmulator"

## 要傳送到 Operations Manager 之 XML 檔案的路徑。 $ToOMPath = "C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\"

## 來自 EMS 模擬器設定檔的下一個票證號碼。 $EMSConfigFile=$EMSPath + "\config\EMSEmulatorConfig.xml" $EMSConfigxml = [xml] (get-content $EMSConfigFile) $NextTicket = [int] $EMSConfigxml.EMSConfig.NextTicket

## 從 Operations Manager 讀取警示 XML 檔案。 $alertfiles = (get-childitem -path $FromOMPath -include *.xml -recurse) 

foreach($alertfile in $alertfiles) { $xml= [xml](get-content $alertfile)

# 新警示處理 - EventType = 0 if ($xml.UNVEvent.EventType = \\"0\\") {

# 新增將警示插入客戶應用程式的邏輯。 # 隨後進行模擬。 $newelem = $xml.CreateElement(\\"TicketNumber\\") $newelem.set_InnerText($NextTicket) $xml.UNVEvent.AppendChild($newelem) $newFile=$EMSPath + \\"\\\" + $NextTicket + \\".xml\\" $xml.save($newFile)

# 建立新警示的通知,傳回 TicketNumber。 $ackxml = new-object System.Xml.XmlDocument

# 建立根節點。 $ackroot = $ackxml.CreateElement(\\"UNVEvent\\") $ackxml.appendchild($ackroot)

# 新增 EventType 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"EventType\\") $ackelem.set_InnerText(\\"2\\") $ackroot.AppendChild($ackelem)

# 新增 AlertId 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"AlertId\\") $ackelem.set_InnerText($xml.UNVEvent.AlertId) $ackroot.AppendChild($ackelem)

# 新增 EventID 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"EventId\\") $ackelem.set_InnerText($NextTicket) $ackroot.AppendChild($ackelem)

# 新增 ManagementGroup 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"ManagementGroupName\\") $ackelem.set_InnerText($xml.UNVEvent.ManagementGroupName) $ackroot.AppendChild($ackelem)

# 新增 XML 簡介。 $xmlintro = $ackxml.CreateProcessingInstruction(\\"xml\\", \\"version='1.0'\\") $ackxml.InsertBefore($xmlintro, $ackroot)

# 檢查 MgmtGroup 目錄,若不存在則建立。 $MGdir = $ToOMPath + $xml.UNVEvent.ManagementGroupName $ackFile = $MGdir + \\"\\\" + $NextTicket + \\".xml\\"

if (!(Test-Path $MGdir)) { mkdir $MGdir }

$ackxml.save($ackFile)

remove-item $alertfile

$NextTicket++ }

}

# 以新的 NextTicket 值更新 EMS 設定檔。 $EMSConfigxml.EMSConfig.NextTicket = [string] $NextTicket $EMSConfigxml.save($EMSConfigFile)

用來處理 Operations Manager 警示更新的指令碼

#  Copyright (c) Microsoft Corporation.   All rights reserved.  # # 此範例指令碼係用於處理由 Operations Manager 2007 R2 傳入並# 透過 Universal Connector 轉寄的警示更新。 #

## 從 Operations Manager 轉寄之警示 XML 檔案的路徑。 $FromOMPath="C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\FromOpsMgr"

## EMS 模擬器的路徑。 $EMSPath="C:\Program Files\EMSEmulator"

## 要傳送到 Operations Manager 之 XML 檔案的路徑。 $ToOMPath = "C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\"

## 從 Operations Manager 讀取警示 XML 檔案。 $alertfiles = (get-childitem -path $FromOMPath -include *.xml -recurse)

foreach($alertfile in $alertfiles) { $xml= [xml](get-content $alertfile)

# 警示更新處理 - EventType = 1 if ($xml.UNVEvent.EventType = \\"1\\") {

# 新增使用 Operations Manager 提供之資料更新客戶應用程式的邏輯。 # 隨後進行模擬。 # 尋找與更新中的票證相符的票證。 $EMSfilename = $EMSPath + \\"\\\" + $xml.UNVEvent.EventId + \\".xml\\" if ((Test-Path $EMSfilename)) { # 取得符合的票證。 $existingTicket = [xml] (Get-Content $EMSfilename)

# 更新解決狀態。 $existingTicket.UNVEvent.ResolutionState = $xml.UNVEvent.ResolutionState $existingTicket.save($EMSfilename)

}

# 建立新警示的通知,傳回 TicketNumber。 $ackxml = new-object System.Xml.XmlDocument

# 建立根節點。 $ackroot = $ackxml.CreateElement(\\"UNVEvent\\") $ackxml.appendchild($ackroot)

# 新增 EventType 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"EventType\\") $ackelem.set_InnerText(\\"3\\") $ackroot.AppendChild($ackelem)

# 新增 AlertId 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"AlertId\\") $ackelem.set_InnerText($xml.UNVEvent.AlertId) $ackroot.AppendChild($ackelem)

# 新增 EventID 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"EventId\\") $ackelem.set_InnerText($xml.UNVEvent.EventId) $ackroot.AppendChild($ackelem)

# 新增 ManagementGroup 至 ackxml。 $ackelem = $ackxml.CreateElement(\\"ManagementGroupName\\") $ackelem.set_InnerText($xml.UNVEvent.ManagementGroupName) $ackroot.AppendChild($ackelem)

# 新增 XML 簡介。 $xmlintro = $ackxml.CreateProcessingInstruction(\\"xml\\", \\"version='1.0'\\") $ackxml.InsertBefore($xmlintro, $ackroot)

# 檢查 MgmtGroup 目錄,若不存在則建立。 $MGdir = $ToOMPath + $xml.UNVEvent.ManagementGroupName $ackFile = $MGdir + \\"\\\" + $xml.UNVEvent.EventId + \\".xml\\"

if (!(Test-Path $MGdir)) { mkdir $MGdir }

$ackxml.save($ackFile)

remove-item $alertfile

}

}

用來處理 Operations Manager 遠端系統更新的指令碼

#  Copyright (c) Microsoft Corporation.   All rights reserved.  # # 此範例指令碼係用於模擬在 EMS 模擬器中關閉票證,並 # 建立必要檔案,以關閉 Operations Manager 中的對應警示。 # param($CloseTicket)

## 從 Operations Manager 轉寄之警示 XML 檔案的路徑。 $FromOMPath="C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\FromOpsMgr"

## EMS 模擬器的路徑。 $EMSPath="C:\Program Files\EMSEmulator"

## 要傳送到 Operations Manager 之 XML 檔案的路徑。 $ToOMPath = "C:\Program Files\System Center Operations Manager 2007 Providers\Operations Manager 2007 Connector to Microsoft Universal Provider\UnvEvents\"

## 要關閉的票證號碼。 #$CloseTicket=$arg[0]

# 模擬在 EMS 中關閉票證。 

# 新增使用 Operations Manager 提供之資料更新客戶應用程式的邏輯。 # 隨後進行模擬。 # 尋找與更新中的票證相符的票證。 $EMSfilename = $EMSPath + \\"\\\" + $CloseTicket + \\".xml\\" if ((Test-Path $EMSfilename)) { # 取得符合的票證。 $existingTicket = [xml] (Get-Content $EMSfilename)

# 更新解決狀態。 $existingTicket.UNVEvent.ResolutionState = \\"Closed\\" $existingTicket.save($EMSfilename)

# 需要建立由連接器取得的檔案,並關閉 Operations Manager 警示。 $closexml = new-object System.Xml.XmlDocument

# 建立根節點。 $closeroot = $closexml.CreateElement(\\"UNVEvent\\") $closexml.appendchild($closeroot)

# 新增 EventType 至 closexml。 $closeelem = $closexml.CreateElement(\\"EventType\\") $closeelem.set_InnerText(\\"1\\") $closeroot.AppendChild($closeelem)

# 新增 AlertId 至 closexml。 $closeelem = $closexml.CreateElement(\\"AlertId\\") $closeelem.set_InnerText($existingTicket.UNVEvent.AlertId) $closeroot.AppendChild($closeelem)

# 新增 ManagementGroup 至 closexml。 $closeelem = $closexml.CreateElement(\\"ManagementGroupName\\") $closeelem.set_InnerText($existingTicket.UNVEvent.ManagementGroupName) $closeroot.AppendChild($closeelem)

# 新增 ResolutionState 至 closexml。 $closeelem = $closexml.CreateElement(\\"ResolutionState\\") $closeelem.set_InnerText($existingTicket.UNVEvent.ResolutionState) $closeroot.AppendChild($closeelem)

# 新增 XML 簡介。 $closeintro = $closexml.CreateProcessingInstruction(\\"xml\\", \\"version='1.0'\\") $closexml.InsertBefore($closeintro, $closeroot)

# 檢查 MgmtGroup 目錄,若不存在則建立。 $MGdir = $ToOMPath + $existingTicket.UNVEvent.ManagementGroupName $closeFile = $MGdir + \\"\\\" + $existingTicket.UNVEvent.TicketNumber + \\".xml\\"

if (!(Test-Path $MGdir)) { mkdir $MGdir }

$closexml.save($closeFile)

}  

免責聲明

範例指令碼在任何 Microsoft 標準支援程式或服務下均不受支援。 範例指令碼係依現狀提供,不附任何形式的擔保。 Microsoft 不提供任何默示擔保,包括但不限於對於商業適售性或特定目的適用性之默示擔保。 由於使用或執行範例指令碼及文件所致之風險一概由您承擔。 對於因使用或無法使用範例指令碼或文件而造成之任何損害 (包括但不限於商業利益損失、商業資訊損失或其他金錢損失),即使 Microsoft 已告知該等損害之可能性,Microsoft、其作者或是其他涉及指令碼之建立、生產或傳遞之任何人在任何情況下一概不負任何責任。