WSUS by powershell part 2 – Reporting des clients WSUS

Bonjour à tous,

dans mon premier article sur WSUS et Powershell Wsus industrialisation du déploiement des mises à jour je vous suggérai un ensemble de script afin de gérer le déploiement de vos mises à jour ainsi que le traitement des indicateurs WSUS.

Je vais maintenant vous montrer comment lister l’ensemble des serveurs:

– en attente de redémarrage
– en erreur suite à l’installation de mise à jours
– n’ayant pas contacté WSUS depuis plusieurs jours

Je ne m’attarderai donc pas sur certaines commandes Powershell que nous pourrions déjà avoir vu ensemble lors de mon premier article lié à WSUS

Clients WSUS en attente de redémarrage Lire la suite « WSUS by powershell part 2 – Reporting des clients WSUS »

Remove Skype contacts – Manage and Remove Internal Contacts with Script and Powershell

Bonjour à tous,

si vous ne le saviez pas déjà, il est possible d’automatiser l’ajout de contacts Skype à l’ensemble de vos utilisateurs Skype.
Merci Michael LaMontagne -> https://gallery.technet.microsoft.com/office/Invoke-SFBContacts-3b3ad2ef

En revanche une fois le contact Skype ajouté, si celui ci ne fait plus parti de la société il restera malgré tout dans votre liste car il n’existe pas de processus de purge.

Je vais vous montrer ici comment récupérer la liste de vos utilisateurs Skype et pour chacun d’eux, purger complètement la liste des contacts internes afin d’avoir une liste de contact régulièrement remise à zéro et du coup « Up to Date ».

Ce premier script sera exécuté depuis votre serveur Skype Lire la suite « Remove Skype contacts – Manage and Remove Internal Contacts with Script and Powershell »

WSUS by Powershell. Industrialisation du déploiement des mises à jour et Indicateurs

Bonjour à tous,

j’avais envie aujourd’hui de vous montrer comment automatiser et industrialiser l’approbation automatique et donc l’application de patch Microsoft pour vos serveurs Windows.

en effet, suite à l’arriver des différents Cryptolocker qui nous menace maintenant quotidiennement, j’ai due, au sein de l’entreprise pour laquelle je travaille, passer des semaines, pour améliorer la gestion des patch Microsoft et surtout faire en sorte que ce qui était fait à la main auparavant ne le soit plus afin de diminuer le risque d’erreur humaine. Effectivement, nous nous sommes rendu compte que le fait d’oublier d’approuver des patch de sécurité Microsoft par mégarde ou parceque le process n’est pas assez clair, pouvait mettre en péril les données d’un nombre conséquent de serveur que l’on héberge.

Cet article ne sera pas porté sur l’installation ni même le paramétrage WSUS mais sur la gestion des mises à jours et leur distribution au sein de votre parc informatique. Cet article sera donc plus compréhensible par un administrateur connaissant déjà bien l’outil et qui le manipule de façon régulière.

Les scripts powershell que je vais vous présenter sont spécifiques à mon entreprise, à notre infra et aussi à notre besoin mais ils vous permettront, d’avoir une bonne base s’il s’avère que vous puissiez être amené à utiliser powershell pour gérer WSUS; ce que je vous conseille fortement pour avoir toute la souplesse que l’on va découvrir ensemble par la suite.

Je vais vous montrer:

  • comment lancer une synchronisation WSUS, récupérer les informations de synchronisation et les injecter dans une page web ou dans un fichier excel
  • comment récupérer la liste des mises à jours et les indicateurs du Tuesday Patch
  • comment approuver des mises à jours pour des groupes WSUS spécifiques
  • comment exporter le résultat de vos filtres dans un fichier au format CSV
  • comment envoyer des mails avec contenu au format HTM

Dans un premier temps, je voulais vous préciser pourquoi je ne me suis pas servi de la fonction « Règle d’approbation automatique » que l’on retrouve dans la console de gestion WSUS pour approuver les patch Microsoft. Puisque tous mes scripts parte de ce qui va suivre, j’aurai finalement plus appeler cet article « Règles d’Approbation automatique versus Powershell approbation ».

La raison est double,

  • d’une part, lorsque vous synchronisez votre serveur WSUS à Windows update, vous récupérer une liste de nouvelles mises à jours. Si la règle d’approbation automatique que vous avez créée « match » avec l’une des nouvelles mises à jours récupérées, alors celle ci sera automatique approuvée une fois la synchronisation terminée et donc mis à disposition des serveurs impactés par la Règle d’approbation automatique.

Cela me dérange dans le sens où je souhaite pouvoir synchroniser mon WSUS à Windows Update sans forcément lancer une processus d’approbation dans la foulé. En effet je souhaite décider quand approuver les patch et donc leur téléchargement.

  • D’autre part, si vous avez une infra WSUS multi serveurs comme la notre, avec un serveur WSUS parent et un ou plusieurs serveurs WSUS enfants, vous devez déjà savoir que les informations des serveur WSUS enfants seront à jour coté WSUS parent uniquement après synchronisation de deux parties.

En effet si vous ne synchronisez par souvent, vous verrez régulièrement un décalage entre le WSUS parent et le WSUS enfant. Par exemple des clients wsus absents, des groupes non présents, des dates de dernier rapport fausses etc…un peu à la manière de la console SCVMM et des host Hyper-V, si vous n’actualisez pas les hosts\machines virtuelles régulièrement pas votre console n’est pas à jour!

L’idéal est donc de tout gérer à partir du serveur parent, d’utiliser une seule console WSUS.

Venons en maintenant au premier script celui qui va lancer la synchronisation de notre WSUS

#récupération des informations WSUS via la commande Get-Wsusserver puis lancement de la synchro avec « StartSynchronization() »

(Get-WsusServer).GetSubscription().StartSynchronization()

# on créée une Variable qui va récupérer la date du jour au format français

$startTime = (get-date -f dd-MM-yyyy)

#on force l’encoding en UTF8 pour gérer les accents dans le mail

$encoding=[System.Text.Encoding]::UTF8

# envoi d’un e-mail avec send-mailmessage

Send-MailMessage -From "wsus@masociete.fr" -To "equipe.microsoft@masociete.fr" -Subject "WSUS - Synchro hebdo lancée $startTime" -SmtpServer "mail.masociete.fr" -Body "WSUS - Synchronisation hebdo lancée" -Encoding $encoding

Ce petit script permet sans avoir à se connecter nulle part, d’être avertit que la synchronisation a été lancé. Pour notre part, nous synchronisons deux fois par semaine WSUS. Le mardi et le vendredi. Le mardi soir permet de récupérer les KB du Tuesday Patch Microsoft (2eme mardi du mois) le plus tôt possible et le vendredi afin d’avoir au moins deux synchronisation par semaine avec les WSUS Downstream.

Regardons maintenant via un second script comment récupérer les informations de synchronisation.
J’entends par là le nombre de nouvelles mises à jours, celles révisées et celles expirées également.

# On récupère dans la variable $Lastsync les informations de la dernières synchronisation WSUS

$lastSync = (Get-WsusServer).GetSubscription().GetLastSynchronizationInfo()

# On va définir un scope afin de récupérer uniquement les mises à jours de cette synchro

$UpdateScope = New-Object -TypeName Microsoft.UpdateServices.Administration.UpdateScope

# Définir un créneau horaire afin de récupérer uniquement les mises à jours de la dernière synchronisation avec une date de début et une date de fin

$UpdateScope.FromArrivalDate = $lastSync.StartTime
$UpdateScope.ToArrivalDate = $lastSync.EndTime

# On récupère cette liste de KB en fonction de l’UpdateScope que l’on vient de configurer.

$SyncUpdates = (Get-WsusServer).GetUpdates($UpdateScope)

# On récupère depuis la variable $SyncUpdates les nouvelles Mises à jours et on les compte

$published = $SyncUpdates | where {($_.publicationstate -like "Published")}
$published.count

# On récupère depuis cette liste les Mises à jours révisées et on les compte

$revised = $SyncUpdates | where {($_.publicationstate -like "revised")}
$revised.count

# On récupère depuis cette liste les Mises à jours expirées et on les compte

$expired = $SyncUpdates | where {($_.publicationstate -like "expired")}
$expired.count

# On récupère la liste de tous les clients WSUS rattachés à nos WSUS (serveurs Wsus parent et enfants grâce à IncludeDownstreamComputerTargets) et on fait le compte

$wsus = Get-WsusServer
$computers = $wsus | Get-WsusComputer -IncludeDownstreamComputerTargets
$computers.count

Pour l’envoi de nos mails nous utilisons en body un fichier HTM. Cette base de format nous permet de réaliser des ajouts à chaud ou simplement d’écrire des choses en dure et de le laisser static.
Le rendu est agréable à visionner (enfin je trouve ^^)

