83 lines
3.1 KiB
PowerShell
83 lines
3.1 KiB
PowerShell
|
#Script créé par Nicolas Lang - Sous licence CC-BY-SA
|
||
|
#https://nicolaslang.fr
|
||
|
|
||
|
|
||
|
#déplacement dans le repertoires "mes documents" de l'utilisateur actuel
|
||
|
Set-Location $([Environment]::GetFolderPath("Mydocuments"))
|
||
|
#import du module activedirectory
|
||
|
ipmo activedirectory
|
||
|
#nous récupérons la liste des ordinateurs du domaine, en prenant également la dernière ouverture de session
|
||
|
$ordinateurs = Get-ADComputer -Filter * -Properties lastlogondate | Select-Object -Property name,lastlogondate
|
||
|
#nous filtrons à 4 mois en arrière
|
||
|
$ordinateurs = $ordinateurs | Where-Object {$_.lastlogondate -gt $((Get-Date).addmonths(-4))}
|
||
|
#creation d'un tableau
|
||
|
$tableau = New-Object System.Collections.ArrayList
|
||
|
$progress = 0
|
||
|
foreach ($ordinateur in $ordinateurs)
|
||
|
{
|
||
|
|
||
|
$progress++
|
||
|
Write-Progress -Activity "Recherche d'écrans sur $($ordinateur.name) " -PercentComplete $($progress/$($ordinateurs.Count)*100) -Status "$progress / $($ordinateurs.count)"
|
||
|
$objet = New-Object Psobject
|
||
|
$objet |Add-Member -MemberType NoteProperty -Name "Ordinateur" -Value $ordinateur.name
|
||
|
$ping = $null
|
||
|
#nous pingons le poste.
|
||
|
$ping = Test-Connection -ComputerName $ordinateur.name -Count 1
|
||
|
#Si le TTL du poste est entre 65 et 128, c'est un poste windows. Nous continuons donc le script
|
||
|
if ($ping -and $ping.responsetimetolive -gt 64 -and $ping.responsetimetolive -le 128)
|
||
|
{
|
||
|
$objet |Add-Member -MemberType NoteProperty -Name "Répond au ping" -Value "Oui"
|
||
|
$moniteurs = $null
|
||
|
|
||
|
$moniteurs = $null
|
||
|
#on lance la requete WMI
|
||
|
$moniteurs = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID -ComputerName $($ordinateur.name)
|
||
|
#Si le resultat de la commande precedente est une erreur, alors...
|
||
|
if (!$?)
|
||
|
|
||
|
{
|
||
|
Write-Host "Erreur!"
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "WMI" -Value "ERREUR!!"
|
||
|
}
|
||
|
#Sinon...
|
||
|
else
|
||
|
{
|
||
|
Write-Host "Aucune erreur"
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "WMI" -Value ""
|
||
|
}
|
||
|
$i=0
|
||
|
foreach ($moniteur in $moniteurs)
|
||
|
{
|
||
|
$i++
|
||
|
#Le modele est la deuxième valeur de la propriété instancename.
|
||
|
$modele = $moniteur.instancename.split("\")[1]
|
||
|
$sn = $null
|
||
|
#Récupération du SN puis ajout dans l'objet
|
||
|
$moniteur.serialnumberid | % {$sn += [char]$_}
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "Modèle ecran $i" -Value $modele
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "SN ecran $i" -Value $sn
|
||
|
|
||
|
}
|
||
|
$i++
|
||
|
for($i; $i -le 3;$i++)
|
||
|
{
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "Modèle ecran $i" -Value ""
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "SN ecran $i" -Value ""
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
#si le ttl est inférieur ou égal à 64, c'est un non windows
|
||
|
elseif ($ping.responsetimetolive -ne $null -and $ping.responsetimetolive -le 64)
|
||
|
{
|
||
|
$objet |Add-Member -MemberType NoteProperty -Name "Répond au ping" -Value "Non Windows"
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$objet | Add-Member -MemberType NoteProperty -Name "Répond au ping" -Value "Non"
|
||
|
}
|
||
|
$null = $tableau.add($objet)
|
||
|
|
||
|
}
|
||
|
$tableau | Export-Clixml -Path "ecrans.xml"
|
||
|
$tableau | Export-Csv -Path "ecrans.csv" -NoTypeInformation -Encoding UTF8 -Force -Delimiter ";"
|