La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Gestire Active Directory con script ADSI (parte 1)

Presentazioni simili


Presentazione sul tema: "Gestire Active Directory con script ADSI (parte 1)"— Transcript della presentazione:

1 Gestire Active Directory con script ADSI (parte 1)

2 Script originalmente sviluppati da Dr. Holger Schwichtenberg

3 Agenda Le basi di ADSI Introduzione allarchitettura di ADSI Tool ADSI Operazioni tipiche con script ADSI Esempi commentati di uso di ADSI Creazione di user, group, organizational unit Modifica delle impostazioni utente Aggiunta di un utente ad un gruppo Query ADSI

4 Le basi di ADSI

5 Cosè ADSI? Componente COM per laccesso a diversi servizi di directory LDAP WinNT NDS Utilizzabile in script e programmi (COM e.NET) Versione attuale 2.5 Incluso in tutte le attuali versioni di Windows È un add-on per Windows NT 4 e Win9x ADSI SDK fornisce esempi e documentazione

6 Dove si utilizza ADSI? Con Windows Script Host (WSH) Con VBA (Word, Excel, Powerpoint...) VB 6 Tutti i linguaggi che possono usare COM (C++, C) Tutti i linguaggi.NET

7 Architettura ADSI ADSI Provider LDAP:// ADSI Provider WinNT:// ADSI Provider altro Active Directory Service Interface Rete AD Exchange NT4 NT5.x Altro System.DirectoryService Script COM Client.NET

8 Provider ADSI NT Lanmanager Windows NT 4.0 locale/domain Windows 2000 locale Windows XP locale Windows Server 2003 locale (Active Directory 2000/2003) Novell Netware/Directory Services Internet Information Server Metabase LDAP (Active Directory, ADAM, Microsoft Exchange, Lotus Notes, ecc.)

9 Operazioni tipiche con script ADSI

10 Basic ADSI Operations Accesso ai container e oggetti di AD Lettura di dati Modifica di dati Enumerazione di oggetti Spostamento di oggetti Creazione e cancellazione di oggetti

11 Accesso e lettura di attributi degli oggetti Determinazione del percorso LDAP LDAP://server01/CN=giorgio malusardi,OU=it,DC=firbolg,DC=com Acquisire loggetto nello script set obj = GetObject("LDAP://server01/CN=Giorgio Malusardi,OU=it,DC=firbolg,DC=com") Loggetto ha: Attributi (Proprietà): Dati che possono essere letti e scritti (es.: Displayname, TelephoneNumber) Metodi: Operazioni che si possono effettuare (es.: cancellare un oggetto)

12 Accesso e lettura di attributi degli oggetti Determinazione del percorso LDAP LDAP://server01/CN=giorgio malusardi,OU=it,DC=firbolg,DC=com Acquisire loggetto nello script set obj = GetObject("LDAP://server01/CN=Giorgio Malusardi,OU=it,DC=firbolg,DC=com") Loggetto ha: Attributi (Proprietà): Dati che possono essere letti e scritti (es.: Displayname, TelephoneNumber) Metodi: Operazioni che si possono effettuare (es.: cancellare un oggetto) Il nome del protocollo è case sentive

13 demo ADSI Edit

14 Accesso e lettura di attributi degli oggetti User PATH="LDAP://server01/CN=giorgio malusardi,OU=it,DC=firbolg,DC=com" Set u = GetObject(PATH) ' --- ADSI meta data WScript.echo "Name: " & u.name WScript.echo "Class: " & u.Class ' --- General property page WScript.echo "DisplayName: " & u.Fullname WScript.echo "Description: " & u.Description WScript.echo "TelephoneNumber: " & u.TelephoneNumber ' --- Account property page WScript.echo "NT4-Account Name: " & u.samAccountName

15 Oggetti ADSI vs oggetti ADS Organizational Unit Organizational Unit ou DisplayName ManagedBy ou DisplayName ManagedBy Name Class Filter Count LocalityName create() delete() user cn displayName sAMAccountName cn displayName sAMAccountName Name Class FullName FirstName SetPassword() User xxxx Organizational utnit it ADSI Active Directory Risorse Binding (Percorso LDAP) Rappresentazione

16 Come trovare il corretto nome delle proprietà Mappatura tra User Object e User Interface ibrary/en-us/ad/ad/ user_object_user_interface_mapping.asp Inserire un valore nella proprietà in MMC trovare la proprietà in ADSI Edit city l office physicalDeliveryOfficeName

17 Problemi con i Data type

18 Proprietà multivalore

19 Problemi con i Data type Proprietà multivalore Function ADSIGet(obj, attribut) ADSIGet = "" On Error Resume Next ADSIGet = obj.Get(attribut) If IsArray(ADSIGet) Then ADSIGet = Join(obj.Get(attribut), ";") End Function Wscript.echo ADSIGet(u,"OtherTelephone") Wscript.echo ADSIGet(u,"Url")