J’ai du coup un fichier HTM par besoin\fonction – Si le fichier HTM est temporaire c’est à dire avec des données que j’injecte seulement à l’instant T comme c’est le cas dans notre exemple je pars d’un Template que je copie, que je complète, que j’envoie puis que je supprime.

# Copie du fichier HTM Temporaire

xcopy /s "C:\Scripts\HTM\IndicateurWSUS\TEMPLATE\*.*" "C:\Scripts\HTM\IndicateurWSUS\"

# Une fois le fichier copié, on déclare le chemin correspondant à notre fichier temporaire.

$Filehtm = "C:\Scripts\HTM\IndicateurWSUS\WSUS.htm"

# On récupère via get-content le contenu du HTM et on y injecte les données des variables précédemment récupérées. L’ajout de donnée se fait vers des numéros de lignes biens spécifique que l’on a préparée en amont.

$fileContent = Get-Content $Filehtm
$fileContent[966] += $computers.count
$fileContent[979] += $published.count
$fileContent[993] += $revised.count
$fileContent[1008] += $expired.count
$fileContent[1023] += $update.count
$fileContent | Set-Content $filehtm

# Une fois notre fichier HTM « mis à jour » avec les données qui vont biens on configure le body du mail comme étant le contenu du fichier HTM.

$body = Get-Content -Path $filehtm | Out-String

# on se positionne en encoding UTF8 afin de gérer les accents que ce soit dans le Subject ou le Body du mail que l’on va envoyer.

$encoding=[System.Text.Encoding]::UTF8

# On positionne la date dans une variable avec le format qui nous intéresse

$startTime = (get-date -f dd-MM-yyyy)

# Envoi du mail via send-mailmessage, l’option -bodyashtml permet d’indiquer que l’envoi de mail utilise un body en mode HTML afin qu’il puisse être correctement interprété

Send-MailMessage -From "wsus@societe.fr" -To "equipe.microsoft@societe.fr","m.jouan@societe.fr" -Subject "Indicateur WSUS - Etat Synchro du Tuesday Patch datant du $startTime" -SmtpServer "mail.masociete.fr" -Encoding $encoding -Body $body -bodyashtml

# On peut exécuter une pause de 5s si besoin via la commande ping.

ping -n 5 127.0.0.1

# Comme expliqué un peu plus haut on supprime le fichier HTM qui a été généré à partir du template

rm "C:\Scripts\HTM\IndicateurWSUS\WSUS_fichiers\" -r -force
rm "C:\Scripts\HTM\IndicateurWSUS\WSUS.htm"

Comment trouvez vous le résultat ? J’ai masqué nos photos mais je vous assure que ce système de communication est appréciable en plus d’être assez simple à prendre en main

Nous pourrions nous arrêter là mais j’ai eu envie d’aller plus loin :), nous allons maintenant pousser ces indicateurs dans un fichier excel
Mais qui dit fichier Excel dit arborescence Windows, la notre ressemble à beaucoup d’autres: « \\Production\Qualité\2018\Indicateurs-2018-02.xls », vous l’aurez compris il va donc falloir jouer avec les mois et les années.
Nous utilisons un seul et même fichier mensuel pour l’ensemble des indicateurs de la société, WSUS on a donc sa propre feuille Excel nommée « WSUS »

Avant de pouvoir remplir mensuellement mon Excel de façon automatisé, j’ai d’abord fait en sorte de gérer le mois et l’année que ce soit dans le path comme dans le nom du fichier lui-même.

# Je déclare donc plusieurs variables afin de récupérer ces deux valeurs

$startTime = get-date
$startTime.Year
$startTime.Month

# Je continue dans la déclaration de variable afin d’être sur ce qu’on appelle du long terme…

if($startTime.Year -like '2018'){$year='2018'}
if($startTime.Year -like '2019'){$year='2019'}
if($startTime.Year -like '2020'){$year='2020'}
if($startTime.Year -like '2021'){$year='2021'}
if($startTime.Year -like '2022'){$year='2022'}
if($startTime.Year -like '2023'){$year='2023'}
if($startTime.Year -like '2024'){$year='2024'}
if($startTime.Year -like '2025'){$year='2025'}
if($startTime.Year -like '2026'){$year='2026'}
if($startTime.Year -like '2027'){$year='2027'}
if($startTime.Year -like '2028'){$year='2028'}
if($startTime.Year -like '2029'){$year='2029'}
if($startTime.Year -like '2030'){$year='2030'}

if($startTime.Month -like '1'){$month='01'}
if($startTime.Month -like '2'){$month='02'}
if($startTime.Month -like '3'){$month='03'}
if($startTime.Month -like '4'){$month='04'}
if($startTime.Month -like '5'){$month='05'}
if($startTime.Month -like '6'){$month='06'}
if($startTime.Month -like '7'){$month='07'}
if($startTime.Month -like '8'){$month='08'}
if($startTime.Month -like '9'){$month='09'}
if($startTime.Month -like '10'){$month='10'}
if($startTime.Month -like '11'){$month='11'}
if($startTime.Month -like '12'){$month='12'}

# Je peux maintenant déclarer mon chemin correspondant au mois et à l’année en cours

$path = "\\Production\Qualité\$year\tdb_"+$year+"_"+$month+".xls"

# Je vérifie via test-path si le fichier excel que je veux remplir existe, si ce n’est pas le cas je viens copier celui du mois précédent.

if (Test-Path $path){} else {
$monthlessnew = $month - 1
$monthlessnew = "{0:D2}" -f $monthlessnew
$pathless = "\\Production\Qualité\$year\tdb_"+$year+"_"+$monthlessnew+".xls"
copy $pathless $path
}

# On récupère la valeur qui vérifie si le fichier Excel est verrouillé ou accessible (true ou False)

$FILE = try { [IO.File]::OpenWrite($path).close();$true }catch {$false}

# Si inaccessible car déjà ouvert, on envoi un mail pour informer que les indicateurs n’ont pu être ajouté automatiquement, sinon on les ajoute au fichier excel

