Question
Get-ADUser avec filtre departement et memberof
- Vanessa
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
Je suis un vrai debutant en scripting et j'essaye de faire un script tout simple avec les cmdtl mais je n'arrive pas sortie une liste correcte
Voici ce que je dois faire
deplacer des user qui on un departement précis dans un groupe précis mais si ils y sont deja, j'ai une erreur donc j'essaye de liste les user du département TEST qui ne sont pas le groupe \"test_grp_vde_1\"
Voici ce que je fais
1er test
[code:1]Get-ADUser -Filter { department -eq 'TEST' -and MemberOf -ne 'test_grp_vde_1' }[/code:1]
Cela me donne bien les user avec departement TEST mais qu'il soit dans le groupe ou non
J'ai aussi testé avec des () des ', des \"\", .. enfin j'en ai tellement testé que je ne sais plus
2eme test
[code:1]Get-ADUser -Filter { department -eq 'TEST' } -Properties { MemberOf -ne 'test_grp_vde_1' }[/code:1]
La j'ai une erreur
Get-ADUser : One or more properties are invalid.
Parameter name: MemberOf notlike 'test_grp_vde_1'
At line:1 char:1
+ Get-ADUser -Filter {department -eq 'TEST'} -Properties {MemberOf notlike 'test_g ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (
+ FullyQualifiedErrorId : One or more properties are invalid.
Parameter name: MemberOf notlike 'test_grp_vde_1',Microsoft.ActiveDirectory.Management.Commands.GetADUser
Après je dois les mettre dans le groupe si il n'y sont pas mais si je n'ai pas une bonne liste a la base, cela ne va pas aller
une piste pour moi ?
Merci
Shado (Experience PowerShell 2 jours ...)
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
bienvenueJe suis un vrai debutant en scripting
enfin un VRAI debutant ! d'habitude on n'a que des faux !
pour l'erreur c'est normal, puisqu'ils y sont déjà !Voici ce que je dois faire
deplacer des user qui on un departement précis dans un groupe précis mais si ils y sont deja, j'ai une erreur
normalement on fais une requête (un if) pour verifier la presence du user avant sont ajout !
mais dans ton cas il est possible de faire comme tu a déjà commencé a faire !
ton message d'erreur est un probleme sur l'ecriture du filtre (voir l'exemple 11 de ce site )
voici la bonne écriture pour le filtre :
[code:1]$groupe = \"test_grp_vde_1\"
$department = \"CN=test_grp_vde_1,OU=groupe,DC=domaine,DC=com\"
Get-ADUser -Filter {department -eq $department -and memberOf -RecursiveMatch } [/code:1]mais comme tu vois, il te faut utilisé le DistinguishedName du groupe
une autre solution consiste a ne filtrer que sur le département puis au moment de l'ajout de verifier si l'utilisateur ne ce trouve pas dans le groupe
[code:1]
$groupe = \"test_grp_vde_1\"
$department = \"TEST\"
(Get-ADUser -Filter {department -eq $department).SamAccountName | foreach {
if ((Get-ADGroupMember $groupe).SamAccountName -notcontains $SAM) {
Add-ADGroupMember -Identity \"test_grp_vde_1\" -Members $_
}
}
[/code:1]cette autre solution s'adapte a toutes les situations
il y bien sur d'autres façons de faire mais pour débuté c'est bien
Attention : code prévu pour PowerShell Version 3 ou +
.
Connexion ou Créer un compte pour participer à la conversation.
- Vanessa
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
Tout d'abord, de bonne fete de fin d'annee pour vous
j'ai essaye de comprendre un peu mieux et voici ce que j'ai pondu
[code:1]Import-Module ActiveDirectory
$groupe = \"CN=test_grp_vde_1,OU=Groups,OU=Testing,DC=ad,DC=domain,DC=be\"
$department = \"TEST\"
$userlist = Get-ADuser -filter \"department -eq '$department'\" | Select -ExpandProperty Name
$members = Get-ADgroupMember -Identity $groupe -Recursive | Select -ExpandProperty Name
foreach ($user in $userlist)
{
If ($members -notcontains $user.name)
{
add-adgroupMember $groupe -member $user.name
Write-Host \"$user add in the group\"
}
Else
{
Write-Host \"$user exists in the group\"
}
}[/code:1]
Alors .. il le fait .. mais il me retourne une erreur disant que le USER est deja dans le groupe .. c'est pas très joli
S C:\Windows\system32> C:\Admin\ServerCorp\vde\test_vdfin.ps1
Add-ADGroupMember : Cannot validate argument on parameter 'Members'. The argument is null or empty. Supply an argument
that is not null or empty and then try the command again.
At C:\Admin\ServerCorp\vde\test_vdfin.ps1:12 char:37
+ add-adgroupMember $groupe -member $user.name
+ ~~~~~~~~~~
+ CategoryInfo : InvalidData: (
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupM
ember
Testvde1 add in the group
Add-ADGroupMember : Cannot validate argument on parameter 'Members'. The argument is null or empty. Supply an argument
that is not null or empty and then try the command again.
At C:\Admin\ServerCorp\vde\test_vdfin.ps1:12 char:37
+ add-adgroupMember $groupe -member $user.name
+ ~~~~~~~~~~
+ CategoryInfo : InvalidData: (
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupM
ember
Testvde2 add in the group
Add-ADGroupMember : Cannot validate argument on parameter 'Members'. The argument is null or empty. Supply an argument
that is not null or empty and then try the command again.
At C:\Admin\ServerCorp\vde\test_vdfin.ps1:12 char:37
+ add-adgroupMember $groupe -member $user.name
+ ~~~~~~~~~~
+ CategoryInfo : InvalidData: (
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupM
ember
Testvde3 add in the group
MErci beaucoup pour votre aide
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
Merci et a aussi bonne feteTout d'abord, de bonne fete de fin d'année pour vous
peut tu me confirmé la version de ton PowerShell
certaine syntaxe sont plus simple en version 3 et +
tu utilise la variable $PSVersionTable pour ça, moi je suis en version 5 :
[code:1] $PSVersionTable
Name Value
----
PSVersion 5.0.10586.672
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.672
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
[/code:1]
tu a une erreur sur cette ligne :
[code:1] If ($members -notcontains $user.name)[/code:1]
tu doit écrire :
[code:1] If ($members -notcontains $user)[/code:1]puisse que tu limite les reponses aux name avec le [code:1] | Select -ExpandProperty Name[/code:1]
je suis pas sur que ta variable contienne une liste de nom
une bonne ecriture du filtre serait comme ceci :
[code:1]Get-ADuser -filter {department -eq $department} [/code:1]
pas de quote autour d'une variable
des accolades a la place de guillemets pour l'ensemble filtre
Connexion ou Créer un compte pour participer à la conversation.
- Vanessa
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
je commence a comprendre les suptilités
Voici ma version
PS C:\Windows\system32> $PSVersionTable
Name Value
----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.36373
BuildVersion 6.2.9200.16481
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
Et pour le reste, j'ai adapté comme ceci sur vos conseils
Import-Module ActiveDirectory
$groupe = \"CN=test_grp_vde_1,OU=Groups,OU=Testing,DC=ad,DC=dieteren,DC=be\"
$department = \"TEST\"
$userlist = Get-ADuser -filter {department -eq $department} | Select -ExpandProperty Name
$members = Get-ADgroupMember -Identity $groupe -Recursive | Select -ExpandProperty Name
foreach ($user in $userlist)
{
If ($members -notcontains $user)
{
add-adgroupMember $groupe -member $user
Write-Host \"$user add in the group\"
}
Else
{
Write-Host \"$user exists in the group\"
}
}
Le resultat est top !
PS C:\Windows\system32> C:\Admin\ServerCorp\vde\test_vdfin.ps1
Testvde1 exists in the group
Testvde2 exists in the group
Testvde3 exists in the group
PS C:\Windows\system32>
Merci beaucoup pour votre aide. je comprend mieux mes erreurs !
j'ai teste aussi en enlevant le user3 et voici le resultat
PS C:\Windows\system32> C:\Admin\ServerCorp\vde\test_vdfin.ps1
Testvde1 exists in the group
Testvde2 exists in the group
Testvde3 add in the group
PS C:\Windows\system32>
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
une ou deux infos au passage :
le DistinguishedName n'est pas indispensable dans identité d'un groupe ou autre.
on ne l'utilise que dans certain cas comme dans le filtre que je t'avais donner
tu peut donc mettre \"test_grp_vde_1\" qui est plus simple a taper mais aussi a lire dans un script
autre info, autant que possible utilise le SamAccountName plutôt que le name car le SamAccountName est unique dans le domaine !
pour les groupes name et SamAccountName sont généralement identique, alors que pour les utilisateurs SamAccountName correspond au login et name au nom + prenom a affiché
dans ton script tu peut donc remplacé name par SamAccountName sans problème
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Get-ADUser avec filtre departement et memberof