samedi 7 décembre 2013

Les groupes locaux.

Je vais traiter ici le cas des groupes locaux. Nous allons voir comment lister/créer et supprimer des groupes. Nous verrons également comment lister/ajouter et supprimer des membres dans un groupe.

Commençons par créer un groupe local "test1".


 
#Créer un groupe.
$gname = "test1"
$gcomputer = (Get-Item "Env:computername").Value
$gdesc = "Description"

#Je vérifie si le groupe existe déjà.
if ([ADSI]::Exists("WinNT://$gcomputer/$gname,group") -eq $false)
  {
    #Si le groupe n'existe pas je le crée.
    $adsi = [ADSI]("WinNT://$gcomputer")
    $group = $adsi.Create("Group", $gname)
    $group.SetInfo()
    #Puis je modifie la description.
    $group.Description = $gdesc
    $group.SetInfo()
  }
else
  {
    #Si le groupe n'existe pas.
    Write-Host "Le groupe" $gname "n'existe pas."
  }

#Fin.



Pour vérifier si le groupe est bien créé, nous allons sortir la liste des groupes.


 
#Lister les groupes.
$gcomputer = (Get-Item "Env:computername").Value

#Je liste les groupes locaux.
$adsi = [ADSI]("WinNT://$gcomputer,computer")
$adsigroups = $adsi.psbase.children | where { $_.psbase.schemaClassName -eq 'group' }
foreach($group in $adsigroups)
 {
   $gname = $group.GetType().InvokeMember('Name', 'GetProperty', $null, $group, $null)
   Write-Host $gname
 }

#Fin.



Puis nous allons ajouter un membre dans notre groupe.


 
#Ajouter un membre dans un groupe.
#Groupe.
$gname = "test1"    #Nom du groupe.
$gcomputer = (Get-Item "Env:computername").Value

#Membre à ajouter.
$mname = "User1"   #Nom de l'utilisateur ou groupe global.
$mdomain = (Get-Item "Env:computername").Value 

#Je verifie si le groupe existe.
if ([ADSI]::Exists("WinNT://$gcomputer/$gname,group"))
  {
    $echec = 0
    #Si le groupe existe, j'ajoute le membre au groupe.
    $adsigroup = [ADSI]("WinNT://$gcomputer/$gname,group")
    Try { $adsigroup.psbase.Invoke("Add",([ADSI]("WinNT://$mdomain/$mname")).path) }
    Catch { $echec = 1 }
    #Je vérifie si l'ajoute s'est bien passé.
    if ($echec) { write-host $mname "n'a pas pu être ajouté au group" $gname }
    else { write-host $mname "a été ajouté au group" $gname }
  }
else
  {
    #Si le groupe n'existe pas.
    Write-Host "Le groupe" $gname "n'existe pas."
  }

#Fin.



L'exemple suivant permet de lister les membre d'un groupe. Si l'ajout du membre c'est bien passé, nous allons le voir apparaitre dans cette liste.


 
#Lister les membres d'un groupe.
#Groupe.
$gname = "test1"
$gcomputer = (Get-Item "Env:computername").Value

#Je verifie si le groupe existe.
if ([ADSI]::Exists("WinNT://$gcomputer/$gname,group"))
  {
    #Si le groupe existe, je liste les membres de groupe.
    $adsigroup = [ADSI]("WinNT://$gcomputer/$gname,group")
    $adsimembers = $adsigroup.PSBase.Invoke('Members')
    foreach($member in $adsimembers)
     {
       $mname = $member.GetType().InvokeMember('Name', 'GetProperty', $null, $member, $null)
       Write-Host $mname "est membre du groupe" $gname
     }
  }
else
  {
    #Si le groupe n'existe pas.
    Write-Host "Le groupe" $gname "n'existe pas."
  }

#Fin.



Il est temps de faire le ménage. L'exemple suivant montre comment supprimer un membre du groupe.


 
#Supprimer un membre dans un groupe.
#Groupe.
$gname = "test1"    #Nom du groupe.
$gcomputer = (Get-Item "Env:computername").Value

#Membre.
$mname = "User1"   #Nom de l'utilisateur ou groupe global.
$mdomain = (Get-Item "Env:computername").Value

#Je vérifie si le groupe existe.
if ([ADSI]::Exists("WinNT://$gcomputer/$gname,group"))
  {
     $echec = 0
     #Si le groupe existe, je tente de supprimer un membre du groupe.
     $adsigroup = [ADSI]("WinNT://$gcomputer/$gname,group")
     Try { $adsigroup.psbase.Invoke("Remove",([ADSI]("WinNT://$mdomain/$mname")).path) }
     Catch { $echec = 1 }
     #Je vérifie si la suppression s'est bien exécuté.
     if ($echec) { write-host $mname "n'a pas pu être supprimé du group" $gname }
     else { write-host $mname "a été supprimé du group" $gname }
  }
else
  {
     #Si le groupe n'existe pas.
     write-host "Le groupe" $gname "n'existe pas."
  }

#Fin.



Reste plus qu'a supprimer le groupe "test1" lui même.


 
#Supprimer un groupe.
#Groupe.
$gname = "test1"
$gcomputer = (Get-Item "Env:computername").Value

#Je vérifie si le groupe existe.
if ([ADSI]::Exists("WinNT://$gcomputer/$gname,group"))
  {
    #Si le groupe existe, je supprime le groupe.
    $adsi = [ADSI]("WinNT://$gcomputer")
    $adsi.Delete('group', $gname)
  }
else
  {
    #Si le groupe n'existe pas.
    Write-Host "Le groupe" $gname "n'existe pas."
  }

#Fin.