PI Services

Le blog des collaborateurs de PI Services

SCOM : passer automatiquement les serveurs qui redémarrent en mode maintenance

Dans une grosse infrastructure composée de nombreux serveurs, les redémarrages peuvent s’avérer assez fréquents.

Malheureusement, un serveur qui redémarre peut entrainer la remontée de différentes alertes dans SCOM puisque ni son agent ni les services qu’il exécute ne répondent plus.

C’est pourquoi il est recommandé de basculer les serveurs à redémarrer dans mode « Maintenance » dans la console SCOM avant de les stopper : cela indique à SCOM qu’il doit arrêter de les superviser pendant un temps prédéfini, empêchant ainsi toute remontée d’alerte.

Dans le cadre de grosses infrastructures, réparties entre des services divers, il n’est toutefois pas toujours pratique de solliciter la bonne personne au bon moment pour procéder à cette mise en mode maintenance, d’où l’intérêt de pouvoir procéder à cette action automatiquement lorsqu’un redémarrage est détecté.

Cette automatisation sera réalisée à l’aide d’une règle qui détectera un événement 1074 (source USER32) dans le journal d’événement System et créera une alerte, qui sera interceptée à l’aide d’un Notification Channel, qui déclenchera enfin l’exécution d’un script PowerShell qui procèdera à la mise en mode maintenance.

Commençons donc par créer la règle de détection d’événement :
Indiquer un nom pour la règle, une description, une catégorie, la cibler sur la classe Windows Computer et sélectionner un management pack différent du Default pour l’enregistrer.

clip_image002

Les events 1074 sont créés dans le journal d’évènement System lorsqu’un redémarrage est initié.

clip_image004

Leur ID est 1074 et leur source est USER32

clip_image006

L’alerte n’est pas destinée à être lue par un opérateur humain, son nom et sa description importent donc peu tant qu’ils restent suffisamment spécifiques. De la même façon, la sévérité pourra être définie à Information.

clip_image008

 

Une fois la règle mise en place, nous allons créer un ensemble de règles de Notification (channel de notification, subscriber, subscription). Ce sont eux qui détecteront la création de l’alerte et commanderont le lancement du powershell de mise en mode maintenance. Une recovery task aurait également pu remplir le même rôle, mais son mode de fonctionnement induit une réaction plus lente qui pourrait ici être préjudiciable puisqu’il faut que la mise en maintenance soit faite avant que le serveur ne cesse de répondre.

Commençons donc par créer un nouveau Notification Channel.
Entrer un nom et une description :

clip_image010

Dans le champ Full path of the command file, indiquer le chemin vers l’executable de powershell. Il s’agit par défaut de C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Dans le champ Command line parameters, indiquer les paramètres suivants (pensez à remplacer le chemin du script par le chemin où se trouvera le script dans votre cas) :
-Command "& '"D:\chemin\vers\script\scriptmaintenancemode.ps1"'" -alertid '$Data/Context/DataItem/AlertId$' -computerPrincipalName '$Data/Context/DataItem/ManagedEntityDisplayName$'

clip_image012

 

Passons ensuite au Subscriber.

Indiquer un nom

clip_image002[3]

Laisser la sélection par défaut pour la plage d’utilisation (Alwas send notifications)

clip_image004[3]

Cliquer sur Add. Indiquer à nouveau un nom (le même fera parfaitement l’affaire).

clip_image006[3]

Sélectionner le Channel Type nommé Command et le Notification Channel qui vient d’être créé, Mode Maintenance dans cet exemple.

clip_image008[3]

Ici aussi, laisser Always send notifications coché et cliquer sur Finish.

clip_image010[3]

De retour sur l’écran du Notification Subscriber Wizard, l’addresse qui vient d’être créée doit apparaitre. Cliquer sur Finish.
clip_image012[3]

 

Reste à paramétrer la Subscription.
Là aussi indiquer un nom (toujours le même…) et une description.

clip_image014[4]

En Critère de déclenchement , cocher Created by specific rules or monitors et indiquer la règle précédemment créée.

clip_image016[4]

Cliquer sur Add et sélectionner le Subscriber préalablement créé.

clip_image018[4]

De la même facon, cliquer sur Add et indiquer le Channel.

clip_image020[4]

Cliquer sur Finish.


Il ne reste plus qu’à créer le script powershell à proprement parler. Pensez à modifier la variable $RMS de façon à ce qu’elle indique le nom de votre RMS et la variable $minutes avec la durée de mise en mode maintenance que vous souhaitez utiliser, ainsi qu’a enregistrer le fichier .ps1 à l’endroit de votre choix correspondant à ce que vous avez indiqué lors de la création du Notification Channel:

#
# SCHEDULE MAINTENANCE MODE
# Version originale de base : http://lucamihailescu.blogspot.com/2010/01/operations-manager-maintenance-mode.html
#

Param($alertid, $computerPrincipalName, $minutes, $comment)

$RMS = "localhost"

if (!$minutes) {$minutes = 15}
if (!$comment) {$comment = "Mode Maintenance Automatique Suite a Detection de Redemarrage"}

function fixalert {
$alert = Get-Alert -Id $alertid
Resolve-Alert -Comment $args[0] -Alert $alert
}

if ((Get-PSSnapin | Where {$_.Name -eq 'Microsoft.EnterpriseManagement.OperationsManager.Client'}) -eq $null) {

Add-PSSnapin "Microsoft.EnterpriseManagement.OperationsManager.Client"

}

New-ManagementGroupConnection $RMS
Set-Location "OperationsManagerMonitoring::"
Set-Location $RMS
$agent = Get-Agent | Where {$_.PrincipalName –eq $computerPrincipalName}
$computer = $agent.HostComputer

if (!$agent) { fixalert "Alerte cloturee par le Script MaintenanceMode. Le Mode Mainenance n’a pas pu etre active (le serveur en cours de redemarrage est un RMS ou MS)"; Exit }

$startTime = [DateTime]::Now

$endTime = $startTime.AddMinutes($Minutes)

New-MaintenanceWindow -StartTime $startTime -EndTime $endTime -MonitoringObject $computer -Comment $comment

fixalert "Alerte cloturee par le Script MaintenanceMode. Mode Maintenance actif!"

Voilà, c’est terminé… vous pouvez maintenant redémarrer un de vos serveur supervisé pour vérifier qu’il passe bien automatiquement en mode maintenance!

 

Orchestrator : créer son propre Integration Pack (partie 2 : compiler et importer l’oip)

 

Dans le billet précédent, nous avons vu comment créer une Assembly, c'est-à-dire le fichier dll contenant la « mécanique » de l’Integration Pack. Cependant, pour obtenir un Integration Pack finalisé et prêt à être déployé sur une infrastructure Orchestrator, il est nécessaire de packager cette Assembly pour en faire un fichier .oip.

Lancer l’outil Orchestrator Integration Pack Wizard

image

Cliquer sur Next ou sur Import Integration Pack pour reprendre un OIP préexistant

image

Remplir les champs obligatoires (marqués par une étoile).

image

Product Name correspond au nom qui apparaitra dans le Deployment Manager.

image

 

Category Name correspond au nom de la catégorie d’activité qui apparaitra dans le Runbook Designer :

image

Resource File est le fichier qui contient les icones et d’autres ressources. Dans cet exemple on conserve celui par défaut.

Une fois les champs remplis, cliquer sur Next.

Dans le champ Library, sélectionner la dll de l’assembly créée dans la première partie ainsi que la classe correspondante. Indiquer un Display Name (nom qui apparaitra dans le Runbook Designer). Sélectionner une icône pour l’activité, et cliquer sur OK

image

Au besoin, sélectionner les fichiers nécessaires au bon fonctionnement de l’activité (par exemple un exécutable si l’activité repose dessus) en cliquant sur Add. Dans notre exemple, il n’y a rien à ajouter puisque le fonctionnement de l’activité repose sur du code PowerShell directement intégré dedans. Cliquer sur Next.

image

Indiquer le chemin où enregistrer fichier OIP final puis cliquer sur Next.

image

L’assistant compile l’OIP…

image

Une fois terminé, cliquer sur Finish.

Il reste maintenant à déployer notre OIP au Management Server, Runbook Server et/ou Runbook Designer. Cette procédure est identique quel que soit l’OIP à déployer, mais un rappel pourra toujours servir :

Lancer la console Deployment Manager et faire un clic-droit sur Integration Packs. Cliquer sur Register IP with the Orchestrator Management Server.

image

Cliquer sur Next.

image

Cliquer sur Add et sélectionner l’OIP à déployer.

image

Cliquer sur Finish.

image

Une fois enregistré avec le Management Server, l’OIP apparait dans la liste des Integration Packs. Faire un clic-droit sur son nom et cliquer sur Deploy IP to Runbook Server or Runbook Designer.

image

Cliquer sur Next.

image

Sélectionner l’OIP à déployer et cliquer sur Next.

