3

ローカル コンピューターでユーザーを有効または無効にするために、次のスニペットを使用しています。

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry currentUser = localMachine.Children.Find(user, "Administrators");
currentUser.Invoke("AccountDisabled", new object[] { true });
currentUser.CommitChanges();

ユーザーを文字列として割り当てています。「ファイルパスが見つかりません」というエラーが表示されます: Comexception Unhandled.

私のコードに何か問題がありますか?

4

4 に答える 4

5

.NET 3.5 以降を使用している場合は、System.DirectoryServices.AccountManagement(S.DS.AM) 名前空間を確認してください。ここでそれについてすべて読んでください:

基本的に、マシンレベルのコンテキストを定義して、AD でユーザーやグループを簡単に見つけることができます。

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   user.Enabled = false;
   user.Save();
}

新しい S.DS.AM を使用すると、AD でユーザーやグループを簡単に操作できます。

于 2012-07-17T13:03:12.827 に答える
2

のMSDNページによるとDirectoryEntry

コンピューター上のユーザーに接続します。たとえば、" WinNT://<domain name>/<computer name>/<user name>" . ローカル コンピュータに接続している場合は、" WinNT://<computer name>/<user name>" .

したがって、ユーザーを取得するコードは次のようになります。

DirectoryEntry currentUser = new DirectoryEntry("WinNT://" + Environment.MachineName + "/" + user);
于 2012-07-17T12:37:40.227 に答える
1

このように使う

        DirectoryEntry local = new DirectoryEntry("WinNT://localhost");
        DirectoryEntry user = local.Children.Find(username);
        user.InvokeSet("AccountDisabled", true);
        user.CommitChanges();
于 2014-10-02T05:18:05.293 に答える
0

統一命名規則を使用してみてください。つまり、次のように「\\」を使用してください。

DirectoryEntry localMachine = new DirectoryEntry("WinNT:\\" + Environment.MachineName);
于 2012-07-17T12:28:17.657 に答える