dimanche 23 mars 2014

Windows Server 2012: Remove a corrupt/failed domain controller from Active Directory + FSMO seizing

Scenario

My test lab consists of 3 Domain Controller (DC): DC01, DC02, and DC03.

The scenario is as follows:

DC01 host the 5 Flexible Single Master Operations (FSMO) roles.

The DNS zone is integrated to Active Directory and is therefore stored in the application partition of our Active Directory database.

DC02 and DC03 are two Read and Write Domain Controller (RWDC).

DC01 failed and we can’t recovered it. No backup exists (:-/).

We will have to:

1) Perform the seizing of 5 FSMO roles.
2) Remove the DC from our Active Directory database.

1) Seizing FSMO roles

We connect to DC02 (this DC works properly, and we’ll seize the FSMO roles on it).

Once connected to DC02, launch a command prompt and enter the "ntdsutil" command.



Now, enter the "roles" command. The prompt now display "fsmo maintenance:".  At this point, you can query the system by typing the symbol "?" and enter to see all options available.

Firstly, you got all the seizing operations and secondly, the transfer operations. There is also the command "Connections" which helping us to connect to the DC02.



Let’s go, enter the "Connections" command.



The prompt waiting that whe indicate to which DC to connect. It says "server connections: _". We have to enter "connect to server DC02".



Ntdsutil is now connected to DC02. Enter "q" to quit the connection utility.



At this point, we can begin the seizing of the FSMO roles. Here are the commands to enter:

seize naming master
seize PDC
seize RID master
seize schema master
seize infrastructure master

Let’s begin by seizing the domain naming master role: "seize naming master". A message box dialog open to confirm the command you entered. Click on "Yes".


Here's what you will see at the prompt. Ntdsutil first attempts to transfer the role. It encounters an error (DC01 doesn’t exists anymore) and then began seizing the role. Nice.



You have to repeat this step with the other 4 FSMO roles to finally get all your roles seized.



For the more paranoid of us, you can still check DC02 holds the roles you just seized by entering the following command:

netdom query /domain:labo fsmo

You have to replace labo by your domain name.



Ok, that’s good. We can go further.


2) Remove the DC from our Active Directory database

According to Technet, there is no need to perform a metadata cleanup after the forced removal of a DC.
When you use Remote Server Administration Tools (RSAT) or the Active Directory Users and Computers console (Dsa.msc) that is included with Windows Server 2008 or Windows Server 2008 R2 to delete a domain controller computer account from the Domain Controllers organizational unit (OU), the cleanup of server metadata is performed automatically. Previously, you had to perform a separate metadata cleanup procedure.

We will check this to see if the DNS records are purged.

Before deleting our DC01, we can take the water a bit by checking some DNS records (SRV resources). We can see the records for our DC01.



I do not have a snapshot of all the records, but we have grasped the idea ;-)



DNS A et NS records, are also present.



According to Technet, we can use RSAT, ADUC, ADSS and ntdsutil to delete the failed DC. We chose ADUC. Find your failed DC, then right click > "Delete".



A first warning pop out. We can click on "Yes" button. We came specifically for that ;-)



A second warning pop out. It warn us about the fact we have to use dcpromo to remove a DC. Tick the checkbox "This Domain Controller is permanently offline and can no longer be demoted using the Active Directory Domain Services Installation Wizard (DCPROMO)".



Click on button "Delete".



In addition, it’s a global catalog DC. A new request for confirmation appears, click on "Yes".



Let's check the DNS again. Good news! Everything seems to be purged.





Here we have a NS record not removed, but let’s scavenging do its job.



The same here.



A check in ADSS console reveals the presence of DC01. I chose to remove it by clicking on "Delete" option. A dialog box appears. 



Answer by clicking "Yes".



Now, we have to check the replication (do it on DC03 too).


repadmin /showrepl





dcdiag /test:replications




dcdiag /test:netlogons



To complete audits I created an Organisational Unit (OU), on the DC02 and after replication, the OU is appeared on the DC03.

jeudi 6 mars 2014

VMWare/Powershell - Tirer des rapports de l'utilisation CPU/RAM/Disk/Network d'une machine virtuelle minute par minute et sans agrégation d'unité de temps

Bonjour à tous,

L'objectif de départ est de réaliser des mesures de l'activité de machines virtuelles hébergées sur une infrastructure à base d’hyperviseur ESXi à intervalle de temps d'une minute sur une période de 24h.

Le problème principal est que notre outil habituel de mesure, Veeam One, applique une agrégation des unités de temps pour maîtriser l'espace que sa base de données prend sur le disque ainsi que pour accélérer la génération des rapports et graphiques.

