Question Get-ADUser avec filtre departement et memberof

Plus d'informations
il y a 9 ans 3 mois #22852 par Vanessa
Bonjour,

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: (:) [Get-ADUser], ArgumentException
+ 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.

Plus d'informations
il y a 9 ans 2 mois #22866 par Philippe
salut Shadolity

Je suis un vrai debutant en scripting

bienvenue
enfin un VRAI debutant ! d'habitude on n'a que des faux ! ;) petite blague

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

pour l'erreur c'est normal, puisqu'ils y sont déjà !
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.

Plus d'informations
il y a 9 ans 2 mois #22869 par Vanessa
Bonjour

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: (:) [Add-ADGroupMember], ParameterBindingValidationException
+ 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: (:) [Add-ADGroupMember], ParameterBindingValidationException
+ 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: (:) [Add-ADGroupMember], ParameterBindingValidationException
+ 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.

Plus d'informations
il y a 9 ans 2 mois #22870 par Philippe

Tout d'abord, de bonne fete de fin d'année pour vous

Merci et a aussi bonne fete :woohoo:

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.

Plus d'informations
il y a 9 ans 2 mois #22873 par Vanessa
Top merci

je commence a comprendre les suptilités ;) enfin je crois lol

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.

Plus d'informations
il y a 9 ans 2 mois #22874 par Philippe
bonne nouvelle :)

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.

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena