Question : Script pour enlever des groupes du « membre » des groupes dans une liste de comptes d'utilisateur

OK, je vais essayer de décrire ma demande aussi clair comme possible.  Je ne suis pas un expert scripting par aucun moyen et n'ai pas besoin de beaucoup d'aide faire ceci.  J'ai vérifié dans tout l'Internet pour trouver quelque chose qui fonctionnera que je peux construire dessus, mais pouvait seulement trouver un petit exemple que je collerai ci-dessous. Voici ma situation : le

We ont un domaine 2003 très grand d'ANNONCE de Windows avec beaucoup d'OU dont j'ai des droits administratifs au-dessus d'un emplacement simple (appel il OU=A). Nous avons beaucoup d'utilisateurs se déplacer dedans, et hors, derrière notre OU. Quand nous déplaçons un utilisateur « hors » de notre OU nous devons enlever tous les groupes qui existent dans le « membre » de l'étiquette dans ADUC lié à notre emplacement (OU=A). Tandis que c'est un processus simple quand le mouvement est pour 1 à 15 utilisateurs il obtient beaucoup plus de travail intensif quand nous devons déplacer 50 à 100 utilisateurs.  Nous recevons souvent ces demandes avec les utilisateurs énumérés dans un bilan d'Excel. Je voudrais script ce processus en tirant profit du bilan.  le

As toujours, là sont deux ou trois crochets. 1) le compte d'utilisateur peut avoir un groupe de sécurité d'une autre OU d'emplacement, qui devrait être ignorée parce que mon compte d'admin ne pourra pas l'enlever. 2) nous devons enlever les groupes globaux, de domaine de gens du pays, d'universel, et de distribution qui sont à notre OU d'emplacement (OU=A). N'importe quel groupe qui existe à mon OU d'emplacement (appel il OU=A) devra être extrait de code de removed.

The VB que j'ai trouvé est au-dessous de lui ne peux pas être la direction vous iriez, ainsi je suis ouvert de résumé Next

Const d'erreur du suggestions

* VBScript

