http://digilander.libero.it/Cenati

Cross-Reference gruppi/utenti

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript |

 

 

 

 

 

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

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript