New code for SQL Server 2005 and above:
declare @groups table ( id int identity, grp sysname, distinguishedName VARCHAR(MAX) )
declare @usrs table ( id int identity, usr sysname, grp sysname )
declare @actgrp sysname
declare @actntgrp sysname
declare @max-2 int
declare @i int
, @distinguishedName VARCHAR(MAX)
, @sql VARCHAR(MAX)
insert @groups (grp, distinguishedName)
SELECT Name, distinguishedName
FROM OPENROWSET('ADSDSOObject', 'adsdatasource';'<domain\user>';'<password>',
'SELECT Name, distinguishedName
FROM ''LDAP://<ads server name>/ DC=<subdomain>,DC=<domain>,DC=<net>''
WHERE
objectClass = ''group''
ORDER BY name
')
--SELECT * FROM @groups order by id
select @max-2 = MAX(id) from @groups
select @i = 0
while @i < @max-2 begin
select @i = @i + 1
select @actgrp = '<domain>' + grp, @distinguishedName = distinguishedName from @groups
WHERE id = @i
SELECT @sql = 'select sAMAccountName, ''' + @actgrp + ''' from OPENROWSET(''ADSDSOObject'', ''adsdatasource'';''<domain\user>'';''<password>'',
''SELECT givenName, SN, Mail, info, sAMAccountName
FROM ''''LDAP://<ads server name>/DC=<subdomain>,DC=<domain>,DC=<net>''''
where objectCategory = ''''Person'''' and objectClass = ''''User'''' and SN = ''''*'''' and sAMAccountType=805306368 and not ''''userAccountControl:1.2.840.113556.1.4.803:''''=2 AND memberOf = ''''' + @distinguishedName + ''''' '')'
insert @usrs (usr, grp) EXEC(@sql)
end
select * from @usrs
Best regards
karl