Gestire Active Directory con script ADSI (parte 1)

Slides:



Advertisements
Presentazioni simili
Gestire Active Directory da linea di comando
Advertisements

© 2010 Colt Telecom Group Limited. All rights reserved. Cloud Computing Lapproccio Colt Dionigi Faccedna.
Teoria e Tecniche del Riconoscimento
Interfacce Java.
Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
Introduzione ad Active Directory
Recovery e Troubleshooting di Active Directory Renato Francesco Giorgini
Services For Unix 3.5 Lintegrazione di piattaforme e applicazioni UNIX con Windows Server 2003 Lintegrazione di piattaforme e applicazioni UNIX con Windows.
1 Windows SharePoint 2003 Products & Technologies – Overview funzionale Marco Bellinaso Senior trainer & consultant Code Architects S.r.l. Web:
Luca Bianchi Windows Development Day Bologna 28 gennaio 2005 SQL Server Desktop Engine (MSDE) & SQL Server 2005 Express.
Modalità di ricerca semantica nelle Biblioteche digitali Maria Teresa Biagetti DIPARTIMENTO DI SCIENZE DOCUMENTARIE LINGUISTICO-FILOLOGICHE E GEOGRAFICHE.
Lez. 10 (10/11) - PBElementi di Programmazione1 Lezione 10 Funzioni e Moduli Macro Analisi del flusso Esercizi.
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
1.E un algoritmo ricorsivo: Tutti le istanze di oggetti raggiungibili da un oggetto persistente diventano anchessi persistenti.
E Windows SharePoint Services 2.0 Ivan Renesto Overview how to use Windows SharePoint Services.
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
Microsoft Robotics Studio Marco Petrucco Microsoft Student Partner - Udine.
EJB Enterprise Java Beans B. Pernici. Approccio Java.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Corso di Formazione Sodalia – Febbraio 2001 – Modulo Web Programming Tomcat configuration.
prompt> java SumAverage
Directory services Directory offline –Elenchi telefonici –Guide TV –Cataloghi acquisti Directory online –Application specific (lotus notes, MS Exchange.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
Metadati gestionali e amministrativi per oggetti digitali nativi Antonio Scolari Seminario nazionale sui metadati Roma, 3 aprile 2001.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Constraints.
Componenti dell’architettura Oracle
SQL Server 2012 LocalDB.
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Filtered Index and Statistics Filtered Indexes Sergio Govoni
Internet Explorer 8.0: Gestione centralizzata tramite Group Policy
Project Review byNight byNight December 6th, 2011.
WPF per il client Desktop
Fabio Cozzolino Vito Arconzo
Attribution-NonCommercial-ShareAlike Le novità
Attribution-NonCommercial-ShareAlike Le novità
Scoprirete che su Office non si può solo contare ma anche sviluppare.
Installazione di Drupal su Linux (sistemista) Installazione step-by-step e note.
IIS7 Media Services Piergiorgio Malusardi IT Pro Evangelist
VB.NET Sviluppo Applicazioni Desktop
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
SQL Server 2005 Sicurezza Davide Mauri Factory Software
| PierGiorgio Malusardi | | Scripting WMI per la gestione dei sistemi Windows Server 2003.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Project Review byNight byNight December 21th, 2011.
Project Review byNight byNight December 6th, 2011.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Project Review byNight byNight December 5th, 2011.
Giovedì 17 Aprile 2008 Heroes {Community} Launch Giovedì 17 Aprile 2008.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Analysis and Development of Functions in REST Logic: Application to the «DataView» Web App UNIVERSITA’ DEGLI STUDI DI MODENA E REGGIO EMILIA DIPARTIMENTO.
Collection & Generics in Java
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 - Protocolli del Web Ernesto Damiani Lezione 3 – Esempi HTTP.
CREAZIONE UTENTE SU DATATOP. CREAZIONE UTENTE Andate su //datatop.di.unipi.it/webdb Login come utente: webdb password: ****** Administer -> User Manager.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
Azure: Mobile Services e Notification Hub ANDREA GIUNTA.
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Nuove funzionalitA’ e caratteristiche del linguaggio
PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005 OpenSourceOpenSourceOpenSourceOpenSource e ProprietarieProprietarieProprietarieProprietarie.
Project Cerberus : Portale per la Gestione dei Server
Transcript della presentazione:

Gestire Active Directory con script ADSI (parte 1)

Script originalmente sviluppati da Dr. Holger Schwichtenberg

Agenda Le basi di ADSI Operazioni tipiche con script ADSI Introduzione all’architettura 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

Le basi di ADSI

Cos‘è ADSI? Componente COM per l‘accesso 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

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

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

Provider ADSI NT Lanmanager Novell Netware/Directory Services 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.)

