Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

SCOM 2012 – Dashboards et Widgets

Depuis la sortie du RU 2 pour SCOM 2012 R2 (et du RU6 pour SCOM 2012 SP1), de nouveaux widgets sont disponibles et enrichissent grandement les possibilités de dashboards.

Une bonne occasion de centraliser ce qu’il est possible de faire en la matière et de résumer brièvement les possibilités offertes par ces modules!

Widgets

Les widgets sont les éléments qui composent les dashboards, il en existe de nombreux types.

Widget

Description

Example

Alert Widget

Affiche les alertes propres à un objet, une classe ou un groupe d’objets.

clip_image026

clip_image028

Contextual Alert Widget

Identique au précédent sauf qu’il cible les alertes en fonction d’un objet sélectionné dans un autre widget du dashboard.

clip_image029

Object Health Widget

Vue de l’état de santé des moniteurs qui s’appliquent sur un objet prédéfini et les sous-objets qu’il contient

clip_image031

Contextual Health Widget

Identique au précédent sauf qu’il cible un objet sélectionné dans un autre widget du même dashboard.

clip_image032

Details Widget (Contextual)

Affiche les propriétés d’un objet sélectionné dans un autre widget (de type alerte ou state) du même dashboard

clip_image034

clip_image036

Instance Details Widget

Identique au précédent mais pour un objet présélectionné

clip_image038

Image Widget

Affiche une image.

clip_image040

Object Detail Tiles Widget

Affiche des briques de tuiles (état de santé et alertes, SLA, compteurs de performance…) pour un objet

clip_image042

Object SLA Widget

Affiche le SLA d’un objet sur lequel s’applique une règle de SLA

clip_image044

SLA Widget

Identique au précédent mais peut afficher plusieurs SLA dans le même widget

clip_image046

SLA Tiles Widget

Affiche des SLA sous forme de tuiles.

clip_image048

Objects by Performance

Widget type “Top 10” (permet en réalité de faire des top N de 1 à 20, et des affichages dégressifs)

Utilisé particulièrement pour afficher les N serveurs (ou instances SQL..) les plus chargés en CPU, RAM, disque dur…

clip_image049

Performance Widget

Affiche un ou plusieurs compteurs de performance pour des objets prédéfinis

clip_image051

clip_image053

Powershell Grid Widget

Affiche le résultat d’un script powershell dans une grid.

clip_image055

PowerShell Web Browser Widget

Affiche une page web (possibilité de lui passer des paramètres provenant d’un script powershell, par ex pour faire automatiquement une recherché sur une erreur sélectionnée dans un Alert widget)

clip_image057

Web Browser Widget

Affiche une page web, contenant éventuellement l’id d’une alerte

clip_image059

State Tiles Widget

Affiche l’état d’objets et le nombre d’alertes liées sous forme de tuiles

clip_image061

State Widget

Affiche l’état de santé d’un ou plusieurs objets prédéfinis sous forme de liste

clip_image063

clip_image065

Topology Widget

Affiche une image représentant l’état de santé pour un ou plusieurs objets avec une autre image en fond (carte géographique, schéma de datacenter…)

clip_image067

     

 

Types de dashboards

Pour rappel, un dashboard SCOM est une vue synthétique permettant d’afficher des informations de différentes manières et depuis différentes sources. 

On retrouve 4 types de disposition de dashboards :

  • Affichage de widgets en colonne
  • Affichage de widgets en grille
  • Template de niveau de service (Service Level Dashboard)
  • Template de résumé (Summary Dashboard)

Widgets en colonne

Jusqu’à 5 colonnes cote à cote contenant un widget chacune

Exemple 2 colonnes:

clip_image002

Exemple 4 colonnes:

clip_image004

Widgets en grille

Il est possible de créer des grilles de 1, 2, 3, 4, 5,6 et 9 cellules avec les dispositions suivantes:

clip_image006clip_image008

clip_image010clip_image012

clip_image014

clip_image016clip_image018

Exemple 5 cellules:

clip_image020

Service Level Dashboard:

Ce dashboard est préconfiguré, on ne peut pas modifier sa disposition ni ses widgets  mais seulement leur configuration.

