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.
$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.
$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.
#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.
#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.
#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.
#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.