Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Suppression d’un profil utilisateur sous Windows 7 manuellement

Sous Windows XP, beaucoup de personnes pour résoudre des problèmes de profils renomment les profils utilisateurs(.old) afin que celui-ci soit régénéré par le système lors de la connexion de l’utilisateur en question.

Cependant sous Windows 7, pour régénérer un profil utilisateur en utilisant la technique de renommage, celui-ci va générer un profil temporaire.

Exemple : je me logue avec un utilisateur.

image

On peut désormais constater le répertoire du profil utilisateur dans c:\users.

clip_image002

Maintenant, on se connecte en tant que administrateur sur la machine et on renomme le répertoire du profil utilisateur afin que celui-ci ne soit plus trouver par le système.

clip_image003

Maintenant, si notre utilisateur essaie de se reconnecter sur cette même machine, il va avoir la surprise d’utiliser un profil temporaire.

clip_image004

clip_image005

La méthode pour régénérer un profil utilisateur en renommant le répertoire doit également contenir la suppression du pointeur du profil dans le registre.

Pour cela, il suffit d’accéder à la clé ProfileList

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Et là on peut constater que notre répertoire utilisateur n’étant plus trouvé par le système, celui s’est renommé .bak

clip_image006

clip_image007

Il faut alors supprimer cette clé.

clip_image008

clip_image009

Dès lors ou l’utilisateur se reconnectera à sa machine celui-ci régénéra un profil et non plus un profil temporaire.

L’entrée de l’utilisateur dans la clé “ProfileList” est également régénéré.

 

clip_image010

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