Il affiche un apercu de l’état de SLA pour des objets prédéfinis

clip_image022

Summary Dashboard:

Le dashboard summary (résumé) est préconfiguré pour créer une grille de 3 cellules contenant les widgets ‘Object by Performance’, ‘Performance’ et ‘State’ : 

clip_image024

 

 

Vous disposez maintenant de tous les éléments pour réaliser des dashboards à la fois utiles, pertinents et agréables à l’oeil!

 

Note : les captures d’écran de ce billet proviennent de différentes sources web

Erreur Scecli 1202

Il faut savoir que l’erreur Scecli 1202 est une erreur qui apparait dans le journal d’évènement au niveau des contrôleurs de domaine, plusieurs KB Microsoft donne des solutions qui ne sont pas compréhensible voir ci-dessous, il faut faire un regroupement d’informations :

# Erreur Scecli 1202: appliquer la KB Microsoft: http://support.microsoft.com/kb/324383/fr ou encore http://support.microsoft.com/kb/2000705

Tout d’abord sous cmd Taper RSOP (cela permet de voir les conflits niveau application des GPO qui apparait au niveau des contrôleur de domaine  PO)

Pour faire simple:
Erreur Scecli 1202 code erreur 0x534 se rapporte soit à un compte ajouter qui n’existe pas ou qui a été supprimer,
soit à une mauvaise traduction des SID en Nom GPO

Ensuite j’ai regardé le fichier c:\windows\security\logs\winlogon.log puis info (Error assigning SeSystemtimePrivilege)

J’ai relevé l’id 6AC1786C-016F-11D2-945F-00C04fB984F9 du fichier winlogon.log

sous powershell :

get-gpo -guid 6AC1786C-016F-11D2-945F-00C04fB984F9 (cela correspond à Default Domain Controllers Policy)

donc une erreur au niveau de la gpo qui s’applique sur les DC (donc configuration des ordinateurs)

puis regarder l’erreur niveau RSOP(lecture seule) computer configuration => windows setting => Local policies =>
user Rights assignment=> Acess this computer from network
puis clique droit =>properties et vu que le compte administrator n’existait pas, je l’ai supprimé sous GPMC

et gpupdate/force sous CMD et RSOP et l’erreur est corrigé.

powershell rapport-gpo

SCRIPT POWERSHELL RAPPORT GPO