if ($FILE -like "False"){

# J'ai créée un fichier txt avec le chiffre indiquant le numéro de la colonne sur laquelle je vais compléter mes cellules
# Je vous rappelle avoir souhaité tout automatiser, c'était auparavant fait manuellement, je sais cependant aujourd'hui que les indicateurs du mois en cours 02/2017 devront arriver dans la colonne 27
# Avec Excel pour cibler la bonne colonne vous devez retirer 1, dans mon cas je dois donc utiliser 26. Si vous avez bien suivi c'est pourtant la colonne Excel qui à ce jour est déjà complétée et comporte les valeurs du mois de Janvier 2018.
# Je récupère donc la valeur actuelle de mon fichier txt qui est "26"
# Nous nous situons dans la partie du script où le fichier excel est actuellement verrouillé, j’envoie donc simplement un mail pour signaler le blocage et j'incrémente également mon numéro de colonne pour l'exécution de ce script le mois prochain

$colonn = get-content C:\Scripts\colonne.txt
$colonne = [int]$colonn + 1
$colonne > C:\Scripts\colonne.txt
$startTime = (get-date -f MM/yy)

Send-MailMessage -From "wsus@masociete.fr" -To "equipe.microsoft@masociete.fr","m.jouan@masociete.fr" -Subject "Indicateur WSUS - Fichier Excel verrouillé - $startTime" -SmtpServer "mail.masociete.fr" -Encoding $encoding -bodyashtml

} else {

# On est dans la section ou le fichier excel est accessible
# Je peux configurer mes variables qui vont me permettre d'ouvrir mon fichier Excel en indiquant bien via WorkSheets.item la feuille Excel sur laquelle je souhaite travailler.
$xl=New-Object -ComObject Excel.Application
$wb=$xl.WorkBooks.Open($path)
$ws=$wb.WorkSheets.item("Wsus")
$xl.Visible=$true

$startTime = (get-date -f MM/yy)

# on Récupère la valeur de la colonne à traiter
$colonn = get-content C:\Scripts\colonne.txt

# Je peux maintenant positionner les valeurs dans les cellules correspondantes à la bonne colonne.
$ws.Cells.Item(2,$colonn)=$startTime
$ws.Cells.Item(3,$colonn)=$computers.count
$ws.Cells.Item(4,$colonn)=$published.count
$ws.Cells.Item(5,$colonn)=$revised.count
$ws.Cells.Item(6,$colonn)=$expired.count
$ws.Cells.Item(7,$colonn)=$update.count

# J'ajoute maintenant '1' à la valeur précédente qui était "26"
$colonne = [int]$colonn + 1
# Je viens ensuite réinjecter cette nouvelle valeur dans mon fichier d'origine afin que l’exécution du script le mois prochain utilise la colonne suivante
$colonne > C:\Scripts\colonne.txt

# Nous reste plus qu'à sauvegarder nos modifications puis à quitter.
$wb.Save()
$wb.close()
$xl.Quit()

# On termine en indiquant par mail que le fichier excel a bien été complété

Send-MailMessage -From "wsus@societe.fr" -To "equipe.microsoft@societe.fr","m.jouan@societe.fr" -Subject "Indicateur WSUS - Fichier Excel complété - $startTime" -SmtpServer "mail.masociete.fr" -Encoding $encoding -bodyashtml

Avec cette méthode, les indicateurs WSUS mensuel sont automatiquement complétés dans le fichier Excel.

Voyons maintenant comment approuver ces kb récupérées juste avant part la synchronisation du Tuesday Patch! Celle du 2ème mardi du mois.

# on récupère les info du serveur, le script s'exécutant localement, pas besoin de préciser le nom, le port, si ssl.
$wsus = Get-WsusServer
# on récupère la date du jour
$startTime = (get-date -f MM-dd-yyyy)
# A laquelle on va retirer environ 25 jours, l'idée étant de ratisser large, c'est à dire récupérer l'ensemble des patch des différentes synchro entre ce Tuesday Patch et celui du mois précédent.
$startTime2 = (get-date).AddDays(-25).ToString("MM-dd-yyyy")

# dans la variable $update on récupère toutes les mises à jour de sécurité de tous les produits datant au maximum de plus de 25j, nous excluons également certaines KB via l'option "$_.Title -notlike"
$update = $wsus.GetUpdates() | where {((($_.UpdateClassificationTitle -like "Mises à jour de définitions") -and ($_.ProductTitles -like "windows defender")) -or (($_.UpdateClassificationTitle -like "Mise à jour de la sécurité") -and ($_.ProductTitles -like "*"))) -and ($_.CreationDate -gt $startTime2) -and ($_.IsDeclined -ne "True") -and (($_.Title -notlike "*4056892*") -and ($_.Title -notlike "*4056891*"))}

# Petit rappel des différents types de mises à jour possibles
# Applications
# Ensemble de mises à jour
# Feature Pack
# Jeux de pilotes
# Mise à jour critique
# Mise à jour de la sécurité
# Mise à jour
# Mises à jour de définitions
# Outil
# Pilote
# Service Pack
# Upgrades
# On récupère l'identifiant des groupes que l'on souhaite traiter "Serveurs PREPROD" et "Serveurs Recette"
$group = $wsus.GetComputerTargetGroups() | where {($_.Name -like '*Serveurs PREPROD*' -or $_.Name -like '*Serveurs Recette*')}

# On approuve maintenant pour cette liste de groupe l'installation de toutes les KB récupérées précédemment via $update
foreach ($Member in $group) {
foreach ($Approval in $update) {
  $Approval[0].Approve(“Install”,$Member)}
   }

# Déclaration de deux chemins au format .csv qui viendront accueillir la liste des serveurs membres des groupes pour l'un et la liste des KB pour l'autre.
$file1 = "\\Fileshare\WSUS-Preprod-Recette-$startTime.csv"
$file2 = "\\FileShare\WSUSKB-Preprod-Recette-$startTime.csv"

# On pousse dans $file1 les serveurs impactés, on oublie pas IncludeDownstreamComputerTargets = $true, ca ne pourra jamais vous desservir
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null
$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;
$computerScope.IncludeDownstreamComputerTargets = $true
# On sélectionne le FullDomainName la date de dernière synchro WSUS LastReportedStatusTime et l'appartenance à son groupe RequestedTargetGroupName
$wsus.GetComputerTargets($computerScope) | Where-Object {($_.RequestedTargetGroupName -like "*Serveur PREPROD*" -or $_.RequestedTargetGroupName -like '*Serveurs Recette*')} | select FullDomainName,LastReportedStatusTime,RequestedTargetGroupName | Sort-Object -Property RequestedTargetGroupName | Export-Csv -Path $file1 -Delimiter ";" -append


# On export ensuite la liste des KB approuvées dans $file2
$update | select Title,UpdateClassificationTitle,ProductTitles,LegacyName,CreationDate,ArrivalDate | Out-File $file2 -append -Width 300

# On peut maintenant préparer le mail à envoyer, on déclare un fichier HTM comme vu précédemment, celui est en revanche simplement statique.
$file3 = "C:\Scripts\HTM\ApprobationQual\WSUS.htm"

# On déclare ce fichier HTM en tant que Body du mail
$body = Get-Content -Path $file3 | Out-String

# On modifie l'encoding afin de gérer correctement les accents
$encoding=[System.Text.Encoding]::UTF8

# Puis envoi du mail avec les deux pièces jointes
Send-MailMessage -From "wsus@ma-societe.fr" -To "equipe.microsoft@ma-societe.fr" -Subject "WSUS - Mise à jour Microsoft sur environnement PRE PROD ET Recette - fait le $startTime" -SmtpServer "mail.ma-societe.fr" -Encoding $encoding -Body $body -bodyashtml -Attachments "$file1","$file2"

Le résultat de tout ceci ressemblant à cela:

A travers ces quelques explications et lignes de scripts, je vous invite fortement à utiliser powershell pour préparer\gérer vos serveurs WSUS.
Alors oui, cela nous a pris du temps pour peaufiner tout ca mais le résultat est plus que convainquant aujourd’hui.

Je réaliserai un nouvel article sur WSUS mais cette fois autour du reporting, cela vous permettra de savoir quels serveurs:
– est en attente de redémarrage
– est en erreur suite à l’installation de mise à jours
– n’a pas contacté son serveur WSUS depuis plusieurs jours

Mise à jour -> Wsus – Reporting des clients

A+

Maxime

Automatisation de l’ Ajout\Suppression des comptes locaux – Script Powershell

Bonjour,

pour des besoins métier, nous avons du élaborer un script powershell nous permettant le maintien à jour des comptes locaux de plusieurs serveurs.
ce script est poussé toutes les 30min par un agent puppet installé sur nos centaines de serveur.

Ses fonctions:

– Création d’un groupe qui sera membre du groupe administrateur
– Ajout de compte et ajout au groupe précédemment créée.
– Suppression automatique de compte en cas de départ de la société
– Suppression automatique de compte si l’ajout n’a pas été fait via le fichier CSV
– N’empêche pas l’utilisateur déjà présent de changer de mot de passe.

Le script utilise un fichier csv pour récupérer la liste à jour des utilisateurs.

# Déclaration groupe admin local
$group = "Administrateurs"
$group2 = "Administrators"
$group3 = "Admins-Astreinte"

# Création du groupe Admins-Astreinte
net localgroup $group3 /add /comment:"Groupe Administrateurs Astreinte - ne pas ajouter manuellement d'utilisateur risque fort de suppression automatique via Puppet"

# Ajout du groupe Admins-Astreinte au groupe administrateur\administrator peut importe la langue installée.

net localgroup $group /add $group3
net localgroup $group2 /add $group3

# déclaration date
$date = (get-date).ToString("dd-MM-yyyy")

# récupération du nom du serveur
$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"

# récupération du contenu de la liste à jour des utilisateurs
$userfile = get-content "C:\Liste-a-jours.csv"

# récupération liste utilisateur actuellement présent dans le groupe
$Astreintemembers = NET LOCALGROUP $group3

# pour tous les membres actuels du groupe Admins-Astreinte
foreach ($user in $Astreintemembers){
if (!$user){}
else{
# S'il est également présent dans le fichier CSV alors on ne fait rien, sinon il est supprimé
if ($userfile | select-string -pattern $user){
}
else {
NET USER $User /delete
# J'incrémente également un fichier afin de pouvoir historiser les suppressions si besoin de comprendre ce qui s'est passé.
$del = (-join ($user," - ",$date))
$del >> c:\Suppression-groupe-Astreinte.txt
}}}

# On s'occupe ensuite des nouveaux arrivants
foreach ($user in $userfile){
# On vérifie si l'utilisateur existe localement
$existing = $adsi.Children | where {$_.SchemaClassName -eq 'user' -and $_.Name -eq $user}
# Si inexistant alors création du mot de passe et création du compte
if ($existing -eq $null) {
$year="2018"
$Pass = (-join ("*!",$env:COMPUTERNAME,$user,$year,"*!"))
$SecurePassword = $Pass | ConvertTo-SecureString -AsPlainText -Force

    Write-Host "Creation d'un nouvel utilisateur."
    & NET USER $user $SecurePassword /add /y /FULLNAME:$user /comment:"Utilisateur Astreinte"
     WMIC USERACCOUNT where "name='$user'" SET PasswordExpires=False

    Write-Host "Ajout du compte $user au groupe $group3."
    & NET LOCALGROUP $group3 $user /add
   
        }
else {}
}

En espérant que ce petit script ou en tout cas une partie de celui ci puisse vous aider\aiguiller lors d’un besoin similaire!

Maxime

RDS 2008R2\2012R2 – PowerShell Script de Maintenance.

Bonjour,

rapidement je vous mets à disposition un petit script Powershell qui nous a permis d’automatiser les reboots des serveurs RDS2008R2 d’un client en pleine journée de production.
En effet celui ci rencontre des problèmes d’ouverture de session parfois dans la journée, plus personne ne peut se connecter sur l’un des serveurs de la ferme, avec des chargements de bureau Windows interminable. De plus si le broker décide que c’est ce serveur qui a le moins de session alors il continuera d’envoyer toutes nouvelles ouverture de session dessus.

Nous avons constaté que lorsque ce phénomène ce produit, plusieurs Event ID, le 6004 6005 et 6006 remplissaient le journal d’application.

Pour pallier à cela, une tâche planifiée se déclenche lorsque l’un des Event ID apparait et exécute un script PowerShell qui est le suivant:

La commande exécutée est la suivante:

powershell.exe -ImportSystemModules C:\Scripts\mon-script.ps1

Ci joint le contenu du script:

# On autorise le système d'exploitation à exécuter ce script
set-executionpolicy -executionpolicy unrestricted -force

# configuration de la variable starttime pour correspondre à l'instant T moins 5min
$ts = New-TimeSpan -Minutes 5
$startTime = (get-date) - $ts

# On récupère le nom du serveur
$name = $env:computername

# configuration de la variable Endtime à l'instant T
$endTime = (get-date)

# récupération des erreurs concernant les problèmes d'ouverture de session sur les 5 dernières minutes
$TSE = Get-EventLog -LogName "Application" -source Wlclntfy -After $startTime -before $endTime | where {$_.eventID -eq 6004 -or $_.eventID -eq 6005 -or $_.eventID -eq 6006}

# Je récupère ici la valeur présente dans le fichier. Elle est sensé être à 1 en cas de problème voir plus bas, cela me permet de ne pas continuer le script si un redémarrage est déjà enclenché.
$file3 = get-content C:\Scripts-CIS\plantage-en-cours.txt

if ($file3 -ieq '1'){}
	else {
                # on va ensuite compter le nombre d'erreur dans ce créneau de 5min via $TSE.count
		if ($TSE.count -gt '10'){
                # si plus grand que 10, alors on met en maintenance le serveur
                # on prévient toutes les sessions ouvertes via la fonction msg
		msg * "Vous êtes actuellement connecté sur $name qui va redémarrer pour maintenance d'ici 20min, merci de bien vouloir fermer votre session. L'équipe informatique."
		cd RDS:
		cd .\RDSConfiguration
		cd .\ConnectionBrokerSettings
                # une fois dans l’arborescence de la configuration RDS, on retire le serveur de la fonction LoadBalancing
		Set-Item .\LoadBalancingState 0
                # et on programme le redémarrage de celui ci
		shutdown /r /t 1200 /c "Ce serveur va redémarrer d'ici 20min pour des raisons de maintenance"
                # De cette façon, le problème d'ouverture de session est détecté tôt, le serveur redémarré au bout de 20min laissant le temps aux utilisateurs de fermer leur session.
                # J'en profite pour incrémenter un fichier afin de vérifier après plusieurs jour\semaines combien de fois il s'est auto redémarré.
		$file = get-content C:\Scripts-CIS\count-plantage.txt
		$file2 = [int]$file + 1
		$file2 > C:\Scripts-CIS\count-plantage.txt
                # Je pousse ensuite la valeur 1 au fichier "plantage-en-cours.txt"
                # Ce qui évitera au script de refaire la procédure si un autre Event ID arrivait entre temps.
		echo 1 > C:\Scripts-CIS\plantage-en-cours.txt
		exit
		}
			else {
                # Si $TSE.count plus petit que 10 je ne sors pas encore le serveur de la ferme RDS
                # J'en profite même pour forcer le Loab Balancing à 1. Cette partie est néanmoins facultative.
			cd RDS:
			cd .\RDSConfiguration
			cd .\ConnectionBrokerSettings
			Set-Item .\LoadBalancingState 1
			exit
}}

Il existe un dernier script powershell a ne surtout pas oublier, qui s’exécute au démarrage du serveur et qui a toute mon attention le voici:

# On remet le compteur plantage-en-cours.txt à zero
echo 0 > C:\Scripts-CIS\plantage-en-cours.txt
# On replace le serveur dans le LoadBalancing de la ferme RDS
cd RDS:
cd .\RDSConfiguration
cd .\ConnectionBrokerSettings
Set-Item .\LoadBalancingState 1
exit

Alors certes, on peut voir cela comme un arrêt de production, mais s’agissant d’une ferme RDS, une réouverture de session par l’utilisateur et celui-ci se reconnecte sur un autre RDS de la ferme.
Ce que j’apprécie est que le client n’a plus à nous appeler en urgence parce que ses utilisateurs n’arrivent plus à se connecter; et mine de rien, la plateforme RDS vie toute seule.

En espérant que vous puissiez vous aider de cela pour une problématique similaire, que sais-je !

ps: je vous rassure, nous nous sommes également penchés sur la réelle cause du problème de chargement de session et il semblerait qu’il existe une ou deux KB (KB2575077 et KB2265716) capables de résoudre ces problèmes, à tester …

Maxime

Passez de VMWare à HyperV ? Est ce un projet finger in the nose ? Part 2

Bonjour à tous,

Voila déjà plusieurs mois depuis mon 1er article sur la migration

Vmware -> Hyper V que vous pouvez retrouver ici. Nous allons essayer de répondre intelligemment à ces quelques questions.

J’ai maintenant un peu plus de corde à mon arc pour vous en parler puisque cette migration (environ 250 machines virtuelles réparties sur plusieurs fermes ESX) est sur le point de se terminer en douceur d’ici fin d’année 2015.

 

  1. Y a t-il un intérêt à changer d’hyperviseur ?
  2. En pratique, est ce faisable ?
  3. A quel prix ? changement de matériel, formation, licence …
  4. Quels problèmes va t’on rencontrer ?
  5. Peut on se passer de SCVMM 2012R2 ?
  6. La gestion de la haute dispo est elle équivalente voir meilleur que sous ESX ?
  7. IDEM pour la live migration – vmotion

 

Y a t-il un intérêt à changer d’hyperviseur ?

Oui ! en tout cas dans notre cas, effectivement nous sommes une équipe de Windowsien et mettre les mains dans le cambouis dans un environnement FULL Microsoft apporte plus de compréhension, de facilité, d’autonomie et de visibilité à l’hyperviseur et l’ensemble des outils qui oscille autour de lui, pour ne pas les citer: la suite System Center 2012R2 avec Virtual Machine Manager, Data Protection Manager, Opération Manager, Orchestrator. La réponse aurait été la même si nous étions Linuxiens avec le souhait de remplacer Hyper-v par la solution VMWare.

Pour le coté financier, je ne peux hélas pas m’étaler, je n’ai pas eu à gérer cette partie, de plus chaque société dispose de ces propres partenariats que ce soit avec Microsoft, Vmware, CISCO et j’en passe, et en fonction, elle pourra avoir des tarifs plus ou moins compétitifs.

En pratique, est ce faisable ?

Oui ! mais non sans difficultés et son lot de surprise\blocage technique, ca prend également du temps, beaucoup de temps en fonction du nombre de VM à déplacer et du nombre de personne en charge de la migration. L’aspect « production » n’est pas à négliger, il est effectivement plus facile de migrer 30 machines virtuelles de qualité de dev de recette que de déplacer 5 vm de production que vous aurez à migrer en HNO avec le stresse d’espérer que tout se passe bien et avec un impact utilisateur proche du zéro absolu.

Sans trop exagérer j’ai le sentiment que chaque vm à ses particularités, son histoire, ses défauts …. voir un peu plus bas dans « Quelle problème va t’on rencontrer? ».

C’est génial de débuter la migration mais il faut également penser à sauvegarder les VM qui arrivent, au fil des migrations, sur l’environnement Hyper V, à les monitorer à nouveau etc .. il faut également prendre son temps et vérifier que le nouveau matériel absorbe bien la charge. Pensez à surveiller les IOPS et les temps de latence de votre SAN.

A quel prix ? changement de matériel, formation, licence …

Dans nos cas, le prix qu’impose l’achat de nouveaux serveurs DELL R630 avec double CPU E5-2667 v3 3.2Ghz, la RAM qui va bien (256Go sur chacun de nos 6 noeuds Hyper V), les switch CISCO dédiés au réseau ISCSI, les nouveaux SAN (NETAPP), il est difficile de prévoir au plus juste mais avec marge le dimensionnement d’une plateforme Hyper V. Faire en sorte que si un serveur crash, les autres tiendrons la charge supplémentaire le temps de le remonter. Une toute petite précision nous sommes effectivement partis sur une connectique de stockage à moindre coût, celle de l’ISCSI mais je ne vais pas plus m’étaler sur les choix d’infrastructure ici.

pour les licences nous utiliserons naturellement des licences Windows 2012R2 DC pour un nombre de VM illimité.

pour la formation, si il n’y a pas de compétence en interne, c’est plus prudent de se faire accompagner ne serait ce que quelques jours par une société externe, aussi bien pour la configuration du cluster Hyper V que pour la partie SAN et l’interconnexion des deux.

Heureusement ce n’était pas mon cas j’ai pu mener à bien ce projet et partager avec mes collègues mes idées, mes craintes, mes solutions de contournement.

Quels problèmes sommes nous susceptible de rencontrer ?

Alors il était difficile de deviner ce qui allait nous tomber dessus même avec un audit poussé. Mais avec le recul c’est tout de suite plus facile de vous en parler, surtout quand c’est encore tout chaud.

Dans un premier temps il y a la question de comment migre t on les données présentes sur un vmdk (vmware) en vhd(x) (hyper V)

Les serveurs ne sont pas les mêmes, les SAN ne communiquent pas entre eux, les technology de virtualisation sont différentes, idem pour les réseaux virtuels.

Il y a heureusement plusieurs options (non exhaustives j’imagine) mais avec ca vous devriez pouvoir vous en sortir.

La première vous passez par System Center Virtual Machine Manager 2012R2, mais là encore ca ne se fera pas à chaud ce qui implique un arrêt de production et c’est long …. très long …. très très très long…. pour avoir un ordre d’idée une douzaine d’heure pour une VM de 50Go. Il faudra également au préalable dégager le vswitch de la vm coté Vmware sans quoi SCVMM ne voudra pas la déplacer même éteinte.

Une fois terminée, la vm ayant été créée dans Hyper V vous n’aurez plus qu’à configurer la partie switch de la vm et reconfigurer l’@IP. Normalement SCVMM récupère l’ensemble des information de configuration, exemple RAM CPU. L’avantage est qu’il y a très peu de manipulation humaine. L’inconvénient étant la lenteur de l’opération.

La deuxième vous récupérez le(s) vmdk depuis le datastore puis vous le(s) convertissez en vhd(x) avec StarWind V2V Image Converter par exemple. La récupération du VMDK est également très lente. De l’ordre de 6-8Mbits/s. J’espère pour vous que si vous utilisez cette méthode vous aurez des meilleurs débits.

Là encore vous devez faire cela OFFLINE mais ca va ceci dit plus vite qu’avec SCVMM, vous aurez cependant besoin de reconfigurer entièrement la VM (vcpu, ram, remapper les vhd, etc ..). Si vous voulez éviter d’avoir à reconfigurer la VM, vous pouvez détacher tous les vmdk de la vm ESX et la migrer « vide » via SCVMM (premiere méthode).

Vous pouvez si la vm et l’application qu’il y a dessus le permettent cloner la vm ESX et ainsi récupérer le vmdk sans toucher à la vm encore en production. C’est possible si le delta entre le clonage -> la copie du clone ->  la conversion puis la création de la vm coté hyper-v peuvent être perdue, exemple un site web (blog ?) sur lequel tout le monde s’accorde à ne plus faire de modification le temps de la maintenance

Si toutes ces opérations vous prenne du temps, attention au redémarrage de la VM, il se peut qu’elle ne soit plus synchroniser avec votre AD. Il faudra alors réinitialiser le compte Ordinateur du serveur dans Active Directory, sortir la VM du domaine et rejoindre celui ci.

Troisième solution et c’est ma préférée, Disk2vhd, un petit utilitaire « efficace » de microsoft qui permet à la suite d’un snapshot de copier la vm vmware à chaud en .vhd sur un lecteur réseaux. Il ne vous reste plus qu’à créer la vm coté hyperV en pointant sur le vhd et ca boot. Quand vous êtes prêt, vous déconnectez le réseaux coté vmware de la vm encore allumée et vous activez le vswitch coté hyper-v. Il faudra en amont reparamétrer l’@IP sur la VM hyper V. Ce type de conversion, même rapide peuvent poser un problème si le delta entre l’opération disk2vhd et la mise à dispo de la vm sous hyper v prend trop de temps au risque de perdre des données, exemple une vm hébergeant une base de donnée.

Si on veut éviter une corruption de base de donnée, il est plus sage d’arrêter certains services avant le snapshot. (exemple SQLSERVER)

C’est également le seul outil à ma connaissance capable de récupérer le contenu d’un RDM. Petit bémol cet outil fonctionne qu’avec une VM source Windows. Pour les linux faudra passer par la solution 1 ou 2 ou 4.

En toute franchise j’ai déplacé 98% des VM Windows avec Disk2VHD.

Quatrième solution que je viens de découvrir post migration ………………….

Microsoft Virtual Machine Converter.  Je vais le tester ces prochains jours et vous faire un retour.

mais il semblerait que cet outil permet la migration à chaud des vm windows et linux selon la version installée. il est également capable de déinstaller les vmware tool et ce de façon entièrement automatisée.

Il permettrait aussi le P2V. Module disparue de VMM2012R2

ci dessous le snapshot réalisé par MVMC

image002

le suite de la migration, à mon grand étonnement, la VM source n’était pas accessible pendant la période de conversion, l’OS source était pourtant un Win 2008R2Sp1

 

image001 (1)

Fin de la migration

image001

ce n’est pas terminé, il faut ensuite configurer le réseaux virtuel de la VM et installer les services d’intégrations. Pour le délais je n’ai pas été bluffé. Encore une fois Disk2VHD est en tête mais la migration n’étant pas une course, ces différentes possibilités de migration peuvent vous attirer.

 

Peu importe de quelle maniere vous allez vous y prendre profitez en pour nettoyer la vm, les TEMP, les LOGS, les user Profils, les SoftwareDistribution directory, etc … ca sera toujours ca de moins à copier, on peut facilement récupérer une dizaine de Go. Ceci étant attention à ne pas abuser du nettoyage, garder en tête que si la migration se passe mal vous serez rassuré de pouvoir redémarrer la vm vmware le cas échéant en l’ayant laissée quasi intacte.

Ci dessous, une liste des problèmes rencontrés:

bon à savoir\retenir également -> https://technet.microsoft.com/en-us/library/dn792027.aspx

  • L’application ne démarre pas correctement, effectivement dans certain cas, les licences sont basées sur les @mac des serveurs! il vous suffira de reporter l’@mac de la vm ESX à celle d’HyperV.
  • Version windows non supportée (cf lien du dessus) -> impossible d’installer les services d’intégration, pas de réseau, pas de souris -> Service Pack à installer soit sur la VM déplacée via un ISO soit sur la source mais opération de migration à refaire et impact prod.
  • Version linux non supportée -> pour que la vm dispose d’une connection on va devoir passer un « legacy network », pas le choix -> baisse des performances réseaux. Je ne suis pas capable de juger de la baisse de perf, si elle existe vraiment et encore moins sa valeur en %. j’ai meme vue des VM linux refusant de booter tant que je n’avais pas retiré la carte réseau ou mis une carte virtuelle de type « Legacy network »
  • Perte du mdp admin local windows -> impossible d’installer les services d’intégration, refaire la migration en modifiant le mdp sur la VM source. C’est tout bête mais ca m’est arrivé … en effet vous avez beau vous etre logé en domain admin sur la vm avant la migration, je me suis vue refuser l’installation des services d’intégration et donc pas de détection de carte réseaux
  • internal error lors de l’installation des services d’intégration sur un win2008Sp2 par exemple. solution qui a fonctionné pour moi -> https://srvcore.wordpress.com/2010/05/28/integration-components-setup-error-an-error-has-occurred-internal-error/
  • Dans le même genre perte du mdp root linux -> impossible de paramétrer l’@IP de la nouvelle interface détectée.
  • Plus brutal, le fatal kernel error au boot d’une VM linux. Vous partez pour des heures de recherches sur google.
  • Os linux trop vieux -> le linux commence a charger puis s’arrête il ne trouve pas ses disk de démarrage car il est passé de sda à hda, rescue linux à faire, gparted dans certain cas, etc …. au secours !
  • Avec Vmm j’en ai également vu de toutes les couleurs j’ai du migrer 5 vm avec SCVMM puis les 100 autres avec la solution 2 ou 3 car il y a trop souvent quelque chose qui lui pose problème. C’est d’ailleurs hallucinant que Microsoft (outre MVMC et Disk2VHD) n’est pas facilité ce genre de migration. Et quel intérêt d’enlever le module P2V de SCVMM2012R2 ? ca fait tout de même râler.
  • la question des RDM (disks pass through coté Microsoft). Nous avons opter pour ne plus nous en servir et déplacer les data sur un vhd. Ce type de connectique n’a quasi plus aucun intérêt de nos jours. (hormis décharger le CPU car on ne passe pas par le system NTFS du parent). Encore une fois pour une VM windows ce n’est pas compliqué on se fait un robocopy /syncall /sec, coté linux, rsync vous aidera mais c’est tout de même moins évident avec les points de montage le fstab et j’en passe.
  • Quid des vmware tools ? Pour être franc je ne les ai pas retiré des machines virtuelles puisque je voulais modifier le moins possible les VM sources. Il faut maintenant prendre le temps de les retirer proprement …  si c’est faisable. Ca n’a pas l’air simple.

Peut on se passer de SCVMM 2012R2 ?

NON et OUI, non car vous devez obligatoirement passer par là pour la création de vos « logical switch » que vous viendrez ensuite distribuer à vos hotes Hyper V.

Vous passerez également par là pour la création de vos TEAMING dédiés au flux de vos machines virtuelles.

Vous devrez passer par là pour la migration de VM inter Cluster Hyper V et pour l’utilisation de template.

Vous devrez passer par là pour supprimer proprement une machine virtuelle. sans quoi il restera les dossiers vide de la VM voir pire le VHD.

si vous avez un abonnement avec des VM dans AZURE vous devrez également utiliser VMM pour les voir et les administrer.

en dehors de ca (je vais pas tout lister !) vous pouvez vous en passer.

Effectivement l’utilisation de l’hyper v manager et/ou la console de cluster management jouent également assez bien leur rôle. On peut pour ainsi dire tout faire à partir de là. Si je ne m’abuse certaines fonctionnalités telles que le status des repli sont beaucoup plus lisible via hyperV manager .

lorsqu’on travaille sous VMM on se rend vite compte qu’on est obligé de régulièrement mettre à jour le cluster les hosts et les vm sans quoi on a pas le vrai status à l’instant T, c’est très vite fatigant.

pour finir sur cette question, VMM reste l’outil qui permet d’avoir une vision globale de son infrastructure de virtualisation (ESX Vcenter et Hyper v + Azure dans la même console)

La gestion de la haute dispo est elle équivalente voir meilleur que sous ESX ?

je n’ai pas assez d’expérience pour juger Vmware à ce sujet.

je vais donc juger Microsoft uniquement. Nous avons eu beau plantage récemment.

sur notre cluster de production à deux nœuds, l’un des nœuds a redémarré violemment. Toutes les VM qui étaient hébergées sur ce dernier se sont mises à redémarrer sur le noeud encore actif jusqu’au moment où certaines VM n’ont pas pu démarrer faute de mémoire libre  🙂

bien dimensionner son infra c’est la clé du succès !

tout ca pour dire qu’on a beau tester\recetter son infra, y a que lorsque ca plante en pleine production qu’on voit si ca tient la route; et ce fut le cas. Alors certes on a eu une perte de la production, mais notre PCA a joué son role. Pour le manque de mémoire nous étions au courant ce qui nous a permis de rapidement éteindre les VM non critique afin de libérer quelques Go. Nous allons régler ce problème par l’ajout de deux nouveaux serveurs à notre cluster de production.

et c »est aussi dans ce genre de cas qu’on peut justifier que le budget alloué à l’infra n’était pas insensé. Quand on met tout ces œufs dans même panier à un moment donné il faut de la redondance partout sinon à quoi bon..

Gestion de la live migration – vmotion ?

je n’ai rien à dire sur la partie VMware, ca répondait vite et ca « faisait le job ». RAS

Idem pour la partie live migration de Microsoft, pas de mauvaise surprise, aucune perte de ping, l’utilisation de la bande passante est optimale. Attention tout de même lorsque vous déplacer plusieurs VM d’un seul coup, si l’une d’elle est arrêtée, vous allez lancer une quick migration de vos VM et non une Live migration … pas tout à fait pareil !

dans les best pratice de microsoft, il est préconisé un réseau dédié pour ce flux. J’ai toujours aimé séparer les flux que ce soit le heartbeat, les flux SAN, les flux d’admin, les flux de live migration, les flux de sauvegarde pourquoi pas ?

ceci dit, et cela m’a été imposé, pour nos serveurs sur les 8 ports ethernet Gigabits nous avons opté pour ceci:

un teaming de 3 ports pour l’admin, le heartbeat et la live migration

un teaming de 3 port en mode trunk pour le virtual switch des VM

2 ports ISCSI, avec chacun leur sous réseaux et MTU 9000.

ci joint un petit schéma ( merci à Swan pour sa maitrise de Visio :p )

HypV-Netapp

me voilà arrivé à la fin de cet article

en espérant qu’il vous a plu et qu’il pourra vous servir si un jour

vous partez en croisade VmWare -> Hyper V

Maxime

 

petite mise à jour de l’article

Les étapes d’une bonne migration

Ci joint la liste des tâches à réaliser lorsqu’on veut migrer une VM ESX vers Hyper V via Disk2VHD. J’espère que ca vous permettra de ne rien oublier

  • Communication aux utilisateurs et chef de projet J-1 Migration
  • Communication aux utilisateurs  et chef de projet jour J de la Migration
  • Créer le répertoire de la VM sur un LUN de votre cluster Hyper V
  • Préparer la VM – Audit du nombre de lecteur, leur lettre leur taille, le nombre de vcpu le nombre de RAM et la ou les IP, Audit applicatif, se renseigner si la licence applicatif est basée sur une @Mac par exemple, auquel cas pensez à la repositionner sur la vm Hyper-V
  • Nettoyer c:\temp + C:\Windows\SoftwareDistribution (arrêt windows update service avant) + C:\Windows\temp + C:\Users obsolète
  • Positionner le répertoire disk2vhd dans c:\temp
  • Vérifier qu’il y a un espace libre convenable sur le lecteur C:\ pour que disk2vhd puisse effectuer son snapshot
  • Arrêter les services applicatifs de la VM avant de lancer le disk2VHD exemple SQL Service
  • Une fois le Disk2VHD terminé, on a le ou les VHD dans le répertoire sur le LUN, on peut créer la VM à partir d’HYPER-V MANAGER en attachant les vhd et en positionnant la RAM, ajouter la carte réseaux sans la connecter, cette étape sera réalisée via VMM uniquement
  • Retourner dans la configuration de la VM et ajuster le nombre de VCPU
  • Vérification : Démarrer la VM et vérifier qu’elle boot et qu’elle retrouve ces lecteurs. il est possible qu’il y est une première demande de reboot
  • Installer les services d’intégration Hyper V, il faut redémarrer encore une fois la VM la plupart du temps.
  • Au redémarrage, positionnez l’@IP récupérer dans l’ancienne VM et l’@mac si besoin de la conserver
  • Via la console Cluster Manager, ajouter la VM au cluster en faisant clic droit sur roles -> Configurer role -> Next -> Virtual machine -> votre VM fraichement créée puis Next Next et Next
  • Une fois la VM Hyper V complètement prête, on va pouvoir couper le réseaux de la VM ESX, exécutez un ping -t vers l’ip de la vm
  • Allez sur VCenter, dans les paramètre de la VM ESX, décoché Connected sur l’interface réseaux pour qu’on commence à perde le ping vers la VM que l’on migre
  • Dès qu’on perd le ping, allez sur la console VMM, positionnez vous sur la conf de la nouvelle VM HYPER-V et connectez votre interface au réseau (je ne rentrerai pas dans le détail des VLAN) puis OK, la machine virtuelle va s’actualiser, si la conf IP et Gateway sont bonnes, le ping devra revenir positif, à partir de là, redémarrer la VM encore une fois
  • Vérifier que l’applicatif répond bien au redémarrage
  • Vérifier sur votre outil de monitoring que les services sont UP
  • Dans la VM Hyper V, désactiver le service Vmware tool, il est préférable de déinstaller les VMware tool avant mais moins pratique en cas de retour arrière d’urgence.
  • Concrètement la migration est terminée, il reste des tâches de fond
  • Communiquer pour cloturer l’opération
  • Eteindre la VM ESX qui n’est plus accessible
  • Si retour OK des utilisateurs le lendemain de l’opération, ajouter la VM Hyper V à votre outil de sauvegarde
  • Si retour OK Global le sur lendemain renommer la VM ESX en « NomdelaVM-MIGRE HV »
  • A J+7 de la migration – faire un remove from inventory de la VM ESX migrée
Cette liste de tâche je m’en suis servis pour migrer plus de 300VM en quelques mois. C’est concluant.

 

Mise en place d’une solution de Reverse Proxy avec le module ARR de IIS

A quoi peut bien servir un reverse proxy (RP) ?

Comme à mon habitude, je vous renvoi vers une définition déjà complète présente sur internet

http://fr.wikipedia.org/wiki/Reverse_proxy

Grosso modo, pour ceux qui ne souhaiterai pas aller lire ;p il s’agit d’un élément physique ou logiciel, qui se positionne en amont des frontaux web et les protège ainsi des attaques extérieures.

Un RP représente également un seul point d’entrée des flux en provenance du web et à destination des serveurs web. Qui dit un seul point d’entrée dit réduction du nombre des @IP publique.

Nous pouvons également l’utiliser pour faire de la répartition de charge

Etc..

Dans mon cas précis, la société utilise sharepoint server 2010 comme outil collaboratif et les utilisateurs y accèdent via cette URL ->  http://sharepoint

L’idée est de rendre cet intranet accessible également depuis l’extérieur. (Attention, je ne parle pas d’extranet …)

 

Pour parvenir à notre objectif nous avons plusieurs possibilités telles que:

choix 1) Mettre en place une redirection de port sur notre FW internet. port dest TCP 80 vers port destination TCP 80 à destination du serveur sharepoint.

