[Script] – Powershell : Récupérer les membres du groupe administrateur sur les machines d’un domaine

1
4023

Sommaire

Il y a quelques temps, j’ai été confronté à une problématique. En effet, je devais pour des raisons de sécurité, connaitre sur l’ensemble de mon parc informatique quels étaient les membres du groupe administrateur local de chaque machine. La méthode la plus simple étant bien sûr de se connecter sur chaque machine directement mais cette méthode n’étant viable que sur de petit environnement avec très peu d’ordinateur, j’ai donc décidé de développer un script Powershell qui faisait exactement la même chose mais de manière automatique.

Script

Voici le script :

 
 # Initialisation des variables de comptage  
 
 $n=0
 $v=0
 $w=0
 $path = "C:\Scripts\List des admin par machine.csv"
 $ObjFilter = "(objectClass=Computer)"
 $objSearch = New-Object System.DirectoryServices.DirectorySearcher
 $objSearch.PageSize = 15000
 $objSearch.Filter = $ObjFilter
 
 # Renseignez votre domaine 
					
 $objSearch.SearchRoot = "LDAP://dc="votre domaine", dc="fr""
 $AllObj = $objSearch.FindAll()
 
 # Mise en place de la boucle pour chaque objets computer de votre AD 
 
 foreach ($Obj in $AllObj)
 {
     $objItemT = $Obj.Properties
     $Computer = $objItemT.name 
	 
 # Pour chaque machine un test de connection sur une seconde est effectué  
	 
    if ( Test-Connection $Computer -count 1 -quiet )  
		{

 # La variable $MembresAdmin est initialisé à chaque passage de la boucle 
		
            $MembresAdmin =""
            $Connexion = [ADSI]"WinNT://$Computer/Administrateurs,group"
			
 # Ici on recherche dans le groupe administrateur tous les membres en les listant et en excluant les membres redondant avec la commande  Where-Object {$_ -notlike "" -and $_ -notlike ""}
			
            $MembresAdmin = $Connexion.psbase.invoke('Members') | %{$_.GetType().InvokeMember('Name','GetProperty', $null, $_, $null)}| Where-Object {$_ -notlike "admin*" -and $_ -notlike ""} 
            if ( !$MembresAdmin )
                {
                    Write-host -nonewline "Machine $Computer conectées mais rien d'inhabituel"
                }
            else
                {
                    "$Computer " | Out-File -filepath $path -encoding ASCII -append
                    "$MembresAdmin 
                    ------------" | Out-File -filepath $path -encoding ASCII -append
            }
            $v++
        }
    else 
        {
            Write-host -nonewline "Machine $Computer non conectées" `n 
            $n++
        }

 }
Write-host "il y a $n machines deconectées"  `n
Write-host "il y a $v machines conectées"  `n 
$w=$n+$v
Write-Host "Il y a $w machines"

 

Ce script va vérifier si chaque machine de votre AD est, dans un premier temps connectée, puis si c’est le cas, vérifier qui est membre du groupe administrateur en dehors des membres que vous voulez exclure.

Ensuite il va envoyer les membres dans un ficher texte accompagné du numéro de sa machine. L’emplacement du fichier est indiqué dans la variable $path et les variables $n, $v et $w permettent de compter les machines connectées ou non.

Conseil d’utilisation

Pour exécuter ce script il faut le lancer en tant qu’administrateur de votre domaine.

Comme vous avez dû le deviner le script est assez long à s’exécuter, il dépend surtout du nombre de machine dans votre parc. Ensuite pour être certain de récupérer un maximum d’information, il faut que les machines soient connectées à votre domaine.

 

Voila pour ce petit script, en espérant qu’il vous aura fait gagner du temps.

1 COMMENTAIRE

  1. Bonjour merci pour votre script mais j’ai un petit soucis avec cette ligne :

    $MembresAdmin = $Connexion.psbase.invoke(‘Members’) | %{$_.GetType().InvokeMember(‘Name’,’GetProperty’, $null, $_, $null)}| Where-Object {$_ -notlike « admin* » -and $_ -notlike «  »}
    if ( !$MembresAdmin )

    le .invoke ne change pas de couleurs sur mon powershell ise et donc le get type non plus et je ne sais pas du tout comment l’arranger jai fait un copier coller puis juste defini mon domaine

    merci d’avance

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici