Bonjour

J'ai trouvé un script de monitoring des PC sur internet que j'ai modifié à ma guise. Tout fonctionne bien.
Cependant, j'aimerais rajouté maintenant une chose supplémentaire dedans l'info qui est envoyée dans l'e-mail : la description correspondante au PC qui est dans l'AD. Voici le script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Ajoute le snapin de gestion AD
$Snapin="Quest.ActiveRoles.ADManagement"
try {
	Get-PSSnapin  $Snapin -ErrorAction Stop | Out-Null
}
catch {
	Write-Host "Ajout du snapin AD de quest.com"
	Add-PSSnapin $Snapin
}

$enc = New-Object System.Text.utf8encoding
$Day = Get-Date -Format dddd

if (($Day -eq "Sunday") -or ($Day -eq "Saturday")) 
{ 
    # Remet à 0 la liste d'ordinateurs avant la boucle
    $OutageHosts = $Null
    # Précise le temps (en minutes) de délai avant l'envoi des notifications e-mail pour les ordianteurs éteints
    $EmailTimeOut = 360
    # Précise le temps d'attente (en secondes) pour le prochain test des ordinateurs
    $SleepTimeOut = 3600
}

else
{
    # Remet à 0 la liste d'ordinateurs avant la boucle
    $OutageHosts = $Null
    # Précise le temps (en minutes) de délai avant l'envoi des notifications e-mail pour les ordianteurs éteints
    $EmailTimeOut = 30
    # Précise le temps d'attente (en secondes) pour le prochain test des ordinateurs
    $SleepTimeOut = 30
}

# Précise le nombre d'ordinateurs qui doivent être éteints avant d'interrompre le script
$MaxOutageCount = 100
# Précise qui doit reçevoir l'e-mail
$notificationto = "DistITScriptsAlert@mydomain.net"
# Précise qui doit envoyer l'e-mail
$notificationfrom = "Monitoring@mycompany.ch"
# Précise le serveur SMTP
$smtpserver = "smtp.mydomain.net"

Write-Host "Démarrage du Monitoring" -BackgroundColor Green -ForegroundColor Black
$Now = Get-date
$Body = "Le monitoring a correctement démarré le $Now"
Send-MailMessage -Body "$body" -to $notificationto -from $notificationfrom `
-Subject "Monitoring démarré" -SmtpServer $smtpserver -Priority High -Encoding $enc

# Début de la boucle ici
Do{
$available = $Null
$notavailable = $Null
Write-Host (Get-Date)
# Lis la liste d'ordinateurs à chaque cycle, pour ajouter ou supprimer des ordinateurs
# À partir de la liste sans modifier la tâche ou le script
# À partir de l'AD grâce à la commande GET-QADComputer
Get-QADComputer -SearchRoot "mydomain.net/companies/mycompany" -ldapFilter ‘(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(|(cn=CF*)(cn=TT*)(cn=SC*)(cn=IPR*))(!(cn=TT-BK*))(!(cn=037))(!(cn=028))(!(cn=025))(!(cn=007)))’ | 
Select-Object -Property Name,Description | ForEach-Object {
	$_.Name.ToUpper()
    $Description = $_.Description
} |
ForEach-Object {
ipconfig /flushdns | Out-Null
if(Test-Connection -ComputerName $_ -Count 1 -ea silentlycontinue)
    {
	 # Si l'ordinateur est en ligne ça l'écrit à l'écran
     write-host "En ligne ---> "$_ -BackgroundColor Green -ForegroundColor Black
     [Array]$available += $_
    }
else
    {
	 # Si l'ordinateur est hors-ligne, ça écrit un avertissement sur l'écran
     write-host "Hors-ligne ------------> "$_ -BackgroundColor Yellow -ForegroundColor Black
     if(!(Test-Connection -ComputerName $_ -Count 1 -ea silentlycontinue))
       {
		# Si l'ordinateur est injoignable après 1 (-Count 1 ci-dessus) ping complet, ça écrit une erreur sur l'écran et envoi un e-mail
        write-host "Ordinateur hors-ligne ------------> "$_ -BackgroundColor Red -ForegroundColor Black
        [Array]$notavailable += $_

        if ($OutageHosts -ne $Null)
            {
                if (!$OutageHosts.ContainsKey($_))
                {
				 # La première fois hors ligne, ajouter à la liste et envoi d'un e-mail
                 Write-Host "$_ n'est pas dans la liste d'ordinateurs hors-ligne, première fois hors-ligne"
                 $OutageHosts.Add($_,(get-date))
                 $Now = Get-date
                 $Body = "$_ ($Description) est hors-ligne le $Now"
                 Send-MailMessage -Body "$body" -to $notificationto -from $notificationfrom `
                  -Subject "$_ hors-ligne" -SmtpServer $smtpserver -Priority High -Encoding $enc
                }
                else
                {
					# Si l'ordinateur est dans la liste ne rien faire pendant 15 minutes puis le retirer de la liste
                    Write-Host "$_ est déjà dans la liste d'ordinateurs hors-ligne"
                    if (((Get-Date) - $OutageHosts.Item($_)).TotalMinutes -gt $EmailTimeOut)
                    {$OutageHosts.Remove($_)}
                }
            }
        else
            {
				# Première fois injoignable création de la liste et envoi de l'e-mail
                Write-Host "Ajout de $_ à la liste d'ordinateurs hors-ligne"
                $OutageHosts = @{$_=(get-date)}
				$Now = Get-date
                $Body = "$_ ($Description) est hors-ligne le $Now" 
                Send-MailMessage -Body "$body" -to $notificationto -from $notificationfrom `
                 -Subject "$_ hors-ligne" -SmtpServer $smtpserver -Priority High -Encoding $enc
            } 
       }
    }
}
# Report to screen the details
Write-Host "Compte ordianteurs en ligne :"$available.count
Write-Host "Compte ordinateurs hors-ligne :"$notavailable.count
Write-Host "Liste d'ordinateurs hors-ligne :"
$OutageHosts
Write-Host ""
Write-Host "Attente $SleepTimeOut secondes"
sleep $SleepTimeOut
if ($OutageHosts.Count -gt $MaxOutageCount)
{
	# Si il y a plus d'un certain nombre d'ordinateurs injoignables après une heure abandonner le script
    $Exit = $True
    $body = $OutageHosts | Out-String
    Send-MailMessage -Body "$body" -to $notificationto -from $notificationfrom `
     -Subject "Plus de $MaxOutageCount ordinateurs hors-ligne, surveillance abandonnée" -SmtpServer $smtpServer
}
}
while ($Exit -ne $True)
J'ai ajouté aux Get-QADComputer le Select-OBject -Property avec Name et Description
Ensuite dans le ForEach-Object du Get-QADComputer j'avais seulement : $_.Name.ToUpper() et ja'i ajouté une deuxième ligne contenant $Description = $_.Description

Et pour finir j'ai ajouté ma variable $Description dans le $Body de mon Send-MailMessage.

Cependant, j'ai des descriptions, mais celles-ci sont erronées et ne correspondent pas au bon PC dans l'AD ...

Merci par avance.