Tipi di proprietà

Esistono diversi tipi di proprietà che vengono utilizzati con gli oggetti directory. Nello schema Servizi di dominio Active Directory questi tipi di proprietà sono chiamati sintassi degli attributi. Per ulteriori informazioni sulle sintassi degli attributi e per un elenco di sintassi utilizzabili in Servizi di dominio Active Directory, vedere l'argomento relativo alle sintassi per gli attributi Active Directory in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).

Negli argomenti seguenti sono riportati esempi di codice che illustrano come leggere e scrivere tipi di proprietà utilizzando System.DirectoryServices:

Tipi di dati interpretati

Esistono due modi diversi per recuperare i valori delle proprietà dallo spazio dei nomi System.DirectoryServices. Il primo consiste nell'utilizzare i membri della proprietà Properties. L'altro consiste nell'utilizzare i membri dell'insieme ResultPropertyValueCollection che vengono ottenuti con la classe DirectorySearcher. Ognuno di questi modi restituisce oggetti generici il cui tipo effettivo di dati dipende dal tipo di dati dello schema della proprietà. La proprietà Properties restituisce lo stesso tipo di oggetto del metodo IADs.GetInfoEx. Per ulteriori informazioni sul metodo IADs.GetInfoEx, vedere l'argomento relativo a IADs::GetInfoEx in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese). La proprietà Item converte alcuni tipi di dati in tipi di dati .NET Framework. Nella tabella seguente vengono mostrati i tipi di schema Servizi di dominio Active Directory e i tipi di dati associati interpretati e non interpretati. Per ulteriori informazioni sul tipo di schema Servizi di dominio Active Directory o sul nome dell'interfaccia COM elencato nella tabella seguente, vedere gli argomenti relativi in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).

Tipo di schema Servizi di dominio Active Directory Tipo non interpretato (come restituito da Properties) Tipo interpretato (come restituito da ResultPropertyValueCollection)

Boolean

Boolean

Boolean

Enumeration

Int32

Int32

Enumeration (Delivery-Mechanism)

Int32

Int32

Enumeration (Export-Information-Level)

Int32

Int32

Enumeration (Preferred-Delivery-Method)

Int32

Int32

Integer

Int32

Int32

Interval

Un oggetto COM di cui può essere eseguito il cast a IADsLargeInteger.

Int64

LargeInteger

Un oggetto COM di cui può essere eseguito il cast a IADsLargeInteger.

Int64

Object(Access-Point)

Non supportate

Non supportate

Object(DN-Binary)

Un oggetto COM di cui può essere eseguito il cast a IADsDNWithBinary.

String contenente il nome distinto e i dati binari nel formato specificato da Object(DN-Binary).

Object(DN-String)

Un oggetto COM di cui può essere eseguito il cast a IADsDNWithString.

String contenente il nome distinto e i dati stringa nel formato specificato da Object(DN-String).

Object(DS-DN)

String

String

Object(OR-Name)

Un oggetto COM di cui può essere eseguito il cast a IADsDNWithBinary.

String contenente il nome distinto e i dati binari nel formato specificato da Object(DN-Binary).

Object(Presentation-Address)

String

String

Object(Replica-Link)

Byte[]

Byte[]

String(Generalized-Time)

DateTime

DateTime

String(IA5)

String

String

String(NT-Sec-Desc)

Un oggetto COM di cui può essere eseguito il cast a IADsSecurityDescriptor.

Byte[]

String(Numeric)

String

String

String(Object-Identifier)

String

String

String(Octet)

Byte[]

Byte[]

String(Printable)

String

String

String(Sid)

Byte[]

Byte[]

String(Teletex)

String

String

String(Unicode)

String

String

String(UTC-Time)

DateTime

DateTime

Interpretazione dei valori delle proprietà degli oggetti ADSI

Per alcuni tipi di sintassi di Servizi di dominio Active Directory, ad esempio LargeInteger, System.DirectoryServices restituisce il valore della proprietà come un oggetto COM. È necessario eseguire il cast di questo oggetto COM al tipo ADSI appropriato nel tipo di proprietà effetttivo. Ad esempio, la proprietà lastLogon appartiene alla sintassi Interval. System.DirectoryServices restituisce il valore della proprietà per una sintassi Interval come un oggetto COM che supporta l'interfaccia IADsLargeInteger. Per ulteriori informazioni su questi elementi, vedere gli argomenti relativi a LargeInteger, Interval, lADsLargeInteger e lastLogon in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).

