共用方式為


拿掉重複的管理元件別名

使用 System Center Operations Manager 2019 UR4 和 2022 RTM,System Center Operations Manager 管理元件參考別名會區分大小寫,且只會建立唯一的別名。 因此,System Center Operations Manager 更新匯總升級或版本升級會在已經存在重複管理元件參考別名的環境中失敗。

本文可協助移除重複的管理元件參考別名(如果有的話),讓System Center Operations Manager 更新匯總升級或版本升級順利完成。

在升級至 System Center Operations Manager 2019 UR4 之前,請務必移除所有重複的管理元件別名。

偵測重複的管理元件別名

若要偵測具有重複管理元件別名的管理元件,請執行下列動作:

在管理伺服器上啟動 PowerShell ISE,或對 System Center Operations Manager Operations Database 執行 T-SQL。

PowerShell 腳本

############################################
#Identify MPs imported with duplicate Aliases
Import-Module OperationsManager
$mps = Get-SCOMManagementPack
foreach ($mp in $mps)
{
  	$hashTable = @{}
 	 foreach ($ref in $mp.References)
  	{
   	 try {$hashTable.Add($ref.Key, $ref.Value)}
    	catch
    	{
     	 $MPName = $mp.Name
     	 $MPDisplayName = $mp.DisplayName
     	 $MPVersion = $mp.Version
        "MP contains duplicate aliases: Name=($MPName) DiplayName=($MPDisplayName) Version=($MPVersion)"
    	}
  	}
}
############################################ 

T-SQL

-- LIST ALL MPs that have a duplicate Alias reference
DECLARE @mpFriendlyName NVARCHAR(255),
        @mpName         NVARCHAR(255),
        @mpId           UNIQUEIDENTIFIER,
        @mpXml          AS XML

CREATE TABLE #badmptable
  (
     mpid           UNIQUEIDENTIFIER,
     mpname         NVARCHAR(255),
     mpfriendlyname NVARCHAR(255)
  )

DECLARE mp_cursor CURSOR local forward_only read_only FOR
  SELECT mpfriendlyname,
         mpname,
         managementpackid,
         CONVERT(XML, mpxml)
  FROM   managementpack

OPEN mp_cursor

FETCH next FROM mp_cursor INTO @mpFriendlyName, @mpName, @mpId, @mpXml

WHILE @@FETCH_STATUS = 0
  BEGIN
      SELECT n.value('@Alias', 'nvarchar(255)') AS mpRef
      INTO   #temprefs
      FROM   @mpXml.nodes('/ManagementPack/Manifest/References/Reference') AS a(
             n)

      IF EXISTS (SELECT Count(*)
                 FROM   #temprefs
                 GROUP  BY mpref
                 HAVING Count(*) > 1)
        BEGIN
            INSERT INTO #badmptable
                        (mpid,
                         mpname,
                         mpfriendlyname)
            VALUES      ( @mpId,
                          @mpName,
                          @mpFriendlyName )
        END

      DROP TABLE #temprefs

      FETCH next FROM mp_cursor INTO @mpFriendlyName, @mpName, @mpId, @mpXml
  END

CLOSE mp_cursor

DEALLOCATE mp_cursor

SELECT *
FROM   #badmptable

DROP TABLE #badmptable
--End

案例 1

如果 PowerShell 或 T-SQL 腳本的輸出沒有傳回任何值,則沒有任何重複的管理元件別名。 繼續進行UR4升級。

案例 2

如果輸出傳回一或多個資料列,請執行下列動作:

  1. 如果管理元件未密封

    1. 從主控台匯出管理元件。

    2. 使用文字編輯器開啟管理元件 XML。

    3. 識別重複的別名。

    4. 在 [參考] 底下重新命名其中一個別名,以及 XML 主體中使用別名的所有其他位置。
      在此範例中,我們有兩個別名,這會被視為 System Center Operations Manager 2019 UR4 中的重複專案。

      顯示別名範例的螢幕快照。

      若要偵測使用別名的位置,請使用 AliasName 搜尋 XML。 在此情況下,它是 BADALIAS。 請注意使用參考的位置。

      將其中一個別名重新命名為 [參考] 底下的唯一名稱,並以上述步驟中偵測到的新名稱取代舊名稱的所有專案。

    5. 重新命名重複的別名之後,請將管理元件重新匯入 System Center Operations Manager。

  2. 如果管理元件已密封

    1. 根據喜好設定工具開啟密封的管理元件。
    2. 識別重複的別名。
    3. 在 [參考] 底下重新命名其中一個別名,以及 XML 主體中使用別名的所有其他位置。
    4. 在 System Center Operations Manager 中重建管理元件並重新匯入。
    5. 編輯 XML - 密封管理元件並重新匯入管理元件,即可完成相同的步驟。

在所有管理元件上完成風險降低之後,請重新執行 PowerShell 腳本或 T-SQL 腳本,以確保不會傳回任何輸出。

針對以輸出方式傳回的每個管理元件,請遵循上述步驟。