choix 2) Faire la même chose mais en HTTPS port TCP 443

choix 3) Encore plus sécurisant, HTTPS + Reverse Proxy

Vous l’aurez compris nous allons nous intéresser au choix n°3 car:

– le choix 1 n’est pas envisageable car les mots de passe d’authentification circuleraient en clair sur interne

– le choix 2 est plus sécurisant mais expose toujours notre serveur web aux attaques provenant d’internet

Comme je vous l’expliquais plus haut, le RP est le meilleur choix car il va permettre de:

– masquer la véritable @IP de notre serveur

– de faire de la réécriture d’URL

– d’être en frontal et ainsi en cas d’attaque, le serveur web sharepoint ne sera pas impacté, l’accès depuis internet pourrait être down si le RP était amené a tomber mais l’accès en interne fonctionnerait encore.

– de faire de la répartition de charge si tant est qu’il y a plusieurs serveurs web derrière.

Les étapes à suivre:

  1. Choix du Reverse Proxy, ici on prend le module ARR de IIS (Application Request Routing)
  2. Création de la vm ou du serveur et on le positionne en DMZ svp !
  3. Choix du nom de domaine externe exemple sharepoint.masociété.com
  4. Configurer sharepoint pour qu’il réponde aussi bien en https:\\sharepoint qu’en https://sharepoint.masociété.com
  5. Si on veut faire les choses proprement on fait une demande de certificat à une entité externe telle que verisign (avec la liste exhaustive des noms sharepoint à prendre en compte) sinon on peut dans un premier temps commencer par faire une demande à l’autorité de certificat racine de son domaine.
  6. Lier ce certificat au serveur sharepoint mais aussi au RP (exportation du certificat puis importation)
  7. Créer la règle de redirection sur le RP
  8. Faire des tests 🙂 si tout va bien vous ne devriez pas avoir d’alerte de certificat puisqu’en frontal IIS ARR vous présentera le certificat publique
  9. Enjoy your public sharepoint site

