group and populates to the tblMembersOfORG_AD_Recurcive_Groups table:
CREATE TABLE [dbo].[tblMembersOfORG_AD_Groups](
[sAMAccountName] [nvarchar](256) NULL
[userPrincipalName] [nvarchar](256) NULL
,[adspath] [nvarchar](400) NOT NULL
,[Department] [nvarchar](256) NULL
,[Title] [nvarchar](256) NULL
,[mail] [nvarchar](256) NULL
,[telephoneNumber] [nvarchar](256) NULL
,[sn] [nvarchar](256) NULL
,[givenName] [nvarchar](256) NULL
,[cn] [nvarchar](256) NULL
,[membership] [nvarchar](500) NULL
,[loginName] [nvarchar](256) NULL
,[DateCreated] [datetime] NULL
) ON [PRIMARY]
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
PRINT 'drop procedure dbo.udpMembersOfORG_AD_Recurcive_Groups'
GO
if exists (select * from dbo.sysobjects
where id = object_id(N'dbo.udpMembersOfORG_AD_Recurcive_Groups')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure dbo.udpMembersOfORG_AD_Recurcive_Groups
GO
PRINT 'CREATE PROC dbo.udpMembersOfORG_AD_Recurcive_Groups'
GO
/******************************************************************************
NAME: udpMembersOfORG_AD_Recurcive_Groups
PURPOSE: Gets users from Active Directory across DET from scecified
groups and populates to the tblMembersOfORG_AD_Recurcive_Groups table
REVISIONS: Call sample: exec dbo.udpMembersOfORG_AD_Recurcive_Groups
'LDAP://org.com/CN=ORG_DEPOSITOR,OU=Groups,DC=ORG,DC=com'
$Log$
Ver Date Author Description ******************************************************************************/ CREATE PROC [dbo].[udpMembersOfORG_AD_Recurcive_Groups] @adPath nvarchar(500) AS BEGIN DECLARE @UniversalGroup nvarchar(100) ,@dcName nvarchar(100),@memberOf nvarchar(500),@strSQL varchar(7500),@delim CHAR(1),@cursorName NVARCHAR(50),@sAMAccountName nvarchar(256),@userPrincipalName nvarchar(256),@adspath nvarchar(400),@Department nvarchar(256),@Title nvarchar(256),@mail nvarchar(256),@telephoneNumber nvarchar(256),@sn nvarchar(256),@givenName nvarchar(256),@cn nvarchar(256),@err int,@CurrentDate datetime DECLARE @tempADSI TABLE (sAMAccountName nvarchar(256),userPrincipalName nvarchar(256),adspath nvarchar(400),Department nvarchar(256),Title nvarchar(256),mail nvarchar(256),telephoneNumber nvarchar(256),sn nvarchar(256),givenName nvarchar(256),cn nvarchar(256))
SET @CurrentDate = getdate()
SET @delim = '/' SET @dcName = SUBSTRING(@adPath,0,CHARINDEX('.win' + @delim, @adPath) + LEN('.win')) SET @memberOf = SUBSTRING(@adPath,CHARINDEX('.win' + @delim, @adPath) + LEN('.win') + 1,LEN(@adPath)) SET @strSQL = 'DECLARE ADSI_cursor CURSOR FOR SELECT sAMAccountName,userPrincipalName,adspath,Department,Title,telephoneNumber,sn,givenName,cnFROM OPENQUERY( ADSI,'''+ 'SELECT sAMAccountName,userPrincipalName,adspath,Department,Title,telephoneNumber,sn,givenName,cn'+ ' FROM '''''+ @dcName+ ''''' WHERE memberOf=''''' + @memberOf+ ''''''')'-- Fill table
EXEC(@strSQL)
IF @@error = 0 BEGIN
OPEN ADSI_cursor
END
FETCH NEXT FROM ADSI_cursor INTO @sAMAccountName,@userPrincipalName,@adspath,@Departmen,@Title,@telephoneNumber,@sn,@givenName,@cnWHILE @@FETCH_STATUS = 0 BEGINPRINT @adspathIF (@sn is not null) BEGINBEGIN TRANSACTIONINSERT INTO dbo.tblMembersOfORG_AD_Groups(sAMAccountName,userPrincipalName,adspath,Department,Title,telephoneNumber,sn,givenName,cn,membership,loginName,DateCreated)VALUES(@sAMAccountName,@userPrincipalName,@adspath,@Department,@Title,@telephoneNumber,@sn,@givenName,@cn,@adPath,replace(substring(@adspath,0,charindex('.det.win/',@adspath)),'LDAP://','') + '\' + @sAMAccountName,@CurrentDate)COMMITENDINSERT INTO @tempADSI(sAMAccountName,userPrincipalName,adspath,Department,Title,telephoNumber,sn,givenName,cn) VALUES(@sAMAccountName,@userPrincipalName,@adspath,@Department,@Title,@telephoneNumber,@sn,@givenName,@cn)
FETCH NEXT FROM ADSI_cursorINTO @sAMAccountName,@userPrincipalName,@adspath,@Department,@Title,@telephoneNumber,@sn,@givenName,@cnENDIF @@error = 0 BEGINCLOSE ADSI_cursorENDIF @@error = 0 BEGINDEALLOCATE ADSI_cursorENDIF @@error = 0 BEGINDEALLOCATE DOMAIN_cursorDECLARE DOMAIN_cursor CURSOR FORselect sAMAccountName,userPrincipalName,adspath,Department,Title,telephoneNumber,sn,givenName,cnfrom @tempADSIENDIF @@error = 0 BEGIN OPEN DOMAIN_cursor END FETCH NEXT FROM DOMAIN_cursor INTO @sAMAccountName,@userPrincipalName,@adspath,@Department,@Title,@telephoneNumber,@sn,@givenName,@cnWHILE @@FETCH_STATUS = 0 BEGINIF (@sn is null) BEGIN-- Recurcive callexec dbo.udpMembersOfORG_AD_Recurcive_Groups @adspathENDIF @@error = 0 BEGINFETCH NEXT FROM DOMAIN_cursorINTO @sAMAccountName,@userPrincipalName,@adspath,@Department,@Title,@telephoneNumber,@sn,@givenName,@cnEND END END GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
If you find this script useful please donate generously.
No comments:
Post a Comment