Dans le cadre de la refonte et de l’audite des GPO chez un client, j’ai créé un script PowerShell dans le but de faire une remonter avec rapport html sur toutes les GPO’s du domaine puis envoie de celui-ci  dans le corps du mail.
Voici les caractéristiques du script :
-    Un script qui fait apparaitre toutes les GPO’s du domaine avec leur liaisons sur les Site, Domain et Ou
-    Les GPO’s modifier de moins de 7 jours doivent apparaitre en rouge
-    Rapport GPO sous forme de tableau et envoyer par mail
-    Copie du rapport GPO dans un répertoire du serveur (suppression automatique des rapports de plus de 30 jours

 

Tout d’abord il mettre un titre au script, il faut savoir que dans un script PowerShell tout ligne commençant par # veut dire que c’est un commentaire, PowerShell n’exécute pas ce qui suit mais cela est intéressant du point de vue afficher un commentaire

#/////////////////////////////////////////////////////////////////////////////
#//
#// Titre: GPO-Report.ps1
#// Auteur: OUASTI Khatir
#// Version: 1.0
#//
#/////////////////////////////////////////////////////////////////////////////

L’importation des modules suivant est important car il permet d’exécuter le script sans blocage (niveau droit d’exécuter le script) Et surtout charge les modules active directory et grouppolicy qui vont permettent l’exécution des commandes liés à l’AD ou au GPO
############import des modules AD et grouppolicy##########

Set-ExecutionPolicy -ExecutionPolicy Bypass
Import-Module activedirectory
Import-Module grouppolicy

 

 

Ci-dessous La construction du tableau HTML a été choisi du fait quel permet d’être intégré au corps du mail à savoir que certaines dates apparaissent en rouge c’est la solution la mieux adapter. (L’autre solution corps du mail avec fichier texte pas de couleur pas adapté).
#######construction du style et du tableau html##############

$style = @’
<style>
H3 {text-align: center;background-color: lightgreen;}
BODY{background-color:lightblue;}
TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
TH{border-width: 1px;padding: 2px;border-style: solid;border-color: black;background-color:thistle}
TD{border-width: 1px;padding: 2px;border-style: solid;border-color: black}
</style>
‘@

###les variables dates ci-dessous sont associés au nom du rapport #####

$datereport = (get-date).AddDays(0).ToString("dd-MM-yyyy")
$thedate = (get-date).AddDays(0).ToString(‘dd/MM/yyyy HH:mm:ss’)
$resultdate = (get-date).AddDays(-7)

La commande ci-dessous permet d’afficher toutes les GPO du domaine, sort-Object permet de classer la colonne modification par ordre de date la plus récente, select-Object affiche les colonnes que l’on a choisi.

####Extraction de l’information concernant toutes les GPO’s #####

$GPO = Get-GPO -all | Sort-Object -descending modificationtime | Select-Object displayname, id, owner, creationtime ,modificationtime

 

La commande ci-dessous permet d’afficher les noms des SITES, DOMAINES ou Unités Organisationnelles auxquelles sont liées des GPO’s, il est clair que pour faire apparaitre les liaisons des GPO’s celle-ci n’est pas contenu dans la commande GET-GPO, il fallut extraire l’information à partir de la commande GET-GPOREPORT.

##########Extraction de l’information en fonction du nom de la GPO lié à une ou plusieurs OU######################

$GPOReport = Get-GPOReport -all -ReportType xml | % {
        ([Xml]$_).gpo | select name,@{n="SOMName";e={$_.LinksTo | % {$_.SOMName}}},@{n="SOMPath";e={$_.LinksTo | %{$_.SOMPath}}}}

 

Les variables $body nous permet la construction des colonnes du tableau HTML et aussi des titres du rapport. 

#############construction des colonnes du tableau html#############

$Body = "<h3>Rapport GPO journalier: $thedate</h3><br><table><tr><th>DISPLAYNAME</th><th>ID</th><th>OWNER</th><th>CREATIONTIME</th><th>MODIFICATIONTIME</th><th>LINK-OU-SITE-DOMAIN</th></tr>"

La construction de la boucle va permettre d’aller chercher chaque valeur date de la colonne modificationtime si la GPO a été modifié il y’a moins de 7 jours la date apparaitra en fond rouge sur écriture blanc.

###########construction de la boucle pour l’application de la couleur rouge pour la colonne modificationtime#######

Foreach($GPOALLDOMAIN in $GPO) {

$displayname = $GPOALLDOMAIN.displayname
$ID = $GPOALLDOMAIN.id
$owner = $GPOALLDOMAIN.owner
$creationtime = $GPOALLDOMAIN.creationtime
$modificationtime = $GPOALLDOMAIN.modificationtime

        $Body +=  "<tr><td>$displayname</td><td>$ID</td><td>$owner</td><td>$creationtime</td>"

######Application changement de couleur Rouge sur chaque cellule de la colonne modificationtime si une valeur date est supérieure à $resultdate################

    If ($GPOALLDOMAIN.modificationtime -gt $resultdate) {

        $Body += "<td bgcolor=`"`#FF0000`"><font color=`"`#FFFFFF`">$modificationtime</font></td>"

La partie du script ci-dessous permet de joindre au tableau HTML, les valeurs obtenu par les commandes GET-GPOReport et GET-GPO.

##Application d’aucune changement sur la colonne modificationtime #####

      } else {

        $Body += "<td>$modificationtime</td>"
      
     
    }

    $Result = $GPOReport | Where-Object {$_.name -eq $displayname}
    $ResultString = $Result.SOMPath -join ";"

#######comparaison entre le nom de la gpo de la commande get-gpo et get-GPOreport et ajoute le résultat $resultstring à la colonne "link" ##########

    if ($ResultString -eq "") {$Body += "<td align=center bgcolor=`"`#CCFF00`">NO-LINK</td>"}
    $Body += "<td>$ResultString</td>"
    $Body +=  "</tr>"
}
#############fin de la boucle du tableau html################

$Body += "</table>"

##############Conversion du tableau en html###################

ConvertTo-HTML -head $style -body $Body | set-content "D:\Scripts\GPO-RAPPORT\LOGS\ReportGPO-$datereport.htm"

 

Bien évidemment, il faut penser à effectuer un nettoyage automatique des rapports qui ont plus d’un mois.

##########suppressions des fichiers de plus de 30 jours #############

dir \\serveur1\d$\Scripts\GPO-RAPPORT\LOGS -recurse | where { ((get-date)-$_.lastwritetime).days -gt 30 } | Remove-Item –Force

 

 

L’envoie du rapport dans le corps du message, je l’ai effectué en version 1.0 pour plus de clarté.

###########information d’identification pour l’envoie du message et Rapport HTML intégrer au corps du message adapter pour PowerShell v1.0########

$fromaddress = "email de l’expéditeur"
$toaddress = "email du 1er destinataire"
$bccaddress = "email du 2 eme destinataire"
$CCaddress = "email du 3 eme destinataire"
$Subject = "Envoie Rapport GPO journalier (Copie dans \\serveur1\Scripts\GPO-RAPPORT\LOGS)"
$body = get-content "D:\Scripts\GPO-RAPPORT\LOGS\ReportGPO-$datereport.htm"
#$Attachment = "D:\Scripts\GPO-RAPPORT\test.txt" (non utilisé pour mon script mais pourrais servir pour joindre un fichier au mail)
$smtpserver = "smtp.domaine.com"

##########information d’authentification pour l’envoie du message##########################

$message = new-object System.Net.Mail.MailMessage
$message.From = $fromaddress
$message.To.Add($toaddress)
$message.CC.Add($CCaddress)
$message.Bcc.Add($bccaddress)
$message.IsBodyHtml = $True
$message.Subject = $Subject

# création du nouvel objet Net.Mail.Attachment($attachment) permettant #d’attacher le fichier en question.
#$attach = new-object Net.Mail.Attachment($attachment)
#$message.Attachments.Add($attach)

$message.body = $body
$CredUser = "user1"
$CredPassword = "Password"
$smtp = new-object Net.Mail.SmtpClient($smtpserver, 25)
$SMTP.EnableSsl = $true
$SMTP.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword);
$smtp.Send($message)