vous aurez les screen shot quand j’aurai un peu plus de temps à consacrer à cet article! 🙂

A bientot

Passer de VMWare à HyperV ? est ce un projet finger in the nose ? part 1

Hello à tous,

tout d’abord, je tenais à vous rappeler que malgré le fait que vous soyez des millions voir des centaines de milliard à consulter régulièrement mes articles je continue de poster en français 🙂

Tout ou presque est dans la question. Mais cela soulève en fait d’autres questions avoisinantes telles que:

  1. Y a t-il un intérêt à changer d’hyperviseur ?
  2. En pratique, est ce faisable ?
  3. A quel prix ? changement de matériel, formation, licence …
  4. Quels problèmes va t’on rencontrer ?
  5. Est ce financièrement intéressant court , moyen et long terme ? cela rejoins la question 1
  6. Comment migrer les machines virtuelles sans impacter la production ?
  7. Peut on se passer de SCVMM 2012R2 ?
  8. La gestion de la haute dispo est elle équivalente voir meilleur que sous ESX ?
  9. IDEM pour la live migration – vmotion

je reviendrais compléter ce post au fur et à mesure de mes découvertes !

en attendant je vous laisse sur votre faim :p

Salutation les blogueurs.

Maxime

Externalisation de la messagerie In The Cloud … ou pas.

