Nach dem Löschen eines Management Servers oder Gateways hängen Agenten plötzlich in der Luft. So finden Sie Agenten ohne gültige Kommunikationsbeziehung und weisen sie wieder zu.
Wird ein Management Server oder Gateway außer Betrieb genommen, bevor alle Agenten umgezogen sind, entstehen verwaiste Agenten: Sie sind in der Datenbank noch vorhanden, haben aber keinen primären Management Server mehr. In der Konsole fallen sie oft nur dadurch auf, dass sie grau sind oder sich nicht verwalten lassen.
Schritt 1: Verwaiste Agenten finden
Die folgende Leseabfrage gegen die Betriebsdatenbank (OperationsManager) listet alle Agenten, denen die Beziehung HealthServiceCommunication – also die Zuordnung zu einem primären Management Server – fehlt:
DECLARE @DiscoverySourceId uniqueidentifier = dbo.fn_DiscoverySourceId_User();
SELECT TME.TypedManagedEntityId, HS.PrincipalName
FROM MTV_HealthService HS
JOIN dbo.BaseManagedEntity BHS WITH (NOLOCK)
ON BHS.BaseManagedEntityId = HS.BaseManagedEntityId
JOIN dbo.TypedManagedEntity TME WITH (NOLOCK)
ON TME.BaseManagedEntityId = BHS.TopLevelHostEntityId AND TME.IsDeleted = 0
JOIN dbo.DerivedManagedTypes DMT WITH (NOLOCK) ON DMT.DerivedTypeId = TME.ManagedTypeId
JOIN dbo.ManagedType BT WITH (NOLOCK)
ON DMT.BaseTypeId = BT.ManagedTypeId AND BT.TypeName = N'Microsoft.Windows.Computer'
LEFT JOIN dbo.Relationship HSC WITH (NOLOCK)
ON HSC.SourceEntityId = HS.BaseManagedEntityId
AND HSC.RelationshipTypeId = dbo.fn_RelationshipTypeId_HealthServiceCommunication()
AND HSC.IsDeleted = 0
JOIN dbo.DiscoverySourceToTypedManagedEntity DSTME WITH (NOLOCK)
ON DSTME.TypedManagedEntityId = TME.TypedManagedEntityId
AND DSTME.DiscoverySourceId = @DiscoverySourceId
WHERE HS.IsAgent = 1
AND HSC.RelationshipId IS NULL;
Schritt 2: Primären Management Server neu zuweisen
In SCOM 2007 musste man dafür noch per Connector Framework eine Beziehung von Hand schreiben. Seit Operations Manager 2012 genügt ein Cmdlet:
Import-Module OperationsManager
$ms = Get-SCOMManagementServer -Name 'ms01.contoso.local'
'agent01.contoso.local', 'agent02.contoso.local' | ForEach-Object {
$agent = Get-SCOMAgent -DNSHostName $_
Set-SCOMParentManagementServer -Agent $agent -PrimaryServer $ms
}
Optional legen Sie mit -FailoverServer gleich einen oder mehrere Ausweich-Management-Server fest.
Achtung
Die SQL-Abfrage ist eine reine Leseabfrage. Ändern Sie niemals Beziehungen direkt per SQL in der Betriebsdatenbank – das ist nicht unterstützt. Für Änderungen immer PowerShell oder die SDK verwenden.
Vorbeugen ist besser
Bevor Sie einen Management Server oder ein Gateway entfernen:
- Alle Agenten per
Set-SCOMParentManagementServerauf andere Server umziehen. - Prüfen, dass der Server keine Agenten mehr als primär oder Failover führt.
- Erst dann den Server in der Konsole löschen und deinstallieren.
Heute
Die Abfrage stammt aus der Zeit von SCOM 2007 R2; die verwendeten Views und Funktionen existieren auch in späteren Versionen, sollten aber vor dem Einsatz in einer Testumgebung geprüft werden. Set-SCOMParentManagementServer ist in Operations Manager 2019, 2022 und 2025 der empfohlene Weg.