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. 管理パックが封印されていない場合

    1. コンソールから管理パックをエクスポートします。

    2. テキスト エディターを使用して管理パック XML を開きます。

    3. 重複するエイリアスを特定します。

    4. [参照] でいずれかのエイリアスの名前を変更し、XML 本文でエイリアスが使用されている他のすべての場所の名前を変更します。
      この例では、System Center Operations Manager 2019 UR4 で重複と見なされる 2 つのエイリアスがあります。

      エイリアスの例を示すスクリーンショット。

      エイリアスが使用されている場所を検出するには、 AliasName で XML を検索します。 この場合は BADALIAS です。 参照が使用される場所に注意してください。

      これらのエイリアスの 1 つを [参照 ] で一意の名前に変更し、前の手順で検出された新しい名前で古い名前のすべての出現箇所を置き換えます。

    5. 重複するエイリアスの名前が変更されたら、管理パックを System Center Operations Manager に再インポートします。

  2. 管理パックが封印されている場合

    1. 好みのツールに従って、封印された管理パックを開きます。
    2. 重複するエイリアスを特定します。
    3. [参照] でいずれかのエイリアスの名前を変更し、XML 本文でエイリアスが使用されている他のすべての場所の名前を変更します。
    4. 管理パックを再構築し、System Center Operations Manager で再インポートします。
    5. XML - 管理パックをシールし、管理パック再インポートすることで、同じ手順を実行できます。

すべての管理パックで軽減策が完了したら、PowerShell スクリプトまたは T-SQL スクリプトを再実行して、出力が返されないようにします。

出力として返される管理パックごとに、上記の手順に従います。