image

Indiquer le ou les serveurs cible(s) via le champ Computer et le bouton Add puis cliquer sur Next

image

 

Indiquer si vous souhaitez procéder au déploiement à une heure précise ainsi que si vous préférer arrêter tous les runbooks avant de procéder au déploiement. Cela peut s’avérer nécessaire pour certains OIP, ou pour le déploiement d’un hotfix, mais pas dans le cas de notre exemple. Cocher Install the Integration Packs […] et cliquer sur Next.

image

Cliquer sur Finish.

image

 

Relancer la console Runbook Designer pour en rafraichir le contenu. L’activité doit maintenant être présente et il ne reste plus qu’à l’utiliser comme n’importe quelle autre dans vos runbooks :

image

Orchestrator : créer son propre Integration Pack (partie 1 : créer l’assembly)

 

Orchestrator est livré d’origine avec un bon nombre d’activités pré-installées, qui permettent de mettre en place nativement un large panel de scénarios. Il est également possible d’étendre ces capacités à l’aide d’Integration Packs (appelés OIP), qui peuvent être disponibles au téléchargement auprès de Microsoft ou d’éditeurs tiers ou bien développés directement par les administrateurs en fonction de leurs besoin spécifiques.
Nous allons nous intéresser ici à ce dernier cas.

Dans un premier temps, il est nécessaire de télécharger et d’installer Orchestrator Integration Toolkit, le package qui contient les outils nécessaires à la création de ces OIP. Il est disponible ici : http://www.microsoft.com/en-us/download/details.aspx?id=28725 (System_Center_2012_Orchestrator_Integration_ToolKit.exe)

L’installer et importer l’OIP « integration toolkit » fourni avec dans votre infrastructure Orchestrator (management server et runbook designer, se référer à la fin de la partie 2 pour de l’aide à ce sujet).

Une fois ces pré-requis complétés, nous pouvons démarrer la création de l’Integration Pack à proprement parler. La première étape consiste à créer une « Assembly », qui est un fichier dll contenant le « moteur» de l’OIP. La seconde étape consistera à packager cette dll pour en faire un fichier OIP à proprement parler.

Nous étudierons ici l’exemple d’un OIP contenant une unique activité permettant d’ajouter des évènements au journal d’évènements (Event Viewer). Cette activité existe déjà d’origine via l’activité « Send Event Log Message », mais elle est très limité : elle ne permet pas de sélectionner le journal d’évènement cible, ni l’ID de l’évènement, ni sa source, ni sa criticité. L’OIP que nous allons développer ici offrira toutes ces possibilités.

Lancer l’outil Orchestrator Command-Line Activity Wizard.

clip_image002

Cliquer sur Next à l’écran d’accueil (ou sur Load existing assembly  pour reprendre un projet en cours).

clip_image004

Nommer le projet et indiquer le chemin où enregistrer l’assembly (le fichier dll source) puis cliquer sur Next

clip_image006

Il est également possible d’ajouter des détails sur le projet (description, nom de la compagnie, version… ) en cliquant sur Assembly Information

clip_image008

Cliquer sur Add

clip_image010

Dans l’onglet General, nommer l’activité et indiquer son mode de fonctionnement (Run Command, Run Windows PowerShell, Run Program ou Run SSH Command).
Dans notre cas, la création d’événement dans le journal d’événements se reposera sur une commande PowerShell ; nous choisissons donc Run Windows Powershell.
Cliquer sur l’onglet Arguments.

clip_image012

L’onglet Arguments est celui dans lequel nous déterminons les paramètres d’entrée de l’activité ainsi que le code PowerShell qui la fera fonctionner.

clip_image014

Dans Parameters, cliquer sur Add. Indiquer le nom du paramètre d’entrée, son mode de fonctionnement (dans notre cas Command Argument), son type (champs texte, champs mot de passe, liste déroulante, browse button…) et éventuellement une valeur par défaut. Ci-dessous deux exemples , un en type Text et l’autre en type Text with Selection (liste déroulante).

clip_image016

clip_image018

Pour réaliser notre exemple d’ajout d’événement dans le journal d’événements, les paramètres suivants sont nécessaires :

Name

Usage mode

Display Style

Options

Log Name

Command Argument

Text

-

Source

Command Argument

Text

-

Content

Command Argument

Text

-

Event ID

Command Argument

Text

-

Event Severity

Command Argument

Text with Selection

Verbose|Information|Warning|Error|Critical

Computer Name

Command Argument

Text

-

