Tidak bisa mendapatkan Atribut AD menggunakan DirectoryEntry (Atribut LAPS)

Saya mengalami masalah ketika saya tidak dapat mengambil atribut AD melalui DirectoryEntry. Saya bisa mendapatkannya melalui DirectorySearcher, tapi saya tidak bisa mendapatkan atau mengaturnya melalui DirectoryEntry.

Atribut yang dibutuhkan adalah ms-Mcs-AdmPwdExpirationTime yang berisi NT TimeStamp, saya telah membaca dan menulis atribut ini.

DirectoryEntry Kesalahan C# di konsol

Kesalahan HRESULT E_FAIL telah dikembalikan dari panggilan ke komponen COM

Saya sudah mencoba menggunakan yang berikut ini namun masih tidak dapat mengambil atributnya.

RefreshCache (string[] propertyNames);

Sunting:

ComputerPrincipal comp = ComputerPrincipal.FindByIdentity(ctx, MachineName);
DirectoryEntry de = (DirectoryEntry)comp.GetUnderlyingObject();
if (de.Properties.Contains("ms-Mcs-AdmPwd") == true)
{
    string Password = (String)de.Properties["ms-Mcs-AdmPwd"][0];
    Password_Input.Text = Password;
    DateTime NTTime = DateTime.FromFileTime(ConvertLargeIntegerToLong(de.Properties["ms-Mcs-AdmPwdExpirationTime"].Value));
    PasswordExpiry_Value.Text = NTTime.ToString("dd/MM/yyyy hh:mm:ss");
    Console.WriteLine();
}
else
{
    Password_Input.Text = "Password not set by LAPS";
}
// down the bottom of the .cs
private static long ConvertLargeIntegerToLong(object largeInteger)
{
    var type = largeInteger.GetType();
    var highPart = Convert.ToInt32(type.InvokeMember("HighPart", BindingFlags.GetProperty, null, largeInteger, null));
    var lowPart = Convert.ToInt32(type.InvokeMember("LowPart", BindingFlags.GetProperty, null, largeInteger, null));
    return (long)highPart << 32 | (uint)lowPart;
}

person FingerlessGloves    schedule 03.12.2018    source sumber
comment
apakah Anda mencoba mengatur atribut atau hanya membacanya? bisakah kita melihat kode kesalahan ini?   -  person Shovers_    schedule 03.12.2018
comment
Saya menemukan cara untuk membacanya, tetapi akan berguna jika saya juga bisa mengaturnya. Lihat Posting ke kode yang diperbarui.   -  person FingerlessGloves    schedule 03.12.2018


Jawaban (1)


Untuk mengatur properti di masa lalu saya telah menggunakan ini untuk entri direktori

Jalur adalah jalur LDAP lengkap ke objek tetapi Anda dapat mengganti de dengan contoh di atas. Mudah-mudahan itu cukup untuk menyelesaikan masalah Anda atau setidaknya mengarahkan Anda ke suatu arah.

Ada juga beberapa jawaban lain di sini tentang mengapa Anda mungkin mendapatkan kesalahan itu.

Dan di sini

 public Boolean set_AD_property(string attribute_, string new_value)
    {
        this.AD_object = new DirectoryEntry(this.path_);
        this.AD_object.Properties[attribute_].Value = new_value;
        try
        {
            this.AD_object.CommitChanges();
            this.AD_object.Close();
            return true;
        }
        catch (System.Exception)
        {
            return false;
        }
    }

Dan untuk membaca:

  public object get_AD_property(string attribute_)
    {
        try
        {
            using (this.AD_object = new DirectoryEntry(this.path_))
            {
                return this.AD_object.Properties[attribute_].Value;
            }
        }
        catch (ArgumentNullException x)
        {
            return new ArgumentNullException(x.Message, x);
        }
    }

Meskipun ini tidak akan berfungsi untuk properti yang lebih kompleks seperti "anggota" atau "memberOf"

person Shovers_    schedule 03.12.2018