Bonjour à tous,

un petit article, déjà d’une car cela fait un moment que je n’ai pas posté faute de temps.

Les causes: changement de boulot, jeune papa … bref de quoi m’occuper encore pas mal de temps.

Mais aujourd’hui est THE jour ou je vous consacre quelques minutes et quelques lignes de lecture autour du cloud.

Je ne vais pas vous en parler des heures mais vous exposer rapidement une problématique professionnel qui me concerne en ce moment.

« Du haut » de mon nouveau statut de Responsable Informatique, j’ai pour mission « demain » de faire en sorte que tous nos collaborateurs disposent d’une @mail du type m.jouan@masociete.com.

L’état actuel de la messagerie de la société est le suivant:

Faisant partie d’une SSII, seuls les membres du/des sièges disposent d’une @mail corporate. Vous l’avez compris, les collaborateurs envoyés en clientèle ont .. walou. Ce qui représente à la louche 150 internes et 450 externes.

Aujourd’hui nous hébergeons les 150 boites aux lettres en interne à l’aide d’Exchange 2007 sur 3 serveurs + une baie de stockage.

1 serveur transport HUB et 2 serveurs de boite aux lettres montés en cluster CCR (cluster à copie continue). Ces serveurs IBM ont environ 4-5 ans et ne sont plus sous garantie.

