要用delphi编写,使用adsi com接口,查询AD中某一用户是否存在和是否禁用,域名tm,AD路径:'WinNT://tm',不用ldap

解决方案 »

  1.   

    參考下
    uses ActiveX,        // 使用了COM Moniker实例
         ActiveDs_TLB,   // 已创建的类库
         ComObj;         // 使用了OleCheck和其他COM函数implementation procedure TForm1.BtnCreateUserClick(Sender: TObject); 
    var 
      Usr:  IADsUser; 
      Comp: IADsContainer; 
    begin 
      try 
        Comp := GetObject(WinNT://[computername],computer) as 
          IADsContainer; 
        Usr := Comp.Create(user, [accountname]) as IADsUser; 
        Usr.SetInfo; 
      except 
        on E: EOleException do begin 
          ShowMessage(E.Message); 
        end; 
      end; 
    end; 
    procedure TForm1.BtnSetPasswordClick(Sender: TObject); 
    var 
      Usr: IADsUser; 
    begin 
      try 
        Usr := GetObject(WinNT://[computername]/[accountname],user) 
          as IADsUser; 
        Usr.SetPassword(thenewpassword); 
      except 
        on E: EOleException do begin 
          ShowMessage(E.Message); 
        end; 
      end; 
    end; 
    // GetObject是在Usenet上找到的VB代码(GetObject)。
    // 
    // GetObject能使用“ADSIPath”(如WinNT://....或IIS://localhost)
    // 和现有的ADSI提供者捆绑在一起
    function TForm1.GetObject(const Name: string): IDispatch; 
    var 
      Moniker: IMoniker; 
      Eaten: integer; 
      BindContext: IBindCtx; 
      Dispatch: IDispatch; 
    begin 
      OleCheck(CreateBindCtx(0, BindContext)); 
      OleCheck(MkParseDisplayName(BindContext, 
                                  PWideChar(WideString(Name)), 
                                  Eaten, 
                                  Moniker)); 
      OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch, 
                Dispatch));   Result := Dispatch; 
    end; end.         也能使用ADSI修改用户帐号的设置。下列代码能改动所有帐号的“密码永不过期”选项。procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject); 
    var 
      Usr: IADsUser; 
    begin 
      try 
        Usr := GetObject(WinNT://[computername]/[acccoutname],user) as IADsUser; 
                                      // 检查Checkbox的状态
      if CheckBoxPasswordNeverExpires.Checked then 
        Usr.Put(UserFlags, Usr.Get(UserFlags) OR 65536) 
      // 65536在微软ADSI SDK的iads.h中被定义为UF_DONT_EXPIRE_PASSWORD
      else 
        Usr.Put(UserFlags, Usr.Get(UserFlags) XOR 65536);   
        Usr.SetInfo;   except 
        on E: EOleException do begin 
          ShowMessage(E.Message); 
        end; 
      end; 
    end; 
      

  2.   

    http://download.csdn.net/source/1462183
    下载这个代码看看,是关于windows用户的,不知道满不满足你的要求
      

  3.   

    以下链接是有关ADSI的详细说明,可以解决你的问题
    http://www.agnisoft.com/white_papers/active_directory.asp