Condividi tramite


Tipi di proprietà

Con gli oggetti di directory vengono utilizzati diversi tipi di proprietà. Nello schema di Active Directory, questi tipi di proprietà vengono denominati sintassi di attributo. Per ulteriori informazioni sulle sintassi di attributo e un elenco delle sintassi di attributo utilizzabili in Active Directory, vedere l'argomento relativo alle sintassi per gli attributi di Active Directory in MSDN Library all'indirizzo https://msdn.microsoft.com/libraryadschema.syntaxes (informazioni in lingua inglese).

Negli argomenti seguenti vengono forniti esempi di codice in cui viene illustrato come leggere e scrivere i tipi di proprietà utilizzando System.DirectoryServices:

Tipi di dati interpretati

Per recuperare i valori delle proprietà dallo spazio dei nomi System.DirectoryServices sono disponibili due modi diversi. Il primo consiste nell'utilizzo dei membri della proprietà Properties. L'altro consiste nell'utilizzo dei membri dell'insieme ResultPropertyValueCollection ottenuti con la classe DirectorySearcher. Ognuno di questi restituirà oggetti generici i cui tipi di dati effettivi dipendono dal tipo di dati dello schema per la proprietà. La proprietà Properties restituirà 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://msdn.microsoft.com/library (informazioni in lingua inglese). Alcuni tipi di dati verranno convertiti dalla proprietà Item in tipi di dati .NET Framework. Nella tabella seguente vengono illustrati i tipi di schema di Active Directory e i tipi di dati associati, interpretati e non interpretati. Per ulteriori informazioni su un tipo di schema di Active Directory o un nome di interfaccia COM incluso nella tabella seguente, vedere il relativo argomento in MSDN Library all'indirizzo https://msdn.microsoft.com/library (informazioni in lingua inglese).

Tipo di schema di Active Directory Tipo non interpretato (restituito da Properties) Tipo interpretato (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

Oggetto COM di cui è possibile eseguire il cast a IADsLargeInteger.

Int64

LargeInteger

Oggetto COM di cui è possibile eseguire il cast a IADsLargeInteger.

Int64

Object(Access-Point)

Non supportato

Non supportato

Object(DN-Binary)

Oggetto COM di cui è possibile eseguire il cast a IADsDNWithBinary.

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

Object(DN-String)

Oggetto COM di cui è possibile eseguire il cast a IADsDNWithString.

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

Object(DS-DN)

String

String

Object(OR-Name)

Oggetto COM di cui è possibile eseguire il cast a IADsDNWithBinary.

String contenente nome distinto e 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)

Oggetto COM di cui è possibile eseguire 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

T:System.DateTime

Interpretazione dei valori delle proprietà di oggetti ADSI

Per alcuni tipi di sintassi di Active Directory, ad esempio LargeIntegeradschema.s_largeinteger, System.DirectoryServices restituirà il valore di proprietà sotto forma di oggetto COM. Per ottenere il tipo di proprietà effettivo è necessario eseguire il cast di tale oggetto COM al tipo ADSI appropriato. La proprietà lastLogon, ad esempio, appartiene alla sintassi Interval. System.DirectoryServices restituirà il valore di proprietà per una sintassi Interval sotto forma di oggetto COM in grado di supportare l'interfaccia IADsLargeInteger. Per ulteriori informazioni su questi elementi, vedere gli argomenti relativi a LargeInteger, Interval, IADsLargeInteger e lastLogon in MSDN Library all'indirizzo https://msdn.microsoft.com/library (informazioni in lingua inglese).

Nell'esempio C# seguente viene illustrato come ottenere l'interfaccia IADsLargeInteger dall'oggetto COM eseguendo il cast dell'oggetto COM a un oggetto ActiveDs.IADsLargeInteger. Se si sviluppa un'applicazione che utilizza oggetti nello spazio dei nomi ActiveDS, fare riferimento alla libreria dei tipi ActiveDS, activeds.tlb, durante la compilazione e il 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 informazioni su un tipo di sintassi o un'interfaccia ADSI inclusa nella tabella seguente, vedere il relativo argomento in MSDN Library all'indirizzo https://msdn.microsoft.com/library (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 C# seguente viene illustrato come ottenere l'interfaccia appropriata per un oggetto COM ADSI. Nell'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.");
    }
}