20 Problemi con i Data type Proprietà multivalore Function ADSIGet(obj, attribut) ADSIGet = "" On Error Resume Next ADSIGet = obj.Get(attribut) If IsArray(ADSIGet) Then ADSIGet = Join(obj.Get(attribut), ";") End Function Wscript.echo ADSIGet(u,"OtherTelephone") Wscript.echo ADSIGet(u,"Url")

21 Problemi con i Data type INTEGER8 (Integer a 64-Bit). Intervallo a 100 nano secondi da Proprietà multivalore Function ADSIGet(obj, attribut) ADSIGet = "" On Error Resume Next ADSIGet = obj.Get(attribut) If IsArray(ADSIGet) Then ADSIGet = Join(obj.Get(attribut), ";") End Function Wscript.echo ADSIGet(u,"OtherTelephone") Wscript.echo ADSIGet(u,"Url")

22 Problemi con i Data type INTEGER8 (Integer a 64-Bit). Intervallo a 100 nanosececondi da Proprietà multivalore Function ADSIGet(obj, attribut) ADSIGet = "" On Error Resume Next ADSIGet = obj.Get(attribut) If IsArray(ADSIGet) Then ADSIGet = Join(obj.Get(attribut), ";") End Function Wscript.echo ADSIGet(u,"OtherTelephone") Wscript.echo ADSIGet(u,"Url") Int8ToDate(u.Get("AccountExpires")) Int8ToDate(u.Get("lastLogon")) Int8ToDate(u.Get("lastLogoff")) Int8ToDate(u.Get("badPasswordTime")) Int8ToDate(u.Get("pwdLastSet"))

23 Un errore tipico Creare un oggetto con RDN Errato: objCON.Create("organizationalunit", "DEV") Corretto: objCON.Create("organizationalunit", "ou=DEV")

24 demo Leggere i dati di xxx

25 Modificare le proprietà User u.DisplayName = "giorgio malusardi" u.put "Description", "Evangelist" u.TelephoneNumber = " " u. Address = Dim tel(1) tel(0) = " " tel(1) = " " u.PutEx 2, "otherTelephone", tel u.SetInfo

26 Modificare le proprietà User u.DisplayName = "giorgio malusardi" u.put "Description", "Evangelist" u.TelephoneNumber = " " u. Address = Dim tel(1) tel(0) = " " tel(1) = " " u.PutEx 2, "otherTelephone", tel u.SetInfo 1 = Rimuove i valori 2 = Rimpiazza i valori 3 = Aggiunge i valori 4 = Cancella i valori

27 Enumerazione di oggetti Users Tutti gli user in un container Const PATH = "LDAP://server01/ OU=it,DC=firbolg,DC=com" Set c = GetObject(PATH) Wscript.Echo "# of Objects: " & c.Count For Each u In c WScript.echo u.ADsPath & " : " & u.Get("SAMAccountname") Next

28 Enumerazione di oggetti Users Tutti gli user in un container Const PATH = "LDAP://server01/ OU=it,DC=firbolg,DC=com" Set c = GetObject(PATH) Wscript.Echo "# of Objects: " & c.Count For Each u In c WScript.echo u.ADsPath & " : " & _ u.Get("SAMAccountname") Next c.Filter = Array("User", "Group")

29 Creazione di un oggettto OU Const CONTAINER = "LDAP://server01/DC=firbolg,DC=com" Const MANAGER = "CN=giorgio malusardi,OU=it,DC=firbolg,DC=com" Const DESC = "Firbolg - IT Managers" Const LOCALITY = "Milano" Const OU = "Managers" ' --- Get container Set objCON = GetObject(CONTAINER) ' --- Create new OU Set objOU = objCON.Create("organizationalunit", "ou=" & OU) ' --- Set properties objOU.LocalityName = LOCALITY objOU.Description = DESC objOU.Put "ManagedBy", MANAGER objOU.SetInfo

30 Creazione di un oggettto OU Const CONTAINER = "LDAP://server01/DC=firbolg,DC=com" Const MANAGER = "CN=giorgio malusardi,OU=it,DC=firbolg,DC=com" Const DESC = "Firbolg - IT Managers" Const LOCALITY = "Milano" Const OU = "Managers" ' --- Get container Set objCON = GetObject(CONTAINER) ' --- Create new OU Set objOU = objCON.Create("organizationalunit", "ou=" & OU) ' --- Set properties objOU.LocalityName = LOCALITY objOU.Description = DESC objOU.Put "ManagedBy", MANAGER objOU.SetInfo RDN completo, non solo il nome

31 Creazione di un oggetto User Function ADSIADS_CreateUser(CONTAINER, USER, PASSWORD) Dim c, u ' --- Bind to container Set c = GetObject(CONTAINER) ' --- Create user Set u = c.Create("user", "cn=" & USER) ' --- Set required properties u.Put "samAccountName", CStr(USER) u.SetInfo ' --- Set password WScript.echo "User has been created: " & u.ADsPath u.SetPassword PASSWORD WScript.echo "Password has been set!" ' --- Enable Account u.AccountDisabled = False u.SetInfo ' --- Return new user object Set ADSIADS_CreateUser = u End Function

32 Attributi utente ' --- Account Property Page ' UPN u.userPrincipalName = "giorgio malusardi" ' User must change password at next login u.pwdLastSet = 0 ' SmartCard required Const ADS_UF_SMARTCARD_REQUIRED = u.userAccountControl = u.userAccountControl OR ADS_UF_SMARTCARD_REQUIRED ' Account expires u.AccountExpirationDate = "01/01/2005" ' User cannot change password ' difficult!!! see demo ' --- Organization Property Page ' Manager: AD attribute "Manager", type "DN" u.manager = "cn=paolo rossi,OU=it,dc=firbolg,dc=com"

34 Muovere oggetti Muovere un oggetto in una diversa OU Const TARGETCONTAINER = "LDAP://server01/ou=Managers,DC=firbolg,DC=com" Const SOURCEOBJEKT = "LDAP://server01/cn=giorgio malusardi,OU=it,DC=firbolg,DC=com" Const TARGETRDN = "cn=giorgio malusardi" Dim objContainer ' As IADsContainer Set objContainer = GetObject(TARGETCONTAINER) objContainer.MoveHere SOURCEOBJEKT, TARGETRDN WScript.Echo "User Moved" Si puo usare per RINOMINARE oggetti

35 demo Creare utenti da un database

36 Architettura ADSI Script COM ADSI Provider LDAP:// ADSI Provider WinNT:// ADSI Provider NDS:// Active Directory Service Interface Rete AD Exchange NT4 NT5.x Altro OLE DB Provider per ADSI OLE DB Provider SQL OLE DB Provider Altro OLE DB Rete ActiveX Data Object (ADO) SQL Server Altro DB Read/Write Read only

37 Sintassi delle query ADSI ADO su ADSI usa un OLE DB-Provider Solo per LDAP Provider Read-only Sintassi LDAP ( LDAP Search Filter, RFC 2254) ;(&(obje ctCategory=person)(objectClass=user)(name=f *));name,adspath" Sintassi SQL "Select adspath,SamAccountname from 'LDAP://server01/dc=firbolg,dc=com' where objectclass='user' and objectCategory='person' and name = 'f*'"

38 Sintassi delle query LDAP Operatori: AND: e commerciale (&) OR: barra verticale (|) NOT: punto esclamativo (!) Esiste il valore: (!(MyCorpSpecial=*) Comparazione: =, = > e < non sono consentiti (&(Attribute>=Value)(!(Attribute=Value)))

39 Sintassi delle query LDAP Operatori: AND: e commerciale (&) OR: barra verticale (|) NOT: punto esclamativo (!) Esiste il valore: (!(MyCorpSpecial=*) Comparazione: =, = > e < non sono consentiti (&(Attribute>=Value)(!(Attribute=Value))) Generare query con "Saved Queries" nella console Windows Server 2003 "AD Users and Computers"

40 Alcuni esempi di query LDAP Tutti gli oggetti computer senza descrizione: (&(objectCategory=computer)(!description=*)) Tutti gli utenti in lockout (&(objectCategory=person)(objectClass=user) (userAccountControl: :=2)) Tutti gli utenti con impostato "Password Never Expires" (&(objectCategory=person)(objectClass=user) (userAccountControl: :=655 36))

41 Alcuni esempi di query LDAP Utenti che non hanno fatto logon negli ultimi x giorni d = DateAdd("h", -days, Now()) : i = DateToInt8(d)(&(objectCategory=person)(ob jectClass=user)(lastLogon<=" & i & ")) Utenti che non hanno cambiato la password negli utlimi x giorni &(objectCategory=person)(objectClass=user )(pwdLastSet<=" & i & ")) Utenti creati dopo una certa data (es. 11/10/2004) &objectCategory=person)(objectClass=user) (whenCreated>= Z))"

42 Risorse della Community Community Resources Most Valuable Professional (MVP) Newsgroups /newsgroups/en-us/default.aspx /newsgroups/en-us/default.aspx User Groups default.mspx default.mspx

43 © Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Scaricare ppt "Gestire Active Directory con script ADSI (parte 1)"

Presentazioni simili


Annunci Google