#######################################################
 
 
SCRIPT COMPLET

#/////////////////////////////////////////////////////////////////////////////
#//
#// Titre: GPO-Report.ps1
#// Auteur: OUASTI Khatir
#// Version: 1.0
#//
#/////////////////////////////////////////////////////////////////////////////

 

#####import des modules AD et grouppolicy########################
Set-ExecutionPolicy -ExecutionPolicy Bypass
Import-Module activedirectory
Import-Module grouppolicy
###############construction du style et du tableau html##############

$style = @’
<style>
H3 {text-align: center;background-color: lightgreen;}
BODY{background-color:lightblue;}
TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
TH{border-width: 1px;padding: 2px;border-style: solid;border-color: black;background-color:thistle}
TD{border-width: 1px;padding: 2px;border-style: solid;border-color: black}
</style>
‘@
$datereport = (get-date).AddDays(0).ToString("dd-MM-yyyy")
$thedate = (get-date).AddDays(0).ToString(‘dd/MM/yyyy HH:mm:ss’)
$resultdate = (get-date).AddDays(-7)

###Extraction de l’information concernant tout les GPO du domaine ####

 

$GPO = Get-GPO -all | Sort-Object -descending modificationtime | Select-Object displayname, id, owner, creationtime ,modificationtime

###Extraction de l’information en fonction du nom de la GPO lié à une ou plusieurs OU #####################

$GPOReport = Get-GPOReport -all -ReportType xml | % {
        ($_).gpo | select name,@{n="SOMName";e={$_.LinksTo | % {$_.SOMName}}},@{n="SOMPath";e={$_.LinksTo | %{$_.SOMPath}}}}

