0

.Net アプリケーションを使用して、任意のユーザーの Windows パスワードをリセットする必要があります。ユーザーのユーザー名を使用して、AD サーバーからディレクトリ エントリを取得しています。パスワードを変更するには、次の2つの異なる方法があります。

entry.Invoke("ChangePassword", oldPass, newPass);

&

entry.Invoke("SetPassword", "pass@123");

しかし、ライブ AD サーバーでこれらのメソッドを試すと、次のエラーが発生します。

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

2 つの AD サーバーがあります。そのうちの 1 つはライブで、もう 1 つはテスト用です。コードが機能しているかどうかを確認したいだけです。ライブサーバーでアクセスが拒否されたため、コードを使用して自分のパスワードを変更して後で確認することはできません。また、テスト AD サーバーを使用してパスワードを変更している場合、パスワードが変更されているかどうかを確認する方法がわかりません。私のコードが正しく機能しているかどうかを確認するための提案をお願いします。前もって感謝します。

4

1 に答える 1

1

インボークを呼び出す前に、適切なコンテキスト設定が得られていないと思います。これは私が似たようなものに使用するものです。独自の変数を設定する必要があります。

関数を取得するために使用System.DirectoryServices.AccountManagementしています。

//Domain related info
string _DCToUse = "myserver.domain.local";
string _ADConDomain = "DC=domain,DC=local";
string _AdDomain = "domain";
string _ADAdminUser = "administrator";
string _ADAdminPass = "password";

//User specific
string _UserName = "jsmith";
string _CurrentPass = "oldPass";
string _NewPass = "newPass";

    PrincipalContext principalContext =
      new PrincipalContext(ContextType.Domain, _DCToUse,
      _ADConDomain, _ADDomain+@"\"+_ADAdminUser, _ADAdminPass);
    UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, _UserName);

        if (user == null)
        {
             string ADErrorMsg = "Couldn't find user, check your spelling.";
             return Changed;
        }

        user.ChangePassword(oldPass, newPass);
        user.Save();
于 2013-02-20T18:21:50.040 に答える