拿掉重複的管理元件別名
使用 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
如果輸出傳回一或多個資料列,請執行下列動作:
如果管理元件未密封
從主控台匯出管理元件。
使用文字編輯器開啟管理元件 XML。
識別重複的別名。
在 [參考] 底下重新命名其中一個別名,以及 XML 主體中使用別名的所有其他位置。
在此範例中,我們有兩個別名,這會被視為 System Center Operations Manager 2019 UR4 中的重複專案。若要偵測使用別名的位置,請使用 AliasName 搜尋 XML。 在此情況下,它是 BADALIAS。 請注意使用參考的位置。
將其中一個別名重新命名為 [參考] 底下的唯一名稱,並以上述步驟中偵測到的新名稱取代舊名稱的所有專案。
重新命名重複的別名之後,請將管理元件重新匯入 System Center Operations Manager。
如果管理元件已密封
在所有管理元件上完成風險降低之後,請重新執行 PowerShell 腳本或 T-SQL 腳本,以確保不會傳回任何輸出。
針對以輸出方式傳回的每個管理元件,請遵循上述步驟。