On ADS_PROPERTY_DELETE = 4
Const objUser du
Set d'E_ADS_PROPERTY_NOT_FOUND = de &h8000500D
= _
(« LDAP de GetObject : //cn=cn=username, l'ou=A, l'ou=SITES, le dc=OURDC, le dc=OURDC, le dc=COM »)
arrMemberOf =
If du
d'objUser.GetEx (« memberOf ») Err.Number = E_ADS_PROPERTY_NOT_FOUND ce compte de/> Then
For du
WScript.Quit
End If
chaque groupe dans l'objGroup réglé de l'arrMemberOf
= le GetObject (« LDAP : / » et le
objGroup.PutEx ADS_PROPERTY_DELETE, le _
« membre » de groupe), le problème du
objGroup.SetInfo
Next

The de rangée (« cn=username, ou=A, ou=SITES, dc=OURDC, dc=OURDC, dc=COM ») avec ce code est qu'il est pour un utilisateur simple et ne pas appeler un dossier d'Excel avec une liste d'utilisateurs. En outre, je ne pense pas qu'il manipulera les groupes qui sont à une OU différente d'emplacement, mais je ne suis pas positif au sujet de this.

à long terme que je voudrais faire à ceci le noyau d'un plus grand manuscrit qui confirme le nom d'utilisateur avant qu'il enlève des groupes puis déplace les boîtes aux lettres de l'échange 2007 d'utilisateurs à un groupe de stockage d'échafaudage ou de possession, qui existe déjà (je peux compléter blancs si je peux obtenir les commandes et la syntaxe appropriées). espoir du

I j'ai expliqué le ce assez clairement.  Merci à l'avance de votre aide et conseil.  
class= de

Réponse : Script pour enlever des groupes du « membre » des groupes dans une liste de comptes d'utilisateur

j'ai changé le manuscrit en notation en dossier au lieu du rendement en console.
le dossier est sous c:\temp\shdrv.log
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 :
91 :
92 :
93 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
Option explicite

Const ADS_PROPERTY_DELETE = 4 
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000

faible parent, intRow, utilisateurs, utilisateur
Faible objDelGroup, objRootLDAP, objGroup, objUser, objOU, objmemberOf
Faible objParent, objWorkbook, objExcel, strValue, strMail, strDescription, strInfo, intgroupType, distinguishedName, strSAMAccountName
faible groupParentLdap, strName, strUser, strDNSDomain, strLDAP, strList, racine

Placer l'objFSO = le CreateObject (« Scripting.FileSystemObject »)
Placer objInputFile = objFSO.CreateTextFile (« c:\temp\shdrv.log », 2)

const ROOT_OU = « ou= »

'lire la liste utilisateurs de excellent le dossier
Placer l'objExcel = le CreateObject (« Excel.Application »)
Placer l'objWorkbook = l'objExcel.Workbooks.Open (" C:\temp\users _list.xls »)

intRow = 1
utilisateur = objExcel.Cells (intRow, 1).Value

Faire jusqu'à l'utilisateur = au ""
        si utilisateurs = puis ""
                utilisateurs = utilisateur
        autrement 
                utilisateurs = utilisateurs et « , » et utilisateur
        finir si
        
    intRow = intRow + 1
        utilisateur = objExcel.Cells (intRow, 1).Value
Boucle


Placer l'objRootLDAP = le GetObject (« LDAP : //RootDSE »)
strDNSDomain = objRootLDAP.Get (« DefaultNamingContext »)
racine = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
racine d'objInputFile.WriteLine

RecurseOUs GetObject (racine)

RecurseOUs secondaire (objOU)
        Faible objOUObject, strConnString
        Pour chaque objOUObject dans l'objOU
                Si UCase (laissé (objOUObject.Name, 3)) = « OU= » puis
                        strConnString = objOUObject.DistinguishedName
                        objInputFile.WriteLine strConnString
                        Placer ObjUser = GetObject (« LDAP : / » et strConnString)

                        CheckUser strConnString
                        RecurseOUs ObjUser
                        Finir si
        Après
Sous-marin d'extrémité

CheckUser secondaire (strConnString)
        Sur le résumé d'erreur après

        pour chaque utilisateur dans la fente (utilisateurs, « , ")
                objInputFile.WriteLine
                utilisateur d'objInputFile.WriteLine « :  » et utilisateur
                
                strUser = " cn= " et utilisateur et « , »
                strLDAP = " LDAP : /« et strUser et strConnString
                strLDAP d'objInputFile.WriteLine
                Placer l'objUser = le GetObject (le strLDAP)
                Si Err.Number = 0 puis
      
                        objParent réglé = GetObject (GetObject (objUser.Parent). Parent)
                        objParent.GetInfo
                        
                        le parent = remplacent (objParent.Name, « CN= », le "")
                        emplacement de parent d'objInputFile.WriteLine « :  » et parent
                        
                        objmemberOf  = objUser.GetEx (« memberOf »)
                        Pour chaque objGroup dans l'objmemberOf
                                objInputFile.WriteLine
                                groupe LDAP d'objInputFile.WriteLine « :  » et objGroup 
                                
                                Placer l'objGroup = le GetObject (« LDAP : / » et objGroup)
                                objGroup.GetInfo

                                strName = objGroup.Get (« nom »)
                                strSAMAccountName = objGroup.Get (« sAMAccountName »)
                                intgroupType = objGroup.Get (« groupType »)
                                distinguishedName = objGroup.Get (« distinguishedName »)
                                 
                                distinguishedName d'objInputFile.WriteLine « :  » et distinguishedName
                                nom d'objInputFile.WriteLine « :  » et strName
                                sAMAccountName d'objInputFile.WriteLine « :  » et strSAMAccountName
                                 
                                Portée de groupe de WScript.StdOut.Write « :  »
                                S'intGroupType ET ADS_GROUP_TYPE_LOCAL_GROUP alors
                                  objInputFile.WriteLine « gens du pays de domaine »
                                intGroupType d'ElseIf ET ADS_GROUP_TYPE_GLOBAL_GROUP alors
                                  objInputFile.WriteLine « global »
                                intGroupType d'ElseIf ET ADS_GROUP_TYPE_UNIVERSAL_GROUP alors
                                  objInputFile.WriteLine « universel »
                                Autrement
                                  objInputFile.WriteLine « inconnu »
                                Finir si
                                 
                                Type de groupe de WScript.StdOut.Write « :  »
                                S'intGroupType ET ADS_GROUP_TYPE_SECURITY_ENABLED alors
                                  objInputFile.WriteLine « groupe de sécurité »
                                Autrement
                                  objInputFile.WriteLine « groupe de distribution »
                                Finir si
                                 
                                objInputFile.WriteLine
                                objInputFile.WriteLine « ***** validant le ******** du Groupe d'utilisateurs [DÉBUT] »
                                objInputFile.WriteLine « recherche » et parent et « dans » et distinguishedName
                                
                                s'InStr (UCase (distinguishedName), UCase (parent)) > 0 puis
                                        objInputFile.WriteLine « groupe » et strName et « est sous le même emplacement que l'utilisateur » et l'utilisateur
                                        groupParentLdap = « LDAP : / » et ROOT_OU et « , » et strDNSDomain
                                        objInputFile.WriteLine « préparent pour enlever le groupe » et le strName et  « de » et le groupParentLdap
                                        Placer l'objDelGroup = le GetObject (le groupParentLdap)
                                        objDelGroup.Delete « groupe », « cn= » et strName                     
                                        objInputFile.WriteLine « groupe » et strName et « a été enlevé »
                                finir si 
                                
                                objInputFile.WriteLine « ***** validant le ******** du Groupe d'utilisateurs [EXTRÉMITÉ] »
                                objInputFile.WriteLine
                        Après
                Finir SI
        Après
Sous-marin d'extrémité

objInputFile.Close
WScript.Quit
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us