سؤال
أبحث عن طريقة لتغيير كلمة مرور حساب المستخدم المحلي (المسؤول المحلي) على جهاز 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;
لا تنتمي إلى StackOverflow