Une fois tous les paramètres ajoutés, cliquer sur Insert afin d’entrer le code PowerShell qui sera le « moteur » de notre activité :
Write-eventlog -logname "$(Log Name)" -ComputerName "$(Computer Name)" -Source "$(Source)" -Message "$(Content)" -id "$(Event ID)" -EntryType "$(Event Severity)"

L’onglet Published Data permet d’indiquer quelles informations seront republiées dans le Bus Orchestrator, afin d’être ensuite réutilisées par d’autres activités. Nous n’en rajouterons pas dans cet exemple, mais il est tout à fait possible d’imaginer publier l’ID et le contenu de l’évenement, par exemple.

Cliquer sur OK.

clip_image020

Cliquer sur Next

clip_image022

L’assembly compile…

clip_image024

Voilà, c’est compilé. L’assistant propose de passer directement au packaging de l’Integration Pack, mais il est préférable de commencer par tester notre assembly afin de s’assurer qu’elle fonctionne comme souhaité.

Cliquer sur Finish.

clip_image026

Lancer le Runbook Designer, créer un nouveau runbook et y ajouter les activités Initialize Data et Invoke .NET. Cette dernière est disponible grâce à l’Integration Toolkit importé en début d’article et permet d’exécuter une assembly au format dll comme s’il s’agissait d’un OIP finalisé et packagé, ce qui permet donc de la tester rapidement.

clip_image028

Ouvrir les propriétés de l’activité Invoke .NET. Dans le champ Assembly, sélectionner la dll de l’assembly préalablement crée. Dans Class, sélectionner la class correspondante (dans notre exemple il n’y en a qu’une). Laisser Setup vide (ce champ ne sert que pour les classes développées à l’aide du SDK).

clip_image030

Dans l’onglet Properties, remplir les paramètres de l’activité puis cliquer sur Finish.

clip_image032

Attention ! Il est nécessaire que le journal d’événement ainsi que la source indiqués soient déjà enregistrés sur l’ordinateur cible ! Au besoin, il est possible de les créer à l’aide du PowerShell suivant :
New-EventLog -logname $JournalDevenement -Source $Source -ComputerName $ComputerName -ErrorVariable Err

Dans l’exemple ci-dessus, le journal utilisé est Application (présent par défaut) et la source est TestOIP (n’existe pas d’origine). Nous la créons donc ainsi :
New-EventLog -LogName "Application" -ComputerName "localhost" -source "TestOIP" -ErrorVariable Err

clip_image034

 

Lancer le Runbook Tester et cliquer sur Run.

clip_image036

Si tout s’est bien passé, voilà ce qui doit apparaitre dans l’Event Viewer :

clip_image038

Voilà, le « moteur » de notre Integration Pack fonctionne. Il ne reste plus qu’à le packager pour pouvoir le déployer sous forme d’OIP à notre infrastructure Orchestrator, ce que nous aborderons dans la seconde partie.

Utiliser la console Web de SCOM 2012 sous Windows XP

 

Microsoft ayant pris la décision de ne pas assurer la compatibilité de la console “lourde” SCOM 2012 avec Windows XP, il n’est plus possible de l’installer sur des ordinateurs exécutant encore ce système.

Toutefois, il peut toujours s’avérer nécessaire d’accéder à une console SCOM 2012 depuis un de ces ordinateurs et pour ce faire, la console Web semble être une solution parfaitement adaptée.

Malheureusement, une nouvelle mauvaise surprise vous attend : après avoir installé l’extension Silverlight SilvelightClientConfiguration.exe (proposée automatiquement à la première connexion) et tenté d’ouvrir une session, le message d’erreur suivant vous accueille et la console ne se charge pas :

The procedure entry point LocaleNameToLCID could not be located in the dynamic link library Kernel32.dll.

