10

Windows (この場合は XP) マシンでローカル ユーザー アカウント (ローカル管理者) のパスワードを変更する方法を探しています。これを行う1つの方法についてCodeProjectの記事を読みましたが、これは「クリーン」ではないようです。

これはWMIで実行できるので、それが答えかもしれませんが、ManagementObject で WinNT WMI 名前空間を使用する方法がわかりません。次のコードを試すと、「無効なパラメーター」例外がスローされます。

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を使用しています)

編集:私を正しい方向に向けてくれてありがとうEly。最終的に使用したコードは次のとおりです。

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);
}
4

2 に答える 2

2

DirectoryEntryクラスの代わりにクラスを試してくださいManagementObject

于 2008-10-24T20:06:17.017 に答える
1

Ely が指摘したように、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;
于 2008-10-27T03:00:11.053 に答える