En effet, Veeam, malgré la configuration réalisée au niveau de l'hyperviseur VMWare même, applique ces règles :
  • Raw data (data with 20-second resolution) is stored for 1 hour.
  • After 1 hour, raw data is aggregated to 5-minute resolution data.
  • After 1 week, data with 5-minute resolution is aggregated to 2-hour resolution data. Data with this level of detail is stored in the database for up to 1 year.

Nous avons donc ouvert un ticket chez Veeam afin de déterminer avec eux s'il existait une possibilité de modifier ce comportement et de répondre, ainsi, à notre besoin. Voici le point central de leur réponse :
  • Veeam One Reporter is not able to send out reports with the discression of 1 minute
  • Veeam One Monitor does not send out reports

Bad news :-(

Let's go to script ^^

La première étape, si ce n'est déjà fait, est de télécharger VMware vSphere PowerCLI : 


Chargeons le snapin qui va nous permettre d'utiliser les cmdlets proposés par VMWare dans le cadre de tâches d'automatisation et de gestion de votre infrastructure virtualisée :
Add-PSSnapin VMware.VimAutomation.Core

Connectons-nous à notre VCenter :
Connect-VIServer –Server VotreServeurVcenter

Récupérons, par exemple les valeurs en pourcentage du CPU, minute par minute, de la journée d'hier :
$statCPU = Get-Stat -Entity $vmToQuery -Stat cpu.usage.average -Start $start -Finish $stop | where{$_.Instance -eq ""}

Vous pouvez également utiliser la version simplifiée qui fait la même chose :
$statCPU = Get-Stat -Entity $vmToQuery -CPU -Start $start -Finish $stop | where{$_.Instance -eq ""}

Nous obtenons donc un tableau comprenant toutes les valeurs du CPU en pourcentage minute par minute selon l’intervalle que vous avez défini.
Par exemple, pour la journée d’hier sur une période de 24h, voici ce que j’utilise dans le script comme valeur de début et de fin :
$start = (Get-Date -Hour 0 -Minute 0 -Second 0).AddDays(-1)
$stop = (Get-Date -Hour 23 -Minute 59 -Second 0).AddDays(-1)

L’idée est donc d’exploiter ce tableau pour générer un fichier Excel reprenant les valeurs en pourcentage ainsi que le timestamp de cette valeur. La seconde idée est de générer un graphique traçant les courbes selon ces données.

Pour réaliser des graphes, nous allons nous servir de l’excellente librairie proposée par .Net 3.5 ou supérieur : 
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")

Et on commence par créer le chart et le chartarea :
$chart = new-object System.Windows.Forms.DataVisualization.Charting.Chart
$chartarea = new-object system.windows.forms.datavisualization.charting.chartarea

On donne les dimensions voulues :
$chart.width = 1500
$chart.Height = 600
$chart.Left = 40
$chart.top = 30

Gestion du titre qui sera present sur l’image :  
$titlefont=new-object system.drawing.font("ARIAL",12,[system.drawing.fontstyle]::bold)
$title =New-Object System.Windows.Forms.DataVisualization.Charting.title
$chart.titles.add($title)
$chart.titles[0].text = "CPU/Ram - " + $vmToQuery + " (" + $reportDate + ")"
$chart.titles[0].font = $titlefont
$chart.titles[0].forecolor = "Black"
$chart.Name = $vmToQuery
$chart.BackColor = [System.Drawing.Color]::White

Pour donner de la couleur au chartarea (N’hésitez pas à regarder la liste disponible ici ;-) http://msdn.microsoft.com/fr-fr/library/system.drawing.color_properties(v=vs.90).aspx) :
$chartarea.BackColor = [System.Drawing.Color]::FloralWhite

On ajoute le chartarea au chart : 
$chart.ChartAreas.Add($chartarea)

$legend = New-Object system.Windows.Forms.DataVisualization.Charting.Legend
$chart.Legends.Add($legend)

On positionne la légende de l’axe des X de manière vertical et selon un intervalle de 15 minutes (chaque point est dessiné selon une minute, mais la légende n’indique qu’un intervalle toutes les 1( minutes, pour garantir la lisibilité) : 
$chartarea.AxisX.LabelStyle.Angle = -90
$chartarea.AxisX.Interval = 15 

Les lignes suivantes vont nous permettre de gérer le tracé de la série que nous avons, rappelez-vous, dans notre tableau :
$chart.Series.Add("CPU")
$chart.Series["CPU"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Line
$chart.Series["CPU"].color = "blue"

Et voici la partie du code qui va nous permettre d’exploiter tout ce que nous venons de préparer précédemment. On parcourt notre tableau, pour ajouter son contenu à un objet de type psobject (http://msdn.microsoft.com/en-us/library/system.management.automation.psobject(v=vs.85).aspx)   
Ensuite, on transforme notre timestamp en un string acceptable pour la lisibilité et la lecture et on ajoute nos points les uns après les autres grâce à la ligne $chart.Series["CPU"].Points.AddXY($dtToString, $t.Value :

 foreach($t in $statCPU) {  
    $out = new-object psobject

    $out | Add-Member noteproperty timeStampCPU $t.Timestamp
    $out | Add-Member noteproperty valueCPU $t.Value
   
    $dtToString = $t.Timestamp
    [string]$dtToString = $dtToString -f "hh:mm"

    $chart.Series["CPU"].Points.AddXY($dtToString, $t.Value)

    $result += $out   
} 

$chartarea.AxisY.Title = $unitCPU

$filename = $logFolder + "\" + $vmToQuery + "_" + $reportDate + ".png"
$chart.SaveImage($filename, "PNG")

L’export CSV (le paramètre –append nécessite Powershell v3.0) :
$result | Export-CSV -path $logFile –append –NoTypeInformation  

J’ai consolidé les informations d’utilisation de RAM et CPU sur le même graphique afin d’obtenir finalement ceci : 


J'ai réalisé la même chose pour l'utilisation des disques et du réseau.

$statRAM = Get-Stat -Entity $vmToQuery -Stat mem.usage.average -Start $start -Finish $stop
$statNetwork = Get-Stat -Entity $vmToQuery -Network -Start $start -Finish $stop
$statDisk = Get-Stat -Entity $vmToQuery -Disk -Start $start -Finish $stop  

Et après traitement, les résultats suivants :




Bon amusement :-)

lundi 15 avril 2013

Active directory : récupération des rôles FSMO dans votre forêt par Powershell

Il existe bien évidemment plusieurs manières de récupérer l'information concernant l'emplacement de chacun des rôles FSMO de votre forêt.

J'aime bien éviter la façon manuelle, voici donc une petite fonction qui peut se révéler bien utile dans le cas où l'on vous demande où se situe vos rôles ;-)



function Get-FSMOPlacement {  

    Import-Module activedirectory                      

    $forestDomain = Get-ForestDomain 

    $forest = $forestDomain.forest
    $domain = $forestDomain.domain

    Write-Host "FSMO Roles" -ForegroundColor white -BackgroundColor Blue  

    $fsmoPlacement = New-Object PSObject -Property @{       
          "Schema master" = $forest.SchemaMaster
          "Domain naming master" = $forest.DomainNamingMaster
          "RID master" = $domain.RIDMaster
          "PDC emulator" = $domain.PDCEmulator  
          "Infrastructure master" = $domain.InfrastructureMaster  
    }   
    return $fsmoPlacement           
 }


L'utilisation est toute simple :



Get-FSMOPlacement

jeudi 28 mars 2013

MCSE 2012 Server Infrastructure

C'est officiel depuis ce matin 4:46 du matin et l'envoi du mail de confirmation de Microsoft.

Je suis désormais MCSE 2012 Server Infrastructure.

J'avais posté précédemment. la skills development roadmap qui permet de voir le chemin parcouru et les prérequis nécessaire à l'obtention de ce titre.


Je vais certainement revenir sur la dernière certification (Implementing an Advanced Server Infrastructure 70-414) afin d'exposer la manière dont je me suis préparé pour obtenir cette dernière.


lundi 11 mars 2013

Hyper-V 3 - Qu'est-ce que le "Smart Paging" ?

Hyper-V dans sa nouvelle version propose désormais une nouvelle fonctionnalité : Le Smart Paging.

Préambule : comprendre la mémoire dynamique dans Hyper-V

Pour bien comprendre à quoi le Smart Paging peut bien servir, il faut tout d'abord comprendre le fonctionnement de l'allocation de mémoire dans Hyper-V et plus particulièrement de la mémoire dynamique (ajouté par Microsoft depuis le release du SP1 de Windows Server 2008 R2 et Microsoft Hyper-V Server 2008 R2 SP1).

Pour voir tout ceci, direction les "Settings..." d'une machine virtuelle (VM).



Ok, cliquez sur "Memory". Voici donc l'écran en question.


Vous pouvez déjà vous rendre compte que, parmi les options de la mémoire dynamique, apparaît une nouvelle possibilité : Minimum RAM.

Mais rappelons d'abord brièvement l'utilité de chacune des options disponibles pour la mémoire dynamique.

1) Startup RAM : il s'agit de la quantité de mémoire RAM allouée par Hyper-V à la VM au démarrage. Cette quantité de RAM doit correspondre à la quantité de mémoire dont a besoin la VM pour démarrer.

2) Minimum RAM : il s'agit de la quantité minimum de mémoire RAM au-dessous de laquelle plus aucune mémoire ne pourra être libérée par Hyper-V sur la VM  C'est donc la mémoire minimale dont a besoin votre VM pour tourner. La suppression de RAM se fait par la technologie de "Ballooning" présente au sein de chaque VM.

3) Maximum RAM : c'est la mémoire maximale attribuable par Hyper-V à la VM. L'ajout de mémoire se fait par la technologie "HotAdd".

