Delphi深度探索-活动目录开发( 三 )


var
ComputerObj: IADsContainer;
TempUserObj: IUnknown;
UserObj: IADsUser;
PDCName: WideString;
NewUserName: WideString;
AdsPath: WideString;
begin
// 获取用户信息
PDCName := InputBox(" 创建新用户 ", " 请输入域名 : ", "");
NewUserName := InputBox(" 创建新用户 ", " 请输入用户名 : ", "");
// 指定域名路径
AdsPath := "WinNT://"PDCName",computer";
// 创建计算机对象
OleCheck(AdsGetObject(PWideChar(AdsPath),
IID_IADsContainer, ComputerObj));
// 创建新用户
TempUserObj := ComputerObj.Create("user", NewUserName);
UserObj := TempUserObj as IADsUser;
// 设定目录信息
UserObj.SetInfo;
// 刷新列表
actOpenWinNT.Execute;
删除用户也非常类似,只不过不需要创建任何的用户对象,可直接调用容器对象 IADsContainer 接口的 Delete 方法,Delete 方法需要两个参数,第一个是要删除的对象类别,第二个是对象名称,代码示意如下 :
var
ComputerObj: IADsContainer;
PDCName: WideString;
UserName: WideString;
AdsPath: WideString;
begin
// 获取用户信息
PDCName := InputBox(" 删除用户 ", " 请输入域名 ", "");
UserName := InputBox(" 删除用户 ", " 请输入要删除的用户名 : ", "");
if MessageDlg(" 你是否确信要删除用户 : "UserName" ?", mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
// 指定域名路径
AdsPath := "WinNT://"PDCName",computer";
// 创建计算机对象
OleCheck(AdsGetObject(PWideChar(AdsPath),
IID_IADsContainer, ComputerObj));
// 删除用户
ComputerObj.Delete("user", UserName);
// 刷新列表
actOpenWinNT.Execute;
end;
end
查看组中的用户
通过 WinNT provider,我们还可以执行各种用户组的维护任务,比如从组中添加或删除用户 。下面就来演示如何枚举组中的用户并察看用户相关信息 。首先让下面代码获得一个 IADsGroup 对象,然后使用 IADsMember 对象来枚举 IADsGroup 对象中所有用户对象,列出不同组中的所有用户:
var
GroupObj: IADsGroup;
Members: IADsMembers;
AdsPath: WideString;
Enum: IEnumVariant;
TempUserObj: OLEVariant;
UserObj: IADsUser;
TempListObj: TListItem;
Value: LongWord;
begin
// 清空列表
GroupListView.Items.Clear;
// 指定域名路径
AdsPath := "WinNT://"MainFrm.ADSIDomainName.Text"/"GroupName;
// 创建组对象
OLECheck(AdsGetObject(PWideChar(AdsPath), IID_IADsGroup,
GroupObj));
// 获得 members 对象
Members := GroupObj.Members;
// 获取枚举对象
Enum := (Members._NewEnum) as IEnumVariant;
// 使用枚举对象进行查找
while (Enum.Next(1, TempUserObj, Value) = S_OK) do
try
// 保存临时对象
UserObj := IUnknown(TempUserObj) as IADsUser;
// 创建新的列表项
TempListObj := GroupListView.Items.Add;
// 指定属性
TempListObj.Caption := UserObj.Name;
except
on E:Exception do
图 1.113
end;
IADsGroup 接口是用来管理 NT 组信息的接口,而它的 Members 属性是一个管理组中用户或 ADSI 对象列表的接口 。最后使用 IADsUser 接口变量 UserObj 来获得 NT 组中的用户信息 。
程序运行结果如图 1.113 所示 。
控制 NT 服务
WinNT provider 还可以用来控制 NT 服务、服务器和工作站,下面的代码遍历 NT 服务,并根据相应的计算机添加服务到相应列表中 :
var
UnknownObject: IUnknown;
Computer: IADsContainer;
ComputerPath: WideString;
Enum: IEnumVariant;
AdsTempObj: OLEVariant;
AdsObj: IADs;
Value: LongWord;
begin
if Item.Caption = "" then

推荐阅读