Cette erreur se produit car l’API LocaleNameToLCID n’est présente dans Kernel32.dll qu’à partir de Windows Vista (cf. http://msdn.microsoft.com/en-us/library/windows/desktop/dd318711%28v=vs.85%29.aspx ). Décidemment, cette console refuse de s’ouvrir sous Windows XP…

A l’aide de l’outil Procmon, on constate que SilverlightClientConfiguration.exe doit normalement créer des entrées dans la base de registre, correspondant à des certificats propres à SCOM 2012 et SCOM 2012 UR1 respectivement.

Il est donc possible de contourner le problème en important directement ces entrées dans la base de registre via le fichier OM2012WebConsoleFix.reg (disponible ici : http://blogs.technet.com/b/mihai/archive/2012/05/08/making-the-om-2012-web-console-accessible-from-a-windows-xp-client.aspx ), sans passer par SilverlightClientConfiguration.exe.

Il est cependant vraisemblable que les futures mises à jour de la console Web induiront des certificats différents.
Afin de pouvoir les retrouver (sur un client Vista ou supérieur) pour les exporter et les réimporter sur vos clients Windows XP, il est intéressant de noter que la clé de registre utilisée est HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Silverlight pour les Windows 64bits et HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Silverlight pour le Windows 32bits ainsi que HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\TrustedPublisher\Certificates\19F8F76F4655074509769C20349FFAECCECD217D dans tous les cas.

Une fois cette modification apportée au registre, la console Web SCOM 2012 est accessible sans avoir besoin d’installer SilverlightClientConfiguration.exe ni nécessiter de redémarrage.

SCOM – Erreurs “Script based test failed to complete”

Suite au déploiement manuel de l’agent SCOM sur des contrôleurs de domaine Active Directory d’un domaine distant, les alertes de type “script based test failed to complete” suivantes peuvent apparaitre :

image

AD Lost And Found Object Count : The script 'AD Lost And Found Object Count' failed to create object 'McActiveDir.ActiveDirectory'. This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)

image

AD Replication Monitoring : encountered a runtime error.
Failed to create the 'McActiveDir.ActiveDirectory' object.
The error returned was 'ActiveX component can't create object' (0x1AD)

Cette erreur se produit car il manque un composant de supervision spécifique aux Contrôleurs de Domaine, nommé AD Helper Object. Ce dernier s’installe automatiquement et de façon transparente lors du déploiement de l’agent via une installation « push », mais pas lors d’une installation manuelle (cas d’un serveur situé derrière un firewall par exemple).

Il est donc nécessaire d’installer ce composant à la main également, à l’aide du package oomads.msi disponible sur le média d’installation de SCOM dans le dossier HELPEROBJECTS :

Copier le package oomads.msi correspondant à l’infrastructure matérielle du contrôleur de domaine (I386 pour les Windows 32 bits ou AMD64 pour les Windows 64bits) sur le contrôleur de domaine qui remonte l’erreur, puis l’y installer.
L’installation ne requiert aucune intervention et affiche l’écran suivant une fois terminée :

image

L’alerte devrait alors cesser de remonter, sans nécessiter de redémarrage.

SCOM - Créer à la volée de nombreux certificats pour des agents SCOM en DMZ

 

Comme l’a déjà détaillé Christophe Jourdan dans ce billet, il est nécessaire de créer et d’attribuer un certificat à chaque serveur situé dans un domaine non approuvé ou dans un workgroup/DMZ et que l’on souhaite monitorer à l’aide de SCOM .

Cependant, cette tâche peut s’avérer fastidieuse et répétitive si elle concerne un nombre important de serveurs… Il est possible de contourner le problème en faisant appel à des serveurs Gateway, mais cette solution n’est pertinente que si les serveurs à monitorer se trouvent majoritairement dans le même domaine distant.

Dans le cas où il s’agit de serveurs répartis dans de nombreux domaines différents, ou principalement situés en Workgroup ou en DMZ, cette solution du serveur Gateway ne présente pas d’avantage particulier puisqu’il faudra toujours générer un certificat par serveur à monitorer.

Heureusement, l’équipe de développement de SCOM a mis à disposition deux outils bien utiles pour automatiser en grande partie ce procédé : CertGenWizard et CertInstaller, réunis dans le package certgenbinaries.

CertGenWizard permet de requêter votre Autorité de Certification (CA) pour demander en une seule fois la création des certificats pour la liste de serveurs que vous lui indiquerez, puis les télécharge et les enregistre dans le dossier de votre choix. Il récupère également le certificat d’autorité racine (Root CA).

CertInstaller
permet quant à lui d’automatiser l’installation des certificats machine et root CA dans le magasin de certificats du serveur à monitorer, ainsi que de les inscrire dans la configuration SCOM à l’aide de MOMCertImport automatiquement.

 

Aperçu de leur utilisation :

 

Pré-requis:

-.NET Framework 3.0

-Une autorité de certification (Win2K3/Win2K8 Enterprise/Stand-alone CA)

-S’il s’agit d’une CA Entreprise, un template OpsMgr doit être créé (cf. http://blogs.technet.com/b/ptsblog/archive/2011/12/28/monitoring-machines-using-certificates-with-system-center-operations-manager-2007-r2-part-1.aspx )

- createReqFile.bat doit rester dans le même dossier que CertGenWizard.exe

-Copier le MOMCertImport.exe correspondant à votre version de SCOM (2007/R2/2012) ainsi qu’aux serveurs visés (32 ou 64bit) depuis votre media d’installation de SCOM (dossier SUPPORTTOOLS) dans le même dossier que CertInstaller.exe.

-Attention, CertInstaller ne fonctionne pas sous Windows XP et ne pourra donc pas être utilisé si les machines que vous souhaitez superviser utilisent encore ce système !

 

Génération des certificats:

1. Télécharger l’archive zip de l’outil et la décompresser.

2. Lancer CertGenWizard.exe et cliquer sur Next.

clip_image002

3. Indiquer si l’Autorité de Certification est présente sur le serveur qui exécute l’outil (Search this computer) ou si elle se trouve sur un autre serveur (Search the network). Dans ce second cas, indiquer son nom et son domaine dans les champs CA name et CA host name.
Cliquer sur Next.

clip_image004

4. Indiquer la liste des serveurs à superviser hors-domaine (un seul par ligne) dans la liste Computers ainsi que le dossier où stocker les certificats dans Certificate Destination Folder.
Cliquer sur Create.
clip_image006

5. Après quelques secondes, l’outil confirme la création des demandes de certificat auprès de l’Autorité de Certification et demande de les y approuver :
clip_image008

6. Ouvrir la console « Autorité de Certification », dossier « Pending Requests ». Sélectionner les demandes de certificat en attente et faire Clic-droit > Issue :
clip_image010

7. Revenir à l’outil CertGenWizard et cliquer sur Retrieve. Les certificats sont copiés dans le dossier préalablement indiqué. Une fenêtre de résumé s’affiche, indiquant les certificats générés et copiés. Cocher Open folder to view certificates puis cliquer sur Close.
clip_image012

8. LE dossier contenant les certificats pour chacun des serveurs à monitorer s’ouvre. Il contient également le certificat racine Root Certificate, qui servira aussi sur chacun des serveurs à monitorer.
clip_image014

 

Import des certificats sur les serveurs cible:

Réaliser cette étape à la main (import du certificat racine et du certificat machine puis exécution de MOMCertImport) peut s’avérer tout aussi fastidieux que de créer les certificats à la main.

L’outil CertInstaller, fourni dans le package, permet heureusement de simplifier également ce processus.

Attention : l’agent SCOM doit être installé avant de réaliser cette opération !

1. Sur chaque serveur à monitorer, copier dans le même dossier le certificat machine généré à l’étape précédente correspondant ainsi que le certificat racine RootCertificate. Copier également l’outil CertInstaller.exe présent dans le package et l’exécutable MOMCertImport disponible sur le media d’installation de SCOM correspondant à la plateforme à monitorer (x86 ou x64).
clip_image016

2. Sur le serveur à monitorer, lancer CertInstaller. Sélectionner le certificat machine dans le champ Machine Certificate et le certificat racine dans le champ Root CA Certificate. Cliquer sur Install.
clip_image018

Voilà, c’est terminé. Vous pouvez vérifier que les certificats sont bien importés en ouvrant le magasin de certificat du serveur à monitorer.

S’il n’y a pas d’autre problème, le serveur doit remonter dans SCOM au bout de quelques minutes.

Erreur avec Office Communicator : “n'a pas pu récupérer le calendrier ou les informations d'absence du bureau à partir des services Web Exchange” suite à une migration vers Exchange 2010

Suite au passage d’une infrastructure Exchange 2003 vers Exchange 2010, les utilisateurs d’Office Communicator 2007 et d’Outlook 2007 ou ultérieur dont la boite a été migrée vers la nouvelle infrastructure signalent un souci de remontée d’informations de présence ainsi que d’absence de bureau : lorsqu’ils ont une rendez-vous, une réunion ou un message OOF planifié dans leur calendrier Outlook, leur statut ne change pas automatiquement dans le client Communicator et leurs contacts ne sont donc pas prévenus de leur indisponibilité.

Par ailleurs, le client Communicator signale une erreur dans ses notifications (icone du point d’exclamation rouge sur dossier) et précise le message d’erreur   “Office Communicator n'a pas pu récupérer le calendrier ou les informations d'absence du bureau à partir des services Web Exchange” ("Communicator could not retrieve calendar or Out of Office information from Exchange Web Services") lorsque l’on clique sur la notification :

[image8.png]

[clip_image0013.png]

Si votre configuration EWS est vérifiée et que vous êtes certains de son exactitude, le problème provient alors probablement d’une version trop ancienne du client Communicator.

Microsoft a reconnu ce problème dans la KB 2172695 et a mis à disposition un hotfix qui couvre normalement ce problème, inclus dans le dernier pack de mises à jour disponible : http://support.microsoft.com/kb/2300255
(NB : il s’agit d’un hotfix pour le client Communicator, qui doit par conséquent être déployé sur tous les postes clients. La partie serveur Office Communication Server n’est pas concernée par ce correctif)

Pour mémoire, le processus de récupération des informations de présence par le client Communicator n’est pas instantané : il n’a lieu par défaut que toutes les 30min (à +/10min pour éviter que toutes les requêtes se fassent simultanément ce qui surchargerait les serveurs).  
Il est donc normal que le statut de présence ne soit pas mis à jour immédiatement après application du correctif ou lors de la création d’un rendez-vous “de test” dans Outlook!
Cependant, la notification d’erreur doit avoir disparu; et il est possible de forcer le rafraichissement du statut de présence en quittant puis relançant le client Communicator après la création d’un rendez-vous dans Outlook.

Identifier la version du client qui se connecte a une boite mail Exchange 2003

 

Bien que ce sujet puisse sembler dépassé, il peut en réalité encore servir aujourd’hui précisément dans le cadre d’une migration Exchange 2003 vers Exchange 2010 (par exemple pour ne migrer que les utilisateurs disposant d’une version d’Outlook supérieure ou égale à la 2007).

Il n’est pas possible de retrouver cette information directement à l’aide d’un cmdlet Powershell pré-existant, mais une requête WMI (classe Exchange_Logon du namespace root\MicrosoftExchangev2) exécutée via Powershell le permet :

Get-wmiobject -class Exchange_Logon -Namespace ROOT\MicrosoftExchangev2 -ComputerName ServerA -filter "LoggedOnUserAccount != 'NT AUTHORITY\\SYSTEM'" | select-object MailboxDisplayName,ClientVersion

La commande précédente permet donc de lister la version du client utilisée par chaque utilisateur pour se connecter.
On remarque qu’elle est nécessairement ciblée sur un serveur Exchange 2003 spécifique (-ComputerName ServerA).


Cependant, dans le cas où Exchange est configuré en cluster, il faut obligatoirement interroger le noeud actif pour obtenir cette information.
Il peut donc s’avérer utile de retrouver quel est le nœud actif d’un cluster à l’aide d’un script, encore une fois via WMI et Powershell (classe mscluster_nodetoactivegroup du namespace root\mscluster) puisque là non plus, Powershell ne permet pas nativement de retrouver cette information :

Get-WmiObject –ComputerName NomVirtuelduCluster –Namespace\root\mscluster –class mscluster_nodetoactivegroup  | select groupcomponent,partcomponent

image

Afin de ne conserver de ce résultat que la partie qui nous intéresse, à savoir le nom du noeud actif à proprement parler, on utilise la commande suivante :

$activenode = (( Get-WmiObject -ComputerName $myLegacyExchangeCluster -Namespace root\mscluster -Class mscluster_nodetoactivegroup -ErrorAction SilentlyContinue | Where-Object { $_.PartComponent -like "*Exchange Group*" } ).GroupComponent ).Split('"')[1]

Il ne reste alors plus qu’à réintégrer cette valeur à la première commande via le paramètre  –ComputerName $activenode afin d’obtenir un fonctionnement automatisé.

SCOM 2007 R2 : Les découvertes ne fonctionnent pas et une erreur “Workflow Initialization Failed to start a workflow that runs a process or script” revient en boucle

Lors du déploiement d’un management pack dont les découvertes sont basées sur des scripts locaux (par exemple Exchange 2010) dans SCOM 2007 R2 dans un environnement où les serveurs sont protégés par McAfee VirusScan Enterprise, les services concernés ne sont pas découverts et leur état n’apparait donc pas dans l’écran Supervision de SCOM.

En parallèle, des processus cscript.exe tournent sans fin sur les serveurs concernés et des alertes « Workflow Initialization Failed to start a workflow that runs a process or script » remontent dans SCOM :

clip_image002_thumb2

Des erreurs cscript.exe sont également enregistrées dans l’Application Event Log de Windows sur les serveurs où se trouvent les services et applications qui devraient être découverts :

Event ID 1000
Faulting application name: cscript.exe. version: 5.8.7600.16385. time stamp:
0x4a5bc670 Faulting module name: ScriptSn.20110218083735.dll_unloaded.
version: 0.0.0.0. time stamp: 0x4d2ce466
Exception code: 0xc0000005 Fault offset: 0x6ff7466a Faulting process id:
0xbdc Faulting application start time: 0xcscript.exe0 Faulting application
path: cscript.exe1 Faulting module path: cscript.exe2 Report Id: cscript.exe3

Ce problème est lié au module ScriptScan de McAfee VSE en version 8.8 qui se comporte de façon assez inattendue : lorsqu’il est désactivé, il empêche malgré tout l’exécution des scripts (dont ceux nécessaires à la détection des composants que SCOM cherche à monitorer) et ce même si les exclusions adéquates sont positionnées.

Trois solutions sont alors disponibles :

  • Activer le module ScriptScan
  • Complètement désinstaller la fonctionnalité ScriptScan en désenregsitrant la dll SCRIPTSN.dll sur chaque serveur :
    cd "C:\Program Files\Common Files\McAfee\SystemCore"
    regsvr32.exe /u SCRIPTSN.dll
  • Déployer la version 8.8 patch 1 mise à disposition par McAfee.

C’est bien entendu cette dernière solution qu’il faudra privilégier. Pour plus de détails sur ce blocage, McAfee a également publié une KB à ce sujet : https://kc.mcafee.com/corporate/index?page=content&id=KB71660

SCOM 2007 R2 – Créer une tâche console avec la console authoring

Les « tâches console » sont comme leur nom l’indique des tâches qui s’exécutent sur la console, par opposition aux tâches Agent qui sont elles exécutées sur les ordinateurs monitorés et dont le résultat est ensuite affiché dans la console.

Elles permettent de lancer un exécutable sur l’ordinateur exécutant la console, éventuellement en lui passant des paramètres récupérés dans la console.

Exemple concret : on peut ainsi lancer un ping ou une session bureau à distance automatiquement vers le l’ordinateur sélectionné dans  la console.

Je détaillerai ici le cas rencontré chez un client qui souhaitait pouvoir accéder aux incidents créés indépendamment de SCOM dans un système de gestion de tickets tiers à la suite de la remontée de certaines alertes dans SCOM.
Ce système de ticket étant accessible via un simple navigateur web sur une url fixe prenant l’ID du ticket en paramètre (ID préalablement renseignée dans un CustomField de l’alerte par le helpdesk), nous avons procédé de la sorte :

Dans la console Authoring (et non pas la vue authoring de la console Operations, cette dernière ne permet pas de créer ce genre de tâche!), créer un nouveau management pack.
Se rendre dans la vue Presentation et sélectionner Console Tasks dans le menu de gauche, puis faire un clic-droit à sélectionner New>Console Task (attention à ne pas confondre avec les Agent Tasks qui se trouvent elles dans la vue Health Model!) :

image

Nommer cette nouvelle tâche :

image

Lui donner un nom d’usage, qui apparaitra dans SCOM et choisir l’élément qu’elle ciblera :

image

 

Dans l’onglet Command Line, renseigner la partie fixe de la commande lancée par la tâche.
Dans notre cas il s’agit donc d’appeler le navigateur web et de lui passer la partie invariable de l’URL du système de gestion de tickets, mais plutôt que d’indiquer le chemin absolu vers l’exécutable du browser, nous avons choisi d'appeler le navigateur par défaut du système à l’aide du raccourci rundll32 url.dll,FileProtocolHandler http://suivi.tickets.local/?ticketID= .
Cela permet d’éviter les potentiels soucis liés à l’utilisation de navigateurs différents suivant les ordinateurs et respecte ainsi les préférences de l’utilisateur de la console SCOM.
Il faut ensuite indiquer en paramètre que l’on souhaite récupérer le CustomField de l’alerte contenant l’ID du ticket.
Oui mais… par défaut, seul le Display Name est disponible en paramètre :

image

 

Afin de modifier ce comportement, se rendre dans l’onglet Options et cliquer sur Category [Value=MonitoringObject]. Cela dévoile des options qui étaient jusque là invisibles et il est alors possible de sélectionner la catégorie Alert :

image

 

En retournant dans l’onglet CommandLine, on constate qu’il est maintenant possible de sélectionner les CustomField  comme paramètres (ainsi que bien d’autres, libre à vous d’adapter suivant vos besoins!) :

image

 

Il ne reste plus qu’à enregistrer le management pack et à le publier dans SCOM.