Jean-Sébastien DUCHENE Blog's

Actualité, Tips, Articles sur l'ensemble des Technologies Microsoft (SCCM/SMS, EMS, Microsoft Intune, Microsoft Azure, Windows 10, SCOM, MDOP...)

[SCOM 2012] Supprimer un connecteur ! Bonnes Pratiques pour éviter des erreurs Invalid Object

Je devais faire une mise à jour d’un environnement System Center 2012 Operations Manager SP1 vers la R2 pour une de mes clients. En balayant les prérequis, j’ai noté la présence d’un connecteur pour Savision Live Maps bien que le produit ne soit plus utilisé. J’ai proposé au client de profiter de la mise à jour pour faire un peu de nettoyage et retirer ce connecteur. Mon premier reflex est de reprendre les anciennes méthodes de nettoyage de connecteur. Il en existe diverses et variées :

  • Utiliser les scripts de Kevin Holman
  • Utiliser des requêtes SQL

En cherchant, je suis tombé sur la cmdlet Remove-SCOMConnector qui semble être apparue ans System Center 2012 Operations Manager SP1. Vendu ! Je m’exécute et j’utilise le couple Get-SCOMConnector et Remove-SCOMConnector. La cmdlet renvoie une erreur.

Après un peu de recherche, je note les problèmes suivants :

  • La cmdlet Get-SCOMConnector renvoie toujours le connecteur mais sans les informations de nom etc…
  • L’affichage de la vue Administration – Product Connectors - Internal Connectors boucle et renvoie une erreur comprenant la mention Invalid Object

Super ! la cmdlet est buguée dans une scénario spécifique auquel je fais face… (elle ne gère pas lorsque le connecteur est Initialized). En regardant de plus près dans la base de données OperationsManager, la table dbo.Connector renvoie 5 connecteurs bien que la vue MTV_Connector n’en renvoie que 4. En gros, la cmdlet n’a fait que la moitié du travail laissant mon infrastructure dans une situation instable.

Ainsi, si vous devez supprimer un connecteur, voici la procédure à suivre :

  1. Avant toute chose, effectuez une sauvegarde de la base de données opérationnelle et du Data Warehouse.
  2. Validez que vous ayez une procédure de restauration valide !
  3. Une fois ces vérifications faites, connectez-vous à la base de données OperationsManager en utilisant SQL Server Management Studio.
  4. Exécutez la requête Select * From dbo.Connector afin d’obtenir l’identifiant du connecteur concerné. Pour recoupez, vous pouvez utiliser l’identifiant BaseManagedEntityId pour le connecteur qui a sa valeur à IsInitialized = 1 de la table Connector. Exécutez la requête Select * FROM MTV_Connector WHERE BaseManagedEntityId = ‘<BMEID>’. Vous pouvez confirmer que c’est bien le connecteur que vous souhaitez supprimer

  5. Une fois l’identifiant récupéré, exécutez la procédure : EXEC p_ConnectorUpdate ‘<ID_Du_Connecteur>’,NULL,0

    Vous pouvez rééxécuter la requête sur la table connecteur pour voir que le flag est à 0

  6. Lancez ensuite le module PowerShell de SCOM (Operations Manager Shell)
  7. Exécutez la cmdlet : Get-SCOMConnector –Name <Nom du connecteur> | Remove-SCOMConnector


Notez que l’opération que je vous fais faire par la base est aussi possible en PowerShell via les fonctions d’Admin.

Si vous êtes tombé dans le piège comme moi, voici le moyen de revenir à une situation normale. Après coup, j’ai décidé de revenir aux méthodes basiques en utilisant les procédures stockées de la base. Attention ! Ces méthodes ne sont pas supportées et doivent être utilisée en connaissance des risques !

  1. Avant toute chose, effectuez une sauvegarde de la base de données opérationnelle et du Data Warehouse.
  2. Validez que vous ayez une procédure de restauration valide !
  3. Une fois ces vérifications faites, connectez-vous à la base de données OperationsManager en utilisant SQL Server Management Studio.
  4. Exécutez la requête Select * From dbo.Connector afin d’obtenir l’identifiant du connecteur concerné. Vous pouvez faire un différentiel entre la table Connector et la vue MTV_Connector
  5. Une fois l’identifiant récupéré, exécutez la procédure : EXEC p_ConnectorUpdate ‘<ID>’,NULL,0
    Cette dernière permet de passer le connecteur en statut Not Initialized. C’est le statut Initialized qui a généré le problème avec la cmdlet
  6. 6.       Une fois le connecteur marqué à Not Initialized, vous pouvez exécuter la procédure stockée : EXEC p_ConnectorDelete ‘<ID>’,NULL,NULL

Je le répète mais ces opérations sont à réaliser à vos risques et périls !

 

Facebook Like
Anonymous