質問

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

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

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);
}
役に立ちましたか?

解決

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

他のヒント

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top