WSH ADSI – Estrarre da Active Directory informazioni sugli account computer
Vi mostrerò come impostare e modificare lo script List All Computers And Users Within An OU And Subous al fine di ottenere una lista selettiva degli account computer contenuti in Active Directory associando ad essi anche altre informazioni come Sistema Operativo, Service Pack, Descrizione oggetto, data di creazione/modifica, ecc.
Introduzione
List All Computers And Users Within An OU And Subous permette di estrapolare una lista testuale di tutti gli oggetti di tipo computer/utente che si trovano all’interno di una unità organizzativa di Active Directory. Nello specifico la cosa più interessante di questo script è che permette di impostare il livello di ricorsività della ricerca, mi riferisco al numero di sottolivelli (sotto-unità organizzative) nei quali esso si preoccuperà di ricercare gli oggetti, questa proprietà permette di rendere la ricerca abbastanza selettiva.
La seguente immagine mostra l'attuale output dello script
Quali sono gli altri attributi che, in aggiunta al semplice nome computer, possiamo includere nella lista di cui sopra?
Tabella tratta da http://www.microsoft.com/technet/scriptcenter/guide/sas_srv_wcib.mspx?mfr=true
Impostare lo scope per la ricerca degli oggetti computer
Aprite lo script in modifica
Const ADS_SCOPE_SUBTREE = valore_numerico
è la variabile con la quale impostare la profondità della ricerca, cioè il numero di sottolivelli a partire dal Base Dn (la prossima variabile) nei quali verrà effettuata la ricerca degli oggetti. Questa variabile è utile nel caso in cui vi interessi estrarre soltanto una parte di tutti i computer contenuti in un albero di unità organizzative. In qualsiasi altro caso è sufficiente impostare questa variabile ad un numero abbastanza alto da garantire l'elaborazione di tutte le unità organizzative.
"SELECT Name FROM 'LDAP://ou=Computer,ou=Radice,dc=dominio,dc=lan' WHERE objectCategory='Computer'"
rappresenta il percorso LDAP che lo script utilizzerà come punto di partenza (base dn) per l'estrazione degli account. Per chi non lo sapesse OU serve a dichiarare il nome di una Organizational Unit (unità organizzativa) e DC serve a dichiarare le Domain Component (le componenti del nome di dominio). Di seguito potete vedere la struttura di un dominio fittizio da prendere come riferimento per l'impostazione delle due variabili appena citate:
Se volete approfondire l'argomento LDAP vi consiglio di leggere LDAP per Amministratori Active Directory - LDAP for Active Directory Administrators
Dopo queste due semplici modifiche List All Computers And Users Within An OU And Subous sarebbe già pronto per essere eseguito ma non farebbe altro che generare il semplice elenco dei computer contenuti nel base dn impostato.
Aggiungere ulteriori attributi da riportare nell'output
L'immagine seguente evidenzia le due porzioni di codice da modificare al fine di includere nell'output ulteriori attributi
SELCT Name FROM
Seleziona l'attributo Name per l'estrazione.
Se volessimo aggiungere operatingSystem e whenChanged tale pezzo di codice diventerebbe
SELECT Name, operatingSystem, whenChanged FROM
Di scrivere l'output se ne occupa invece il comando
wscript.Echo objRecordSet.Fields("Name").Value
il quale a questo punto può essere integrato con i nuovi attributi e diventare quindi
wscript.Echo objRecordSet.Fields("Name").Value & vbTab & objRecordSet.Fields("operatingSystem").Value & vbTab & objRecordSet.Fields("whenChanged").Value
vbTab serve a fare in modo che nell'output i tre attributi vengano separati tra di loro per mezzo di una tabulazione, piuttosto comodo nel caso in cui vogliate effettuare una importazione del risultato in Microsoft Excel
N.B: non fate caso al carattere underscore che ho utilizzato nell'immagine, serve soltanto a rendere più leggibile il codice sorgente andando a capo, in realtà potete ometterlo e scrivere tutto su un'unica riga.
Salvate e chiudete la modifica dello script quando pensate che sia corretto ed adeguato alle vostre esigenze.
Eseguire lo script
Questo script (per semplicità) è stato pensato per essere eseguito attraverso il motore cscript.exe, di conseguenza dovrete utilizzare il prompt dei comandi
cscript list_all_computers_and_users_within_an_ou_and_subous.vbs > computers.txt
la parte finale > computers.txt si occuperà di reindirizzare completamente l'output dello script all'interno del file di testo "computers.txt" (se non esiste verrà creato)
Ed ecco di seguito il risultato, nel mio caso è piuttosto facile scoprire che PC03 e PC10 non vengono accesi da qualche mese.
Autore
Mirko Iodice
mirko -at- notageek (.dot) it
Suggeriti dall'autore
- LDAP per Amministratori Active Directory - LDAP for Active Directory Administrators
- WSH - Windows Scripting Host
Print This • Email this • Twit This! • Add to del.icio.us • Share on Facebook • Digg This! • Stumble It! • AddThis! • Share on Segnalo Alice • Share on OKNotizie
4 Marzo 2010 alle 13:13
Ciao, c'è un modo per tirarsi fuori anche il campo dei gruppi associati alle varie utenze??
Grazie
4 Marzo 2010 alle 21:36
@ Daniele
Ciao,
l'ho pubblicato qui: List All Users Membership Within An OU And SubOUs
Fammi sapere.
31 Marzo 2010 alle 11:01
Ciao Mirko,
innanzitutto grazie per la risposta.
Non ho molto feeling con il vbs, ho provato lo script per l'estrazione anche dei gruppi ma non riesco a capire con che valore occorre modificare il seguente parametro :
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Daniele
31 Marzo 2010 alle 19:31
@ Daniele
Non è quello il parametro da modificare ma questo:
Il valore 2 va cambiato ed impostato secondo le tue esigenze.
Va modificato anche il percorso LDAP della seguente query che trovi a riga 19 dello script:
Active Directory ha una struttura gerarchica "ad albero" quindi quando vogliamo fare una ricerca all'interno di essa dobbiamo identificare principalmente due variabili: il percorso esatto da cui far partire la ricerca (il percorso LDAP di cui sopra) ed il numero di sottolivelli da considerare e quindi da includere nell'ambito della ricerca (la variabile ADS_SCOPE_SUBTREE che mi hai chiesto).
Facciamo finta che il tuo dominio Active Directory abbia una organizzazione piuttosto semplice (poche unità organizzative nidificate) e che si chiami "miodominio.lan", se non hai particolari esigenze ma vuoi semplicemente fare una ricerca in tutto il dominio è sufficente impostare:
e
30 è un numero che ho scelto a caso ma per una organizzazione semplice dovrebbe bastare poiché sta a significare che la ricerca avrà una "profondità" massima di 30 sottolivelli.
2 Aprile 2010 alle 9:10
Ciao Mirko,
è possibile contattarti privatamente?
Daniele
2 Aprile 2010 alle 9:48
@ Daniele
Certo, se guardi nel box in alto a destra di questa pagina (la sezione "Autore") trovi la mia email: mirko -at- notageek (.dot) it