La baie est également de type IBM et est reliée en fibre optique aux deux serveurs de boite aux lettres pour l’accès aux banques de données. Elle non plus ne dispose pas de contrat de support.

En frontal de tout ceci est branché un FireWall Fortinet 100c avec support, entre parenthèse c’est lui qui joue le rôle de backbone.

Voilà pour résumer la situation et le besoin, maintenant s’offre à nous plusieurs possibilités pour faire évoluer l’existant et pouvoir absorber la charge qui passerait de 150 utilisateurs à 600 en un mois ou deux selon le temps pris par la migration.

En gros de ce qui l’en ressort (en tout cas de mon point de vue):

– Soit on continue de gérer le service de messagerie en interne sur nos serveurs obsolètes (achat\location de nouveaux serveurs ? on en profite pour migrer sous Exchange 2010 ?)

– Soit on réfléchie à la solution proposée par le Cloud autrement appelée SAAS qui me permettrait d’externaliser la messagerie sous Exchange ou Zimbra par exemple. L’idée est de disposer de compte « complet » (partage de calendrier, synchro iphone) pour les 150 internes et de compte light pour ceux en clientèle (accès webmail 500Mo)

Si vous voyez d’autres solutions auxquelles je n’aurai pas pensé je suis preneur.

M’en vient à vous parler des avantages et inconvénients de ces deux solutions. Ce qui va suivre ne s’applique pas uniquement à mon besoin mais je pense est assez exhaustif à toute société ayant le même projet d’externalisation/refonte de sa messagerie.

Pour une messagerie interne:

Avantages:

– Réactivité du service informatique en cas de simple demande (ajout d’un membre dans une liste de diffusion par exemple)

– Total autonomie sur le choix et l’évolution de l’infrastructure des serveurs de messagerie (nouveaux serveurs, ajout de noeud, ajout de règle FW, choix des baies de stockage..)

– Les mails entres membres internes ne circulent pas sur le net

Inconvénients:

– Si demain 450 externes viennent faire du webmail -> augmentation de la charge internet donc upgrade du/des liens internet.

– Dans le cadre d’un service informatique à taille humaine, il est impossible d’assurer une disponibilité des services égale aux grand datacenter c’est à dire >= 99,9% due aux congés, astreintes pas astreintes, due aussi aux manques d’expertise sur le produit en cas de panne Exchange, ou tout simplement coupure électrique prévue sur le bâtiment ou dans le quartier.

– Héberger un exchange c’est savoir répondre à n’importe quelle problématique, il ne s’agit pas de passer 3 jours sur un problème bloquant toute la société.

– C’est aussi assurer tous les niveaux de supports, ce qui chargera rapidement un administrateur. Peut être pas avec 150 comptes mais 600 … (changement de mot passe, compte verrouiller etc..)

Sans compter tous les appels téléphoniques (« je ne reçois pas mes mails », « c’est quoi la taille max d’une pièce jointe », etc ..)

– L’accès internet, si celui-ci est coupé, la messagerie est paralysée que ce soit pour les internes comme les externes.

– Dernier inconvénient le prix:

  1. Des licences OS serveurs
  2. Des licences Exchange serveur
  3. Des licences d’accès cliente CAL
  4. Prix des serveurs avec support sur 3 voir 5 ans qui généralement double le prix de départ.

Pour une messagerie externalisée:

Avantages:

– Plus de serveurs obsolète au bout de quelques années

– Réduction d’électricité (cela passe bien en ce moment tout est bio et vert)

– Aucune licence exchange serveur ou OS est à acheter (il est possible de transférer sa licence Exchange actuel interne vers un Exchange en cloud)

– La haute dispo du service >99,9% est cette fois assurer par de gros Datacenter redondés les uns aux autres et généralement reliés en fibre noir.

– Les soucis matériels exemple perte d’un disque dur, serveur qui reboot etc ne sont pas à prendre en compte.

– La sauvegarde est effectuée par l’hébergeur. (Attention tout de même à bien se renseigner à ce sujet, certaines formules vous permettrons de restaurer un mail supprimer y a 30j mais pas plus)

– Permet à l’équipe informatique de s’enlever une épine du pied et de travailler sur des projets moins lourds en administration quotidienne.

– Si le lien internet de la société tombe, l’accès webmail peut encore être joint à partir d’un Iphone en 3G par exemple.

Inconvénients:

– Ici aussi, il y aura très probablement besoin d’augmenter la bande passante internet car si demain on externalise la messagerie, après demain ce sera peut être la messagerie instantanée avec Lync.

– On perd en réactivité, on imagine bien qu’un technicien cloud n’est pas dédié à notre société, donc en cas de question/problème technique, il faudra très certainement passer par la création d’un ticket d’incident, avec des délais GTI et GTR.

– Cette fois, tous les mails y compris ceux de l’interne vers interne passeront par internet. Ce qui utilise de la bande passante bêtement j’ai envie de dire.

– Dernier point négatif et pas des moindres, le retour en arrière si on se retrouve dans une situation ou la solution cloud n’est pas satisfaisante. Bien s’assurer que celui-ci est possible et pas trop complexe. Comment récupérer les boites mails, comment repartir sur une nouvelle infra etc etc ..

Voilà pour ce poste, j’espère qu’il vous servira à vous poser les bonnes questions et surtout à ne pas se précipiter.

Pour ma part, je parts dans l’optique qu’une migration vers le cloud n’est pas simple à mettre en place car beaucoup d’acteurs et de compétence entrent en jeu (hébergeur, partenaire, service informatique, direction financière, compétence système, réseaux et sécurité) mais que le jeu (et oui faut quand même s’amuser!) en vaut la chandelle et que les bénéfices apportés par cette solution auront un impact positif sur le service informatique et sur la société en elle même.

J’attends avec impatiente vos commentaires si j’ai omis un détail important ou dit une grosse ânerie , faite le savoir!

Bon cloud à tous!

A la découverte de la solution Citrix XenServer (partie 3)

Dans la première partie on a pu voir la configuration de la vm sous Workstation 8.0

Dans la seconde, l’installation de Xen Server

Dans cette partie nous allons voir comment accéder à notre serveur et ainsi pouvoir l’administrer et commencer la création du cluster.

Installation de Xen Center, cet outil se trouve sur le cd d’installation de xen server

CD-ROM\client_install\XenCenter.msi

Il n’y a pas plus simple comme installation ..

Une fois Xen Center lancé, on peut ajouter nos deux serveurs Xen comme ceci

pour attacher Xen server à Xen Center, on doit connaitre l’@IP de management de Xen server + login et mot de passe root

Une fois attaché, le serveur Xen serveur apparait tel quel

Il faut évidemment faire la même chose avec le second serveur Xen

ce qu’il me reste à faire maintenant:

1) Paramétrer le disque partagé entre les deux Xen server sur mon SAN via Starwind

  • ajout d’un disque à la VM Win2008
  • création d’une cible ISCSI sous Starwind
  • Attachement du disque à la cible ISCSI fraîchement créée

2) Créer un réseau privée en 10.0.0.x/24 pour le SAN et les deux Xen Server

  • Une carte réseaux en 10.0.0.1 à déjà été ajoutée à ma VM Win2008
  • Ajout de carte réseaux sur les deux VM Xen Server
  • Reboot des serveurs Xen pour prise en compte du nouveau matériel
  • Paramétrage IP via Xen Center
  • Ajout du disque partagé sur les deux Xen Server via Xen Center et ISCSI

3) Créer le Pool de serveur Xen, autrement dit, le cluster Xen
4) Créer une machine virtuelle
5) Faire des tests de crash Xen pour s’assurer que la vm bascule bien d’un hôte à l’autre sans perte de connectivité

1) Paramétrer le disque partagé entre les deux Xen server sur mon SAN via Starwind

StarWind ISCSI permet de simuler une baie SAN pour l’attachement des LUN

ce logiciel s’installe sous win2008 et s’administre via une interface graphique

la première chose à faire dans mon cas est d’ajouter un nouveau disque dur virtuel à ma machine virtuelle Win2008

je me servirai de ce nouveau disque pour le stockage des VM du cluster Xen server

Création d’un nouveau disque dur

Seul le type ISCSI est accessible lorsqu’une vm tourne

Dans l’exemple la taille est de 50Go mais en réalité j’ai mis 80Go

Configuration de starwind

Comme on peut le voir sous windows 2008, il y a bien un nouveau disque détecté dans le gestionnaire de disque, vous pouvez faire annuler, il n’y pas de manipulation à faire à ce niveau là.

Sous Starwind, créer une « target » avec « add target », et bien penser à cocher « allow multiple concurrent ISCSI connexion (clustering) »

Donner lui un nom exemple cluster-xenserver-storage

Petit récapitulatif avant de terminer

Attribuons maintenant notre nouveau disque récemment ajouté à cette cible ISCSI (cluster-xenserver-storage)

Ajout disque dur

De type physique (il est émulé en tant que physique mais il est bien virtuel j’espère que vous suivez !)

Sélectionnons le bon parmis les autres disques déjà présent, généralement c’est celui qui à le chiffre le plus haut, ici il s’agit de « device address » -> 2,0,4,0

Cache inactif

Petit récapitulatif avant de terminer

2) Créer un réseau privée en 10.0.0.x/24 pour le SAN et les deux Xen Server et Ajout du LUN

  • Une carte réseaux en 10.0.0.1 à déjà été ajoutée à ma VM Win2008
  • Ajout de carte réseaux sur les deux VM Xen Server
Pour ajouter un périphérique, il faut aller dans Setting
puis cliquer sur ADD
choisir Network adapter..
On sélectionne Host-only pour avoir un réseau privé
On voit donc 2 carte réseaux correspondant à cette machine virtuelle
Retournons sous XenCenter, normalement il y a une fonction RESCAN qui permet de détecter les nouvelles cartes réseaux, chez moi ca ne fonctionne pas je suis obligé de reboot le serveur Xen
Une fois redémarre, si on rescan, la nouvelle carte réseau apparaît déconnectée
c’est à faire sur vos deux serveurs XEN bien sur.
  • Paramétrage IP via Xen Center
La nouvelle carte réseaux se configure dans l’onglet Networking
Ajout d’un réseaux Externe
Mettre un nom à ce réseau
Lui attribuer une carte réseau physique
Dans un second temps, cliquer sur « Configure »
Puis New Interface
Donnez un nom à notre interface exemple ISCSI puis sélectionnez notre nouveau réseaux ici « réseaux ISCSI » et configurer l’@IP
j’ai utilisé un @IP static en 10.0.0.1 pour la baie et 10.0.0.2 et 10.0.0.3 pour mes deux hosts Xen
Voilà le résultat final
  • Ajout du disque partagé sur les deux Xen Server via Xen Center et ISCSI

Dans l’onglet Storage cliquer sur New SR

Sélectionnez Software ISCSI puis Next

Donnez un nom puis suivant

Indiquez l’@IP du la cible ISCSI ici c’est notre baie en 10.0.0.1 puis cliquez sur Discover IQN de sorte à afficher l’ensemble des cibles ISCSI

Une fois que l’on a sélectionné notre cible on clique sur Discover LUN pour afficher notre future disque dur

Puis cliquez sur Finish

petit avertissement de formatage cliquez sur yes

petit message d’erreur que je cherche à corriger :p

Voila qui est fait, en fait il fallait retourner sur le NAS et dans gestion des disques il fallait mettre en ligne le nouveau disque détecté sans quoi Xen Center n’arrivait pas à le formater..logique vous me direz ..

Voila le résultat

Logiquement on pourrait penser qu’il faut faire la même manipulation sur le second Host Xen server hors vous aurez un avertissement du type:

« This LUN is already in use as SR Stockage VM en cluster on server Cluster-xenserver2 »

Pour résoudre ce message il vous reste simplement à créer le cluster XEN, de cette manière, le SR monté sur Cluster-xenserver2 va automatiquement être monté sur Cluster-xenserver1

Création d’un nouveau POOL

Donnez un nom à ce Pool et indiquez qui est le serveur Maître, ici je n’ai pas le choix ce sera xenserver2 le maitre

Un petit screen shot de la configuration finale

Contrairement à l’installation d’un cluster Hyper-V ou VMWare, j’ai l’impression que Xen effectue très peu de vérification avant de créer ce dernier ce qui rend l’installation presque simpliste…

Nous voilà rendu à l’étape suivante:

4) Créer une machine virtuelle
5) Faire des tests de crash Xen pour s’assurer que la vm bascule bien d’un hôte à l’autre sans perte de connectivité

 

Nous verrons tout ca dans un prochain article.

Créez un site Web ou un blog gratuitement sur WordPress.com.

Retour en haut ↑