- notageek.it di Mirko Iodice - http://www.notageek.it -

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 [1] 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 [1] 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

lcl_admins_05.PNG [2]


Quali sono gli altri attributi che, in aggiunta al semplice nome computer, possiamo includere nella lista di cui sopra?

computer_attributes.PNG [3]


Tabella tratta da http://www.microsoft.com/technet/scriptcenter/guide/sas_srv_wcib.mspx?mfr=true [4]

Impostare lo scope per la ricerca degli oggetti computer

Aprite lo script in modifica

lcl_admins_02.PNG [5]


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 [6] 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:

lcl_admins_03.PNG [7]


Se volete approfondire l'argomento LDAP vi consiglio di leggere LDAP per Amministratori Active Directory - LDAP for Active Directory Administrators [8]

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

computer_attributes2.PNG [9]


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

computer_attributes3.PNG [10]


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)

computer_attributes1.PNG [11]


Ed ecco di seguito il risultato, nel mio caso è piuttosto facile scoprire che PC03 e PC10 non vengono accesi da qualche mese.

computer_attributes4.PNG [12]


Autore

Mirko Iodice
mirko -at- notageek (.dot) it

Suggeriti dall'autore