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

lcl_admins_05.PNG


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

computer_attributes.PNG


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

lcl_admins_02.PNG


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:

lcl_admins_03.PNG


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

computer_attributes2.PNG


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


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


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


Autore

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

Suggeriti dall'autore

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

Post Metadata

Data
16 Marzo 2008

Autore
Mirko

Categorie

6 commenti a “WSH ADSI – Estrarre da Active Directory informazioni sugli account computer”




  1. Ciao, c'è un modo per tirarsi fuori anche il campo dei gruppi associati alle varie utenze??

    Grazie

    Rispondi



      • 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

        Rispondi



        • @ Daniele
          Non è quello il parametro da modificare ma questo:

          Const ADS_SCOPE_SUBTREE = 2

          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:

          "SELECT Name,memberOf FROM 'LDAP://ou=Users,ou=corp,dc=domain,dc=com' WHERE objectCategory='User'"

          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:

          "SELECT Name,memberOf FROM 'LDAP://dc=miodominio,dc=lan' WHERE objectCategory='User'"

          e

          Const ADS_SCOPE_SUBTREE = 30

          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.

          Rispondi



  2. Ciao Mirko,
    è possibile contattarti privatamente?

    Daniele

    Rispondi



    • @ 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

      Rispondi



Lascia un commento