http://digilander.libero.it/Cenati Cross-Reference gruppi/utenti |
|
|
||
|
Creare una matrice con userID degli utenti e i loro gruppi di appartenenza Periodicamente mi viene richiesto di controllare la corretta appartenenza ai gruppi degli utenti della rete. In altre parole, per ogni utente devo verificare che appartenga ai gruppi ai quali deve appartenere e che invece non appartenga a quelli sbagliati. Alcune applicazioni sono tipiche di un ufficio e non devono essere utilizzate o utilizzabili da elementi di altri uffici. Oppure semplicemente solo il personale di un certo grado può accedere a determinate informazioni. Nulla di segreto, ma ad esempio solo alcune persone possono mettere le mani sulle timbrature orarie del personale, mentre solo altre possono usare i programmi di contabilità. Windows NT mette a disposizione alcune utility per visualizzare e stampare i profili degli utenti, ma con questi programmi non riuscivo ad avere un colpo d'occhio utile per i miei controlli. Dopo aver scritto i programmi per chiedere all'Active Directory l'elenco degli utenti e dei loro gruppi, ho pensato che non era poi così difficile metterli insieme per creare una tabella in excel con gli utenti sulle righe ed i gruppi nelle colonne. Ed ovviamente un segno nella cella in cui si incrociano, se l'utente appartiene a quel gruppo. Se quindi andate a vedere gli altri script, più lineari, vedrete che quello qui sotto è solo la rielaborazione di cose già viste. I nomi dei gruppi, restituiti da ADSI, vengono memorizzati in un vettore strGruppi(i) e scritti nel foglio excel partendo dalla cella b1 e continuando nella riga con c1, d1, ecc. Terminata questa parte, comincio a chiedere all'Active Directory gli identificativi degli utenti. E li scrivo nella prima colonna, partendo dalla riga 2 e scendendo. Per ogni utente chiedo ciascun gruppo di appartenenza e lo confronto con il vettore che mi ero messo da parte ( "strGruppi( )" ). Quando coincide, metto un asterisco nella cella corrispondente. Nell'ultima colonna (anzi, in una colonna dopo quella che contiene il nome dell'ultimo gruppo) metto il nome per esteso dell'utente, in modo che sia più evidente capire di chi si tratta nel caso di userID poco chiare. L'ultimo blocco del programma seleziona la prima riga, contenente i nomi dei gruppi, e la mette in verticale, cioè con un orientamento del testo di 90 gradi. Poi chiede ad excel di formattare automaticamente l'altezza delle righe e la larghezza delle colonne. Infine, selezionando la casella A1, termina il programma. Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script.
'************************************************ ' File: Xref Gruppi-Utenti.vbs ' Autore: Giovanni Cenati ' Visualizza la cross reference dei gruppi ' e degli utenti del dominio. ' http://digilander.libero.it/Cenati ' Codice vbs liberamente utilizzabile citando il sito. '************************************************ Set WshShell = WScript.CreateObject("WScript.Shell") Dim strGruppo(200) ' Ottiene il nome del dominio strDomain = WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") Conferma = msgbox ("Creazione del file excel utenti/gruppi. Continuare?"_ ,vbyesno, "Cross Reference Gruppi-Utenti") if Conferma =vbno then wscript.quit 'Se premuto annulla Set objDomain = GetObject("WinNT://" & strDomain) objDomain.Filter = Array("group") 'EXCEL: crea oggetto, lo rende visibile, aggiunge un foglio di lavoro. Dim oXL Set oXL = WScript.CreateObject("Excel.Application") oXL.Visible = TRUE oXL.WorkBooks.Add ' Crea la lista dei gruppi da due in su, ' la memorizza in un array e la scrive in excel oXL.Cells(1, 1).Value = Date i=1 For Each objGroup In objDomain i=i+1 'Inizia dalla colonna 2 a scrivere i nomi dei gruppo strGruppo(i)= objGroup.Name oXL.Cells(1, i).Value = strGruppo(i) next intNumeroGruppi= i 'Qui memorizzo il numero dei gruppi che ho trovato objDomain.Filter = Array("user") Riga=2 'Gli utenti comincio a scriverli dalla riga 2 in poi. for each objUser in objDomain oXl.cells(Riga,1).Value = objUser.Name 'Userid nella prima colonna for each objGroup in objUser.groups 'Per ogni gruppo di appartenenza dell'utente... for i=2 to intNumeroGruppi if objGroup.Name = strGruppo(i) then oXL.Cells(Riga, i).value="*" next next oXl.cells(Riga,intNumeroGruppi+1).Value = objUser.Fullname 'mette il nome completo nell'ultima colonna Riga=Riga+1 next oXL.Range(oXL.cells(1,2),oXL.cells(1,intNumeroGruppi)).Select oXL.Selection.Orientation = 90 oXL.Selection.Columns.AutoFit oXL.Selection.Rows.AutoFit oXL.Range("A1").Select msgbox "Cross Reference Gruppi-Utenti: Fine lavoro", ,"Xref Gruppi-Utenti" '*** Fine Programma - Xref Gruppi-Utenti.vbs Cenati Giovanni |
||
© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com
|