Meilleur auteur de réponses
Problème sur manipulation du groupe local "Administrateurs"

Question
-
Bonjour,
Je me demande si cela est faisable dans ma situation, je m'explique. Dans mon entreprise, nous masterisons les postes via une image indépendante de la machine, via une application maison on installe les pilotes et dans le même temps personnalise le nom de la machine. [Je tente de faire un programme qui automatise la suite]. Ensuite, nous faisons une mise sur le domaine [Ok], redémarrage du PC, modification des droits sur le fichier C:\Windows\SapLogon.ini [Ok], et dernier point il me reste à ajouter un groupe de l'AD dans le groupe local Administrateurs et là cela coince.
Dans cette dernière phase je suis administrateur local de la machine, lorsque je vais ajouter le groupe je dois entrer mon compte adminitrateur réseau. Je pense que c'est là que cela se joue. Quand je lance la fonction en Administrateur local, j'obtiens directement un accès refusé. si je génére l'éxecutable et tente un "éxecuter en tant que ..." j'obtiens le message : "Windows ne parvient pas à accéder au périphérique, au chemin d'accès, ou au fichier spécifié. Vous ne disposez peut-être pas des autorisations ...". JE suppose que cela vient du fait que je ne dispose pas de compte Adminitrateur Local + Réseau.
Est-il possible de contourner cela ? Dois-je m'orienter sur la création d'un second éxecutable et de le lancer du premier via Process.Start("Second.exe", username, password, domaine) ? (Je n'aime pas trop l'idée).
Je mets le code que j'utilise poura jouter le groupe AD vers le groupe Administrateurs Local :
Try Dim PC As String = Environ("ComputerName") Dim LCL As New DirectoryEntry("WinNT://" & PC & ",computer") Dim DOM As New DirectoryEntry("WinNT://" & TBDomaine) Dim DOMGRP As DirectoryEntry = DOM.Children.Find("GG-ComputersLocalAdmin", "group") Dim LCLGRP As DirectoryEntry = LCL.Children.Find("Administrateurs", "group") LCLGRP.Invoke("Add", New Object() {LCLGRP.Path.ToString}) MessageBox.Show("Modification du groupe Administrateurs Local réussie !", "Opération réussie", MessageBoxButtons.OK, MessageBoxIcon.Information) End Catch ex As Exception MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error) End End Try
Merci, cordialement,
Cyril
Réponses
-
Bonjour Cyril,
On dirais que vous posez les même questions que moi il y a un bon moment de ça :) (On est peut être collègue ?)
J'ai fait déjà toute cette partie d'automatisme avec Windows XP et Windows 7Le code ci dessous fonctionne normalement sous Windows XP et 7
' ' Ajoute l'utilisateur (AD) dans le group Administrateurs ' Dim de As New DirectoryEntry("LDAP:xxxxxxxxxxxx") Dim deSearch As New DirectorySearcher() With {.SearchRoot = de, .Filter = "cn=xtalour"} Dim group As New DirectoryEntry("WinNT://" & oComputerName & "/Administrateurs") Dim Members As Object = group.Invoke("Members", Nothing) Dim ExistLocal = False For Each Member As Object In CType(Members, IEnumerable) Dim x As New DirectoryEntry(Member) If x.Name.ToLower = deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value.ToString.ToLower Then ExistLocal = True Exit For End If Next If ExistLocal = False Then group.Invoke("Add", New Object() {"WinNT://" & de.Properties("dc").Value & "/" & deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value}) Else Console.WriteLine("Le compte exite deja") End If
faire attention au groupe Administrateurs en anglais c'est administrators
Je detaille pas trop c'est volontaire, faite moi savoir si vous avez un problème ...
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor mardi 27 septembre 2011 13:34 add
- Proposé comme réponse TroxsaEditor mardi 27 septembre 2011 18:36
- Marqué comme réponse Ciprian Duduiala mardi 4 octobre 2011 06:29
-
Merci de donner des nouvelles.
J'ai vu sur certain site ou il rencontrait le même problème que vous et aprioris ils n'ont pas trouver de solution.
Dans le cas ou cela ne fonctionnerais toujours pas je vous donne une solution de contournement (un article de : Alex Petrescu)
Comment modifier les I/O standard d’un processusne n'est pas très propre de procéder ainsi mais des fois on a pas le choix
Pour récupérer les erreurs éventuelles il faudra utiliser "StandardError"A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Proposé comme réponse Ciprian Duduiala lundi 3 octobre 2011 06:09
- Marqué comme réponse Ciprian Duduiala mardi 4 octobre 2011 06:30
Toutes les réponses
-
Bonjour Cyril,
On dirais que vous posez les même questions que moi il y a un bon moment de ça :) (On est peut être collègue ?)
J'ai fait déjà toute cette partie d'automatisme avec Windows XP et Windows 7Le code ci dessous fonctionne normalement sous Windows XP et 7
' ' Ajoute l'utilisateur (AD) dans le group Administrateurs ' Dim de As New DirectoryEntry("LDAP:xxxxxxxxxxxx") Dim deSearch As New DirectorySearcher() With {.SearchRoot = de, .Filter = "cn=xtalour"} Dim group As New DirectoryEntry("WinNT://" & oComputerName & "/Administrateurs") Dim Members As Object = group.Invoke("Members", Nothing) Dim ExistLocal = False For Each Member As Object In CType(Members, IEnumerable) Dim x As New DirectoryEntry(Member) If x.Name.ToLower = deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value.ToString.ToLower Then ExistLocal = True Exit For End If Next If ExistLocal = False Then group.Invoke("Add", New Object() {"WinNT://" & de.Properties("dc").Value & "/" & deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value}) Else Console.WriteLine("Le compte exite deja") End If
faire attention au groupe Administrateurs en anglais c'est administrators
Je detaille pas trop c'est volontaire, faite moi savoir si vous avez un problème ...
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor mardi 27 septembre 2011 13:34 add
- Proposé comme réponse TroxsaEditor mardi 27 septembre 2011 18:36
- Marqué comme réponse Ciprian Duduiala mardi 4 octobre 2011 06:29
-
Merci de te pencher à nouveau sur mon cas.
Je pense avoir adapter ton code à mon cas, cela génère un message d'erreur : La valeur fournie pour adsObject n'implémente pas les IAD. Je lance le programme en administrateur local. Je teste avec un compte d'utilisateur de l'AD mais mon but est de faire cela avec un groupe de l'AD.
J'ai remplacé les x par le nom de l'AD, j'ai gardé le "Administrateurs" car je teste sur une machine en Windows 7 Fr.
Je continuerai mes investigations jeudi car je dois partir en déplacement. -
Cyril,
Dans le chemin LDAP qu'avez vous mis ?
Exemple (cela doit être au format LDAP) LDAP://DOM.DOMM.com/DC=DOM,DC=DOMM,DC=com
Dans ".Filter = NomDuGroup"Pouvez vous me dire sur quelle ligne ça plante ?
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Proposé comme réponse TroxsaEditor mardi 27 septembre 2011 18:36
-
Aïe, en effet j'ai du mal avec le format LDAP :), j'avais juste mis LDAP://LeDomaine.dom.com.
Dans .Filter j'ai mis mon nom d'utilisateur, je comptais tester avec un User avant de voir (modifier ?) la syntaxe pour un Group.
Je corrigerai l'erreur LDAP quand je reviendrai jeudi, je vous dirai sur quelle ligne cela plante si le problème n'est pas corrigé par cette modification.
Par contre, l'application fonctionnera t-elle en administrateur local ou dois-je faire un "Exécuter en tant que ... Admin_Domaine" ? -
Dans le Filter vous pouvez mettre ce que vous voulez, c'est a dire un User ou un Group cela fonctionne de la même façon
Faire aussi attention a :
("WinNT://" & oComputerName & "/Administrateurs")
Vous pouvez le remplacé par :
("WinNT://./Administrateurs")
Ce code fonctionne avec le compte ayant droit localement, c'est a dire que le programme devra être obligatoirement exécuté en Administrateur, si le programme est lancé a partir d'une session User (utilisateur) cela ne fonctionne donc pas.
Puis d'apres ce que je comprend vous avez une structure AD (LDAP) en lecture pour "tout le monde" (everyone) en interne, cela ne devrai donc pas gêné le fonctionnement du programme. sauf dans le cas contraire il faudra mettre un compte LDAP qui autorise la lecture.Et pour répondre a la question si il faut que ce programme soit exécuté en Domain Admin : Oui, il peux aussi être exécuté du moment que la machine soit dans le domaine et que le groupe Domain Admin soit dans le groupe Administrateurs
Je suis confiant pour Jeudi, ça fonctionnera :)
Sachez que la ligne ou cela plante ne veux pas forcement dire que l'erreur vient de là.A Jeudi
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
-
Bonjour, Cyril,
Est-ce que vous avez résolu votre problème en utilisant les informations fournies par Xavier ? Merci de tenir la communauté informée sur la suite de vos démarches.
Cordialement,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
-
Bonjour,
Voilà j'ai apporté les modifications : correction du LDAP
J'ai tenté avec les deux syntaxes :
- ("WinNT://./Administrateurs")
- ("WinNT://" & oComputerName & "/Administrateurs")
Même message d'erreur "La valeur fournie pour adsObject n'implémente pas les IAD", l'erreur se produit sur la ligne :
Dim x As New DirectoryEntry(members)
Voilà tout, merci.
-
Bonjour Cyril,
La ligne que vous indiquez ce trouve dans une boucle For Each et jai l'impression que vous vous etes trompé de variable
ce n'est pas Members mais MemberPouvez vous essayer a nouveau et me donner le résultat ?
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
-
En effet, j'aurai du changer complètement le nom je ne trouve pas pratique Member et members, c'est confus pour moi.
Maintenant j'ai une "Erreur inconnue (0x80005000)" sur la ligne suivante (If x.Name.ToLower ...).
J'ai tenté en tant qu'administrateur local et domaine (en ayant ajouter l'administrateur domaine dans le groupe administrateurs local).
Edition : En fait, en faisant l’exécution en pas à pas, je constate que sur la variable "de" j'ai déjà l'erreur mentionnée plus haut, sans que cela n'empêche le programme de continuer du moins jusqu'à la ligne "If x.Name...."- Modifié Cesame jeudi 29 septembre 2011 09:28 Ajout information sur l'erreur
-
Je ne comprend pas pourquoi il y a cette erreur sur :
If x.Name.ToLower = deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value.ToString.ToLower Then
Pouvez m'envoyer, par mail (voir ci-dessous), juste la partie qui plante avec les paramètre que vous mis.
A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor jeudi 29 septembre 2011 09:30 modif
-
Désoler pour la communauté de ne pas partager certaine informations (données confidentielles sur les paramètres LDAP)
Après avoir reçu me mail:
Certainement du a une erreur de copier coller et de modification de ma part. Le chemin LDAP que Cyril a mis dans son code etait :
LDAP:DOM.DOMM.com/DC=DOM,DC=DOMM,DC=com
- Il manquait les "//" apres "LDAP:" cela donne :
LDAP://DOM.DOMM.com/DC=DOM,DC=DOMM,DC=com
Mais cela n'a pas résolut le problème
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor jeudi 29 septembre 2011 10:16
-
Cyril,
Avez vous le necessaire suite au mail que je vous ai envoyé ?
J'ai vu sur ce site http://www.vbforums.com/showthread.php?t=489138
Il faudra changé le nom Administrators par Administrateurs et User1000 par le nom du groupe ou l'utilisateur.Il faudra certainement ajouté l'utilisateur de facon LDAP
de.Properties("dc").Value & "/" & deSearch.FindOne.GetDirectoryEntry.Properties("cn").Value
Pourriez vous faire le test
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor jeudi 29 septembre 2011 14:17 correction
-
Bonjour Xavier,
Vraiment désolé de tarder à répondre, je suis très pris depuis hier après-midi, du matériel qui tombent en panne en fin de mois on me harcèle de toutes parts. Je continue de tester dès que j'ai du temps. Je vous ferai un retour dans l'après-midi une fois synthétisé.
Merci, cordialement,
Cyril
Edition : Je me demandais, n'est-il pas possible d'ajouter les groupes AD dans le groupe local administrateurs via le SSID ? Indépendamment du réseau.
- Modifié Cesame vendredi 30 septembre 2011 08:00
-
Merci de donner des nouvelles.
J'ai vu sur certain site ou il rencontrait le même problème que vous et aprioris ils n'ont pas trouver de solution.
Dans le cas ou cela ne fonctionnerais toujours pas je vous donne une solution de contournement (un article de : Alex Petrescu)
Comment modifier les I/O standard d’un processusne n'est pas très propre de procéder ainsi mais des fois on a pas le choix
Pour récupérer les erreurs éventuelles il faudra utiliser "StandardError"A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Proposé comme réponse Ciprian Duduiala lundi 3 octobre 2011 06:09
- Marqué comme réponse Ciprian Duduiala mardi 4 octobre 2011 06:30
-
-
Bonjour Xavier,
Je suis cloué au lit pour quelques jours, je ne peux donc plus tester (si j'avais su j'aurai emporter mon PC du boulot ...). J'ai beau tripatouiller le code (le votre et celui de l'avant dernier lien), rien à faire. Pour le dernier lien, ce doit être d'un trop haut niveau pour moi, je ne comprends pas pourquoi je dois manipuler dans les processus. Le but est-il d'ajouter les groupes en ligne de commande MS-DOS ? Sinon, mon programme est déjà très satisfaisant, je vous remercie du temps consacré et vous souhaite bonne continuation.
Cordialement,
Cyril
- Modifié Cesame mardi 4 octobre 2011 13:26 Mise en page douteuse :)
-
Cyril,
Oui c'est pour ajouté le groupe via ligne de commande.)
N’hésitez pas a relancé votre demande pour trouvé une solution (peut être coté WMI ?).A bientôt
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Modifié TroxsaEditor mardi 4 octobre 2011 14:22