Share via


拿掉重複的管理元件別名

使用 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 腳本,以確保不會傳回任何輸出。

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