Nell'esempio di codice C# riportato di seguito viene illustrato come ottenere l'interfaccia IADsLargeInteger dall'oggetto COM eseguendo il cast dell'oggetto COM a un oggetto ActiveDs.IADsLargeInteger. Se si sta sviluppando un'applicazione che utilizza oggetti nello spazio dei nomi ActiveDS, fare riferimento alla libreria dei tipi ActiveDS, activeds.tlb, al momento della compilazione e del collegamento dell'applicazione.

object obj = entry.Properties["lastLogon"];
ActiveDs.IADsLargeInteger largeIntADSI;
largeIntADSI = (ActiveDs.IADsLargeInteger)obj;

Nella tabella seguente sono elencati i tipi di sintassi restituiti da System.DirectoryServices come oggetti COM e le interfacce ADSI associate di ogni tipo di sintassi. Per ulteriori informazioni su un tipo di sintassi o interfaccia ADSI elencato nella tabella seguente, vedere l'argomento relativo in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).

Tipo di sintassi Interfaccia ADSI

Interval

IADsLargeInteger

LargeInteger

IADsLargeInteger

Object(DN-Binary)

IADsDNWithBinary

Object(DN-String)

IADsDNWithString

Object(OR-Name)

IADsDNWithBinary

String(NT-Sec-Desc)

IADsSecurityDescriptor

Nell'esempio di codice C# riportato di seguito viene illustrato come ottenere l'interfaccia appropriata per un oggetto ADSI COM. In questo esempio viene utilizzata l'eccezione InvalidCastException per determinare se il cast è valido.

static string GetADSIComObjectValue(object obj)
{
    if(obj.GetType().Name.Equals("__ComObject"))
    {
        /*
        Try IADsSecurityDescriptor. This is returned for the following AD 
        syntax type:

        String(NT-Sec-Desc) 
        */
        try
        {
            ActiveDs.IADsSecurityDescriptor secDesc;
            secDesc = (ActiveDs.IADsSecurityDescriptor)obj;
            return "IADsSecurityDescriptor:" + secDesc.Owner.ToString();
        }
        catch (System.InvalidCastException)
        {
        }

        /*
        Try IADsLargeInteger. This is returned for the following AD syntax 
        types:
        
        Interval
        LargeInteger
        */
        try
        {
            ActiveDs.IADsLargeInteger largeIntADSI;
            largeIntADSI = (ActiveDs.IADsLargeInteger)obj;
            Int64 largeInt = largeIntADSI.HighPart * 0x100000000;
            largeInt += largeIntADSI.LowPart;
            return "IADsLargeInteger:" + largeInt.ToString();
        }
        catch (System.InvalidCastException)
        {
        }

        /*
        Try IADsDNWithBinary. This is returned for the following AD syntax 
        types:
        
        Object(DN-Binary)
        Object(OR-Name)
        */
        try
        {
            ActiveDs.IADsDNWithBinary dnWithBinary;
            dnWithBinary = (ActiveDs.IADsDNWithBinary)obj;
            return "IADsDNWithBinary:" + 
                dnWithBinary.DNString + ":" + 
                dnWithBinary.BinaryValue.ToString();
        }
        catch (System.InvalidCastException)
        {
        }

        /*
        Try IADsDNWithString. This is returned for the following AD syntax 
        type:
        
        Object(DN-String)
        */
        try
        {
            ActiveDs.IADsDNWithString dnWithString;
            dnWithString = (ActiveDs.IADsDNWithString)obj;
            return "IADsDNWithString:" + 
                dnWithString.DNString + ":" + 
                dnWithString.StringValue;
        }
        catch (System.InvalidCastException)
        {
        }

        throw new System.ArgumentException("Unknown COM Object type.");
    }
    else
    {
        throw new System.ArgumentException("Object is not a COM Object.");
    }
}

Vedere anche

Riferimenti

System.DirectoryServices
DirectoryEntry
ResultPropertyValueCollection
DirectorySearcher

Concetti

Proprietà degli oggetti directory

Send comments about this topic to Microsoft.

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.