Operazioni tipiche con script ADSI

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

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

Accesso e lettura di attributi degli oggetti Determinazione del percorso LDAP LDAP://server01/CN=giorgio malusardi,OU=it,DC=firbolg,DC=com Acquisire l‘oggetto nello script set obj = GetObject("LDAP://server01/CN=Giorgio Malusardi,OU=it,DC=firbolg,DC=com") L‘oggetto 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

demo ADSI Edit

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

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

Come trovare il corretto nome delle proprietà Mappatura tra User Object e User Interface http://msdn.microsoft.com/library/default.asp?url=/library/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

Problemi con i Data type

Problemi con i Data type Proprietà multivalore

Problemi con i Data type 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") Proprietà multivalore

Problemi con i Data type 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") Proprietà multivalore

Problemi con i Data type 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") Proprietà multivalore INTEGER8 (Integer a 64-Bit). Intervallo a 100 nano secondi da 1.1.1601

Problemi con i Data type 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") Proprietà multivalore INTEGER8 (Integer a 64-Bit). Intervallo a 100 nanosececondi da 1.1.1601 Int8ToDate(u.Get("AccountExpires")) Int8ToDate(u.Get("lastLogon")) Int8ToDate(u.Get("lastLogoff")) Int8ToDate(u.Get("badPasswordTime")) Int8ToDate(u.Get("pwdLastSet"))

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

demo Leggere i dati di xxx

Modificare le proprietà User u.DisplayName = "giorgio malusardi" u.put "Description", "Evangelist" u.TelephoneNumber = "++39 2 70392020" u.EmailAddress = "pimalusa@firbolg.org" Dim tel(1) tel(0) = "++39 2 70392020" tel(1) = "++39 2 70397000" u.PutEx 2, "otherTelephone", tel u.SetInfo

Modificare le proprietà User u.DisplayName = "giorgio malusardi" u.put "Description", "Evangelist" u.TelephoneNumber = "++39 2 70392020" u.EmailAddress = "pimalusa@firbolg.org" Dim tel(1) tel(0) = "++39 2 70392020" tel(1) = "++39 2 70397000" u.PutEx 2, "otherTelephone", tel u.SetInfo 1 = Rimuove i valori 2 = Rimpiazza i valori 3 = Aggiunge i valori 4 = Cancella i valori

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

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")

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

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

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 ' --- Return new user object Set ADSIADS_CreateUser = u End Function

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 = 262144 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"

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"

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

demo Creare utenti da un database

Architettura ADSI Script COM Read only ActiveX Data Object (ADO) 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 ActiveX Data Object (ADO) SQL Server Altro DB Read/Write Read only

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) <LDAP://server01/dc=firbolg,dc=com>;(&(objectCategory=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*'"

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)))

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"

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

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)(objectClass=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>=20041110000000.0Z))"

Risorse della Community Community Resources http://www.microsoft.com/communities/default.mspx Most Valuable Professional (MVP) http://www.microsoft.com/communities/mvp Newsgroups http://communities2.microsoft.com/communities /newsgroups/en-us/default.aspx User Groups http://www.microsoft.com/communities/usergroups default.mspx

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