#######construction du style et du tableau html################

$Body = "<h3>Rapport GPO journalier: $thedate</h3><br><table><tr><th>DISPLAYNAME</th><th>ID</th><th>OWNER</th><th>CREATIONTIME</th><th>MODIFICATIONTIME</th><th>LINK-OU-SITE-DOMAIN</th></tr>"

########construction de la boucle pour l’application de la couleur rouge pour la colonne modificationtime##############################
Foreach($GPOALLDOMAIN in $GPO) {

$displayname = $GPOALLDOMAIN.displayname
$ID = $GPOALLDOMAIN.id
$owner = $GPOALLDOMAIN.owner
$creationtime = $GPOALLDOMAIN.creationtime
$modificationtime = $GPOALLDOMAIN.modificationtime

        $Body +=  "<tr><td>$displayname</td><td>$ID</td><td>$owner</td><td>$creationtime</td>"

##########Application changement de couleur Rouge sur chaque cellule de la colonne modificationtime si une valeur date est supérieure à $resultdate################

    if ($GPOALLDOMAIN.modificationtime -gt $resultdate) {

        $Body += "<td bgcolor=`"`#FF0000`"><font color=`"`#FFFFFF`">$modificationtime</font></td>"

##########Application d’aucune changement sur la colonne modificationtime #########################################

      }else {

        $Body += "<td>$modificationtime</td>"
      
     
    }

    $Result = $GPOReport | Where-Object {$_.name -eq $displayname}
    $ResultString = $Result.SOMPath -join ";"

##########comparaison entre le nom de la gpo de la commande get-gpo et get-GPOreport et ajoute le résultat $resultstring à la colonne "link" ################
    if ($ResultString -eq "") {$Body += "<td align=center bgcolor=`"`#CCFF00`">NO-LINK</td>"}
    $Body += "<td>$ResultString</td>"
    $Body +=  "</tr>"
}
########fin de la boucle du tableau html##################

$Body += "</table>"

#########Conversion du tableau en html#####################

ConvertTo-HTML -head $style -body $Body | set-content "D:\Scripts\GPO-RAPPORT\LOGS\ReportGPO-$datereport.htm"

##########suppressions des fichiers de plus de 30 jours #############

dir \\serveur1\d$\Scripts\GPO-RAPPORT\LOGS -recurse | where { ((get-date)-$_.lastwritetime).days -gt 30 } | Remove-Item -Force

###########information d’identification pour l’envoie du message et Rapport HTML intégrer au corps des messages adapter pour powershell v1.0########

$fromaddress = "email de l’expéditeur"
$toaddress = "email du 1er destinataire"
$bccaddress = "email du 2 eme destinataire"
$CCaddress = "email du 3 eme destinataire"
$Subject = "Envoie Rapport GPO journalier (Copie dans \\serveur1\Scripts\GPO-RAPPORT\LOGS)"
$body = get-content "D:\Scripts\GPO-RAPPORT\LOGS\ReportGPO-$datereport.htm"
#$Attachment = "D:\Scripts\GPO-RAPPORT\test.txt" (non utilisé pour mon script mais pourrais servir pour joindre un fichier au mail)
$smtpserver = "smtp.domaine.com"

##information d’authentification pour l’envoie du message########

$message = new-object System.Net.Mail.MailMessage
$message.From = $fromaddress
$message.To.Add($toaddress)
$message.CC.Add($CCaddress)
$message.Bcc.Add($bccaddress)
$message.IsBodyHtml = $True
$message.Subject = $Subject

# création du nouvel objet Net.Mail.Attachment($attachment) permettant d’attacher le fichier en question.
#$attach = new-object Net.Mail.Attachment($attachment)
#$message.Attachments.Add($attach)

$message.body = $body
$CredUser = "user1"
$CredPassword = "Password"
$smtp = new-object Net.Mail.SmtpClient($smtpserver, 25)
$SMTP.EnableSsl = $true
$SMTP.Credentials = New-Object System.Net.NetworkCredential($CredUser, $CredPassword);
$smtp.Send($message)

#################################################################################