Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Powershell–Gestion du réseau

Contexte

Il arrive souvent lors de l’installation de certains produits ou fonctionnalitée de devoir réaliser des opérations de vérification des pré-requis. Le premier pré-requis a satisfaire concerne souvent le réseau:

  • Suis-je en capacité de joindre ma passerelle?
  • Le ou les contrôleurs hébergeant les rôles FSMO sont-ils joignable?
  • Mes serveurs DNS sont-ils joignable?

Pour réaliser ces opérations sur quelques serveurs cela peut être réalisé manuellement, mais lorsque le nombre de serveur est conséquent, cela peut s’avéré fastidieux. Je vous propose de travailler en powerShell pour simplifier/automatiser cette opération.

Etape 1: récupérer la configuration de machine

Pour cela rien de bien compliquer, la commande ipconfig /all nous retourne l’ensemble des éléments nécessaire:

image

Maintenant il faut pouvoir isolé chaque paramètre de réponse (ici identifiés de 1 a 6). Pour cela un traitement sur le retour d’ipconfig est nécessaire:

  1. 1. Adresse IPv4:  ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
  2. 2. Masque : ((ipconfig | findstr [0-9].\.)[1]).Split()[-1]
  3. 3 Passerelle : ((ipconfig | findstr [0-9].\.)[2]).Split()[-1]
  4. 4 Serveur DHCP : ((ipconfig /all| findstr [0-9].\.)[3]).Split()[-1]
  5. 5 DNS Principal : ((ipconfig /all| findstr [0-9].\.)[5]).Split()[-1]
  6. 6 DNS Secondaire ((ipconfig /all| findstr [0-9].\.)[6]).Split()[-1]

 

Etape 2: Exécuter un ping en powershell

Pour réaliser cette opération les commandes suivante nous retourne un résultat contenant les valeur attendu:

image

  • new-object System.Net.NetworkInformation.ping
  • $reply = $ping.Send(« 192.168.0.254 »)

Nous savons donc que le ping a fonctionné au travers du status. qu’il reste a isoler puis a traiter. Pour l’isolation, l’utilisation des variables nous simplifie la tache:

image

Etape 3: Automatisation des résultats

Afin de valider le bon fonctionnement des pré-requis lié au réseau, nous pouvons traiter les retours au travers de différents moyens, pour ma part, je préfère utilisé les conditions au travers du If – Else

   1: #***** Stockage des parametre dans une variable*****#

   2:     $IP= ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]

   3:     $IPMask= ((ipconfig | findstr [0-9].\.)[1]).Split()[-1]

   4:     $IPgtw= ((ipconfig | findstr [0-9].\.)[2]).Split()[-1]

   5:     $IPDHCP=((ipconfig /all| findstr [0-9].\.)[3]).Split()[-1]

   6:     $DNS1=((ipconfig /all| findstr [0-9].\.)[5]).Split()[-1]

   7:     $DNS2=((ipconfig /all| findstr [0-9].\.)[6]).Split()[-1]

   8:  

   9: #**Test passerelle**#

  10:     $reply = ""

  11:     $status =""

  12:     $ping = new-object System.Net.NetworkInformation.ping

  13:     $reply = $ping.Send($IPgtw)

  14:  

  15: if ($reply.status -eq "success")

  16:     {

  17:     write-host "Passerelle joignable" -foregroundColor green

  18:     }

  19:     Else

  20:     {

  21:     write-host "Passerelle injoignable" -foregroundColor red

  22:     }

  23:  

  24: #**Test DHCP**#

  25:     $reply = ""

  26:     $status =""

  27:     $ping = new-object System.Net.NetworkInformation.ping

  28:     $reply = $ping.Send($IPDHCP)

  29:  

  30: if ($reply.status -eq "success")

  31:     {

  32:     write-host "DHCP joignable" -foregroundColor green

  33:     }

  34:     Else

  35:     {

  36:     write-host "DHCP injoignable" -foregroundColor red

  37:     }

  38: #**Test passerelle**#

  39:     $reply = ""

  40:     $status =""

  41:     $ping = new-object System.Net.NetworkInformation.ping

  42:     $reply = $ping.Send($DNS1)

  43:  

  44: if ($reply.status -eq "success")

  45:     {

  46:     write-host "DNS joignable" -foregroundColor green

  47:     }

  48:     Else

  49:     {

  50:         $reply = ""

  51:         $status =""

  52:         $ping = new-object System.Net.NetworkInformation.ping

  53:         $reply = $ping.Send($DNS2)

  54:         if ($reply.status -eq "success")

  55:             {

  56:             write-host "DNS joignable" -foregroundColor green

  57:             }

  58:             Else

  59:             {

  60:             write-host "DNS injoignable" -foregroundColor red

  61:             }        

  62:     }

  63:  

Le résultat positif retourne:

image

Le résultat négatif retourne:

image

Conclusion

Cette vérification permet de réaliser un enchainement de script ou d’action si et seulement si les paramètres réseaux sont correct. Par exemple en créant un flag si les résultats sont positif !

SCOM 2007 : Créer un scénario d’escalade d’alerte

Trop souvent, les souscriptions d’alertes ne sont pas utilisées à leur plein potentiel : une seule souscription est créée, ce qui peut bien entendu suffire dans certains cas mais pourraient être largement optimisé dans d’autres.

On peut ainsi définir de vrais scénarios d’escalade : par exemple si aucune action n’a été effectuée pour résoudre une alerte après un délai imparti, on peut décider d’envoyer un SMS à un responsable ou bien de transférer l’alerte à un autre service.

Prenons l’exemple de la souscription suivante, nommée « Alerte Linux » :

clip_image001

clip_image002

clip_image003

Il s’agit d’une souscription des plus classique, où toutes les nouvelles alertes (resolution state 0) concernant les serveurs membres du groupe Unix Computers (donc tous les ordinateur Unix/Linux monitorés par SCOM) et de priorité moyenne ou haute seront adressées par mail à l’utilisateur « Support_Linux ».

Imaginons maintenant que nous souhaitons que cette alerte soit automatiquement transmise par SMS à un responsable si elle n’est pas prise en charge au bout d’une heure.
Il suffit pour ce faire de créer une alerte avec des conditions de déclenchement identiques en tous points à la précédente, que nous nommerons par exemple « Alerte Linux (+1h) » et qui sera cette fois destinée à l’utilisateur « Manager_Linux » avec un délai (alert aging) d’une heure :

clip_image004

clip_image006

En se basant sur ce système, il devient très simple de créer des scénarios d’escalade en fonction du niveau de résolution, de l’heure de la journée (en créant des subscribers valables uniquement la nuit pour les astreintes par exemple) ; ou bien de n’envoyer l’alerte par mail que si elle n’a pas été prise en compte directement dans la console… les possibilités sont vastes !

Et comme il peut être fastidieux de recopier à l’identique les conditions de déclenchement d’une subscription (sans parler du risque de se tromper), Timothy McFadden (PFE chez Microsoft) a developpé un outil très pratique, Subscription Copier :

clip_image007

Il permet de sélectionner une subscription initialement créée avec les bons paramètres de la copier autant de fois que vous en aurez besoin pour votre scénario d’escalade. Il permet également de prédéfinir un délai (alert aging) qui s’incrémente de copie en copie.
Disponible sur son blog : http://www.scom2k7.com/subscription-copier/

SCVMM 2008 R2 et Sysprep

Contexte

Lors de la préparation de déploiement de contrôleurs de domaine virtualisés, j’ai souhaité embarquer dans un Template déjà existant un export média d’Active Directory, le tout dans le but de réaliser une “Install From Media” (IFM) afin de réduire le temps de la première réplication et aussi économiser de la bande passante.

Les étapes

Pour réaliser cette opération, j’ai suivi les grandes étapes suivante:

  1. Export de l’AD de production dans un répertoire
  2. Déploiement du Template OS (déjà utilisé pour d’autres services)
  3. Copie de l’export dans le répertoire souhaité de la VM
  4. Arrêt de la machine Virtuel
  5. Tentative de création du Template

 

Création du Template

Une fois la machine arrêter, il est possible de générer le Template, cependant la création du Template au travers de SCVMM échoue a 49%:

clip_image002 En analysant le statuts de création du Template on remarque que ce dernier échoue a 99% de la partie Sysprep:

image

et ce même après plusieurs tentatives sur différents hôtes et différentes librairies:

image

La cause

Dans le cas présent, le mécanisme sysprep exécute la commande sysprep /generalize.

Pour rappel, il n’existe aucune limite au nombre d’exécutions de Sysprep sur un ordinateur. Cependant, l’horloge de l’Activation de produit Windows commence son décompte la première fois que Windows est lancé. Vous pouvez utiliser la commande sysprep /generalize pour réinitialiser l’activation du produit Windows à trois reprises maximum. Après trois exécutions de la commande sysprep /generalize, l’horloge ne peut plus être réinitialisée.

Les solutions

Afin de palier a ce type de problème, vous pouvez:

  • Recréer une machine virtuel et refaire le Template
  • Modifier le comportement de “Microsoft-Windows-Security-Licensing-SLC” via le paramètre SkipRearm positionner sur la valeur 1
  • Utiliser les fonctionnalités de déploiement de machine virtuelle pour y ajouter la copie de fichier a la première ouverture de session.

Pour rappel, il existe un outils permettant de réaliser les mises a jours des Vhd offline, des Templates ainsi que des machines Offline des librairie VMM. Virtual Machine Servicing Tool (VMST). Pour plus d’information http://technet.microsoft.com/en-us/library/cc501231.aspx .