4) Memory Buffer : Il est basé sur le "Current Commit", autrement dit sur la mémoire allouée à l'instant t à la VM par Hyper-V. La valeur par défaut du Memory Buffer est paramétré à 20%.

Le Memory Buffer se calcule comme suit :


Memory Buffer(MB) = (1 / (1 - Memory buffer(%)) - 1) x Current Commit(MB)


L'objectif de ce Buffer est de permettre l'allocation très rapide de mémoire RAM supplémentaire lorsque la charge s’accroît sur la VM.  Le Memory Buffer est donc une zone sur chaque VM où est pré-allouée de la RAM. Lors d'une montée en charge, le Global Memory Object (GMO) tentera donc en premier lieu (dans un processus pouvant aller jusqu'à 4 étapes si nécessaire) de fournir la RAM nécessaire via ce Memory Buffer.

Ce Memory Buffer est borné à droite par la valeur Maximum RAM.

À retenir :
a) Vous définirez une valeur basse à cette zone tampon lorsque le logiciel fonctionnant à l'intérieur de la VM essaie d'utiliser autant de RAM que disponible. C'est typiquement le cas d'un serveur SQL.
b) Une valeur haute sera utilisée dans le cas où vous avez un process qui peut avoir besoin d'un système de cache fichier important ou bien dans le cas où une application demande fréquemment une importante quantité de RAM supplémentaire et ensuite la relâche.
c) La mémoire cible de chaque VM est donc l'addition du Current Commit Charge (borné par les valeurs Minimum RAM et Maximum RAM) et du Memory Buffer.

5) Memory Weight

Lors de la version beta du SP1 de 2008 R2, ce paramètre s'appelait "Memory Priority". Il a pour objectif de déterminer la façon dont les VMs sont impactées lorsqu'il y a lieu de redistribuer la mémoire. Le paramètre ne garantit en rien la disponibilité de la mémoire. C'est une des raisons qui, à l'époque, a poussé Microsoft à modifier le nom de ce paramètre.

À quoi sert le Smart Paging ?

Nous y voilà. Nous avons passé en revue les différentes options que nous confère Hyper-V, et abordé très brièvement le fonctionnement de l'allocation dynamique de RAM par l'hyperviseur Microsoft.

Dans sa précédente version, vous pouviez rencontrer un problème de taille lors du redémarrage d'une VM ou de l'hyperviseur. En effet, la mémoire étant allouée dynamiquement, elle est soit ajoutée, soit supprimée. On peut donc arriver à une situation où une VM (ou plusieurs) se retrouvent à un seuil d'allocation de mémoire inférieure au paramètre "Startup RAM" tout en respectant le paramètre "Minimum RAM". Dans ce cas, la VM ne pouvait pas redémarrer, où seulement certains services. Peu pratique n'est-ce-pas ?

C'est la qu'intervient la nouvelle fonctionnalité délivrée par Microsoft. En effet, désormais si lors du démarrage d'une VM, Hyper-V n'est pas capable d'allouer suffisamment de RAM (correspondant au paramètre Startup RAM) et qu'il n'est pas non plus possible de récupérer la RAM nécessaire depuis les autres VMs, un fichier "Smart Paging" sera créé à l'endroit spécifié (comme ci-dessous) et utilisé par la VM en lieu et place de mémoire RAM.



Le fichier n'est créé que lorsque c'est nécessaire. La mémoire rendue disponible par ce mécanisme est présente jusqu'à la fin du processus de démarrage de la VM. Hyper-V se charge de désallouer cette RAM par la technologie de "Ballooning" et ce jusqu'à ce que la VM arrête d'utiliser le "Smart Paging". C'est donc bien un mécanisme temporaire (ne devant pas durer plus de 10 minutes) utilisé seulement dans le cas du démarrage et dans aucun autre cas. Dès que la VM arrête d'utiliser ce fichier, il est supprimé.

samedi 9 mars 2013

Microsoft met à disposition de multiples labs pour aider aux certifications 70-410 à 70-412 (MCSA 2012)


Vous avez planifié votre parcours vers le titre de MCSA Windows Server 2012?


Microsoft vous vient en aide avec de nombreux Labs destinés à vous aider à appréhender les différents sujets abordés par les 3 certifications 70-410, 70-411 et 70-412.

C'est vraiment un super travail fourni par Microsoft pour ceux qui n'ont pas l'occasion de configurer un environnement de test @home.





Le lien contenant les différents Labs mis à disposition par Microsoft : http://technet.microsoft.com/en-us/windowsserver/hh968267.aspx

Enjoy !