تغيير كلمة مرور المسؤول المحلي في C#

StackOverflow https://stackoverflow.com/questions/234845

  •  04-07-2019
  •  | 
  •  

سؤال

أبحث عن طريقة لتغيير كلمة مرور حساب المستخدم المحلي (المسؤول المحلي) على جهاز Windows (XP في هذه الحالة). لقد قرأت مقالة codeproject حول طريقة واحدة للقيام بذلك ، لكن هذا لا يبدو "نظيفًا".

أستطيع أن أرى أن هذا من الممكن القيام به مع WMI, ، قد يكون هذا هو الحل ، لكن لا يمكنني معرفة كيفية استخدام مساحة اسم Winnt WMI مع ManagementObject. عندما أجرب الكود التالي ، يلقي استثناء "معلمة غير صالحة".

public static void ResetPassword(string computerName, string username, string newPassword){ 
            ManagementObject managementObject = new ManagementObject("WinNT://" + computerName + "/" + username); // Throws Exception
            object[] newpasswordObj = {newPassword};
            managementObject.InvokeMethod("SetPassword", newpasswordObj);
}

هل هناك طريقة أفضل للقيام بذلك؟ (أنا أستخدم .NET 3.5)

يحرر: شكرا ايلي لتوجيه لي في الاتجاه الصحيح. هنا هو الرمز الذي انتهى به الأمر باستخدام:

public static void ResetPassword(string computerName, string username, string newPassword) { 
        DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1}", computerName, username)); 
        directoryEntry.Invoke("SetPassword", newPassword);
}
هل كانت مفيدة؟

المحلول

جرب ال DirectoryEntry الفصل بدلا من ManagementObject صف دراسي.

نصائح أخرى

كما لاحظ ايلي ، يمكنك استخدام رمز System.DirectoryServices لإنجاز هذا لكل MSDN:

String myADSPath = "LDAP://onecity/CN=Users,
     DC=onecity,DC=corp,DC=fabrikam,DC=com";

// Create an Instance of DirectoryEntry.
DirectoryEntry myDirectoryEntry = new DirectoryEntry(myADSPath);
myDirectoryEntry.Username = UserName;
myDirectoryEntry.Password = SecurelyStoredPassword;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top