Question
[AD] Problème suppression user groupe
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
- Messages : 530
- Remerciements reçus 0
[code:1]
$groupe.Remove(\"LDAP://$($user.distinguishedName)\"«»)
[/code:1]
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Loris
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 18
- Remerciements reçus 0
The following exception occurred while retrieving member \"Remove\" : \"Unknow error (0X80005000)\".
Je continue de chercher
Connexion ou Créer un compte pour participer à la conversation.
- Loris
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 18
- Remerciements reçus 0
Voila je suis passé à l'implémentation de mon script sur le vrai environement mais j'ai un problème de droit de suppression apparement !
Mon script se trouve donc sur un serveur IIS.
Quand je le lance depuis Powershell il me dit :
Exception calling \"Remove\" with \"1\" argument(s) : \"Access is denied. (Exception from HRESULT: 0X80070005 (E_ACESSDENIED))\"
Il est également en tâche planifié, et il est programmé pour s'éxecuter avec un autre compte appartenant à l'AD. Quand je le lance il me dit aucune erreur, mais il ne supprime pas l'utilisateur du groupe
Si quelqu'un pouvait me dire à quoi cela peu être dû ?
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Dans quel environnement utilises tu ton script ? Windows 2003 Server ? Windows 2008 R2 ?
Un \"Access Denied\" signifie à priori que le compte utilisé pour supprimer le compte utilisateur du groupe n'a pas les droits suffisants.
Le compte avec lequel tu exécutes la console PowerShell dipose-t'elle des droits suffisants pour réaliser cette action ?
As tu testé d'autres solutions avec les Cmdlets de Quest , utilisables notamment dans un AD 2003 ou bien les Cmdlets du module ActiveDirectory accessibles en environnement 2008 R2 ? (Pour le module ActiveDirectory, la présence d'un serveur ayant le Rôle Active Direcotry Web Services, dans ton architecture actuelle, est nécessaire).
1 exemples simple :
[code:1]
Remove-QADGroupMember Domain\Groupe -Member Domain\User
[/code:1]
Pour plus d'informations :
[code:1]
Get-Help Remove-QADGroupMember
[/code:1]
[code:1]
Get-Help Remove-QADGroupMember -Examples
[/code:1]
[code:1]
Help Remove-QADGroupMember -Detailed
[/code:1]
[code:1]
Help Remove-QADGroupMember -Full
[/code:1]
Même chose pour retrouver l'aide pour des Cmdlets du module ActiveDirectory.
@+
Matthew
Connexion ou Créer un compte pour participer à la conversation.
- Loris
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 18
- Remerciements reçus 0
En faite comme je suis stagiaire dans la société j'ai un accès simple à l'AD et je ne suis pas un Administrateur !!! Mon maître de stage vient de tester avec son compte, et tout fonctionne correctement !
Par contre le script est vraiment moche, j'ai essayé de factoriser pour retirer le test et avoir 2 fois le même code mais je ne vois pas trop comment changer cela..
[code:1]$i = @(Dir C:\inetpub\wwwroot\***\xml-retireDuGroupe\*).Count
$tabFichiers = Get-Childitem C:\inetpub\wwwroot\***\xml-retireDuGroupe\*
#On test si le dossier contient 1 fichier
if ($i -le 1)
{
#On récupère le nom du plus ancien fichier
$nom = $tabFichiers.name
#On récupère le contenu du plus ancien fichier
$xmldata = [xml] (Get-Content C:\inetpub\wwwroot\RH-AD\xml-retireDuGroupe\$nom)
#On récupère le sAMAccountName de l'utilisateur
$login = $xmldata.utilisateur.nomutilisateur
#On récupère le DistinguishedName du compte
$dn = dsquery user -samid $login -o rdn
$dn2 = dsquery user -samid $login
$position = $dn2.IndexOf('OU=')
$dn2 = $dn2.Substring($position)
$dn2 = $dn2.Replace('\"','')
$user = [ADSI] \"LDAP://CN=$dn,$dn2\"
#connexion à l'active directory
$fed = $xmldata.utilisateur.federation
$grp = $xmldata.utilisateur.retiredugroupe
$connect = [ADSI]\"LDAP://OU=$fed,DC=**,DC=**\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect
# requête sur l'object Group
$search.filter = \"(&(objectCategory=group)(CN=$grp))\"
$groupeRech = $search.FindOne()
$groupeRech.Path
$groupeRech = ([ADSI] $groupeRech.Path)
$groupeRech.Remove(\"LDAP://$($user.distinguishedName)\"«»)
$groupeRech.SetInfo()
Move-iTem C:\inetpub\wwwroot\***\xml-retireDuGroupe\$nom C:\inetpub\wwwroot\RH-AD\xml-archiveRetireDuGroupe\$nom
}
else
{
For($j=0;$j -lt $i; $j++)
{
$nom = $tabFichiers[$j].name
$xmldata = [xml] (Get-Content C:\inetpub\wwwroot\***\xml-modifInfo\$nom)
#On récupère le sAMAccountName de l'utilisateur
$login = $xmldata.utilisateur.nomutilisateur
#On récupère le DistinguishedName du compte
$dn = dsquery user -samid $login -o rdn
$dn2 = dsquery user -samid $login
$position = $dn2.IndexOf('OU=')
$dn2 = $dn2.Substring($position)
$dn2 = $dn2.Replace('\"','')
$user = [ADSI] \"LDAP://CN=$dn,$dn2\"
#connexion à l'active directory
$fed = $xmldata.utilisateur.federation
$grp = $xmldata.utilisateur.retiredugroupe
$connect = [ADSI]\"LDAP://OU=$fed,DC=**,DC=**\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect
# requête sur l'object Group
$search.filter = \"(&(objectCategory=group)(CN=$grp))\"
$groupeRech = $search.FindOne()
$groupeRech.Path
$groupeRech = ([ADSI] $groupeRech.Path)
$groupeRech.Remove(\"LDAP://$($user.distinguishedName)\"«»)
$groupeRech.SetInfo()
Move-iTem C:\inetpub\wwwroot\***\xml-retireDuGroupe\$nom C:\inetpub\wwwroot\RH-AD\xml-archiveRetireDuGroupe\$nom
}
}[/code:1]
J'ai donc fait un test pour compter le nombre de fichiers, ensuite j'ai exécuté une boucle for ayant comme paramètre ceci :
[code:1]For($j=0;$j -le $i; $j++)
[/code:1]
Mais quand il n'y a qu'un seul fichier ca ne fonctionne pas
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
ou bien les Cmdlets du module ActiveDirectory accessibles en environnement 2008 R2 ? (Pour le module ActiveDirectory, la présence d'un serveur ayant le Rôle Active Direcotry Web Services, dans ton architecture actuelle, est nécessaire).
Après réflexion, ce n'est pas tout à fait exact. Il est possible, dans un AD 2003, d'utiliser le module ActiveDirectory disponible dans les RSAT. Il faut néanmoins disposer d'un poste en Windows 7 et déployer ADMGS sur un DC .
Mais cela demande tout de même certains pré requis et je trouve aussi simple de n'installer que les Cmdlets de Quest... A voir ce qui est le mieux en fonction de l'Architecture actuellement en place et des ses futures évolutions.
Santa écrit:
En faite comme je suis stagiaire dans la société j'ai un accès simple à l'AD et je ne suis pas un Administrateur !!! Mon maître de stage vient de tester avec son compte, et tout fonctionne correctement !
C'était donc bien un problème de droits
Santa écrit:
Mais quand il n'y a qu'un seul fichier ca ne fonctionne pas
Le 'Get-Childitem' te renvoit une collection de fichiers (objets de type FileInfo ou DirectoryInfo)... ou pas. Dans ce dernier cas il s'agira soit d'un seul objet (dans ton cas un seul fichier), soit de rien du tout car aucun fichier n'a été trouvé.
Effectivement, tu peux simplifier ton code.
Je pense à un foreach pour énumérer la collection.
Sans vouloir analyser tout ton code (tu es en stage et tu es donc là pour apprendre
[code:1]
$Folder = \"C:\inetpub\wwwroot\***\xml-retireDuGroupe\*\"
$tabFichiers = Get-Childitem $Folder
if($tabFichiers){
Foreach($Fichier in $tabFichiers){
$xmldata = [xml](Get-Content $Fichier.FullName)
# Traitement
}
}
else{
Write-Warning \"Aucun fichier n'a été trouvé dans '$Folder'\"
}
[/code:1]
Penses à l'indentation dans ton code (les tabulations pour chaque bloque if, foreach, etc...) : ça sera beaucoup plus facile à lire.
Message édité par: Matthew BETTON, à: 8/05/12 18:47<br><br>Message édité par: Matthew BETTON, à: 8/05/12 18:49
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [AD] Problème suppression user groupe