Query Active Directory to Display log in Information in T-SQL.

print 'Active Directory Query Script';
print '';
print '... Creating link conenction to Active Directory';
go

if exists(select srv.name from sys.servers as srv where srv.server_id != 0 and srv.name = N'ADSI')
    begin
        exec master.dbo.sp_dropserver @server = N'ADSI', @droplogins = 'droplogins'
    end;
go

sp_addlinkedserver 'ADSI', 'Active Directory Service Interfaces', 'ADSDSOObject', 'adsdatasource';
go

print '... Execute SQL query against Active Directory';
go

if object_id('tempdb..#ADList') is not null
    begin
        select '... Dropping temporary table';
        drop table #ADList;
    end;
print '... Collecting data from Active Directory and inserting into temp table';
go

select * into #ADList
    from openquery(
        ADSI,
        'select
            displayName,
            sAMAccountName,
            sn,
            givenName,
            extensionAttribute6,
            department,
            badPwdCount,
            userAccountControl
        FROM ''LDAP://OU=Staff,DC=MYDOMAIN,DC=COM''
        where objectClass = ''User''
        ');
go

print ' ... Displaying data from temp table';
go

select
    displayName         as 'Display Name',
    sn                  as 'Surname',
    givenName           as 'Given Name',
    sAMAccountName      as 'Account Name',
    extensionAttribute6 as 'Computer Name',
    'bad-Pwd' = case
                  when badPwdCount = 17 then 'Entered Bad Password'
                  else badPwdCount
                end,
    'AcctCtrl' = case
                   when userAccountControl = 2       then 'Account is Disabled'
                   when userAccountControl = 16      then 'Account Locked Out'
                   when userAccountControl = 17      then convert(varchar(48), 'Entered Bad Password')
                   when userAccountControl = 32      then convert(varchar(48), 'No Password is Required')
                   when userAccountControl = 64      then convert(varchar(48), 'Password CANNOT Change')
                   when userAccountControl = 512     then 'Normal'
                   when userAccountControl = 514     then 'Disabled Account'
                   when userAccountControl = 8192    then 'Server Trusted Account for Delegation'
                   when userAccountControl = 524288  then 'Trusted Account for Delegation'
                   when userAccountControl = 590336  then 'Enabled, User Cannot Change Password, Password Never Expires'
                   when userAccountControl = 65536   then convert(varchar(48), 'Account will Never Expire')
                   when userAccountControl = 66048   then 'Enabled and Does NOT expire Paswword'
                   when userAccountControl = 66050   then 'Normal Account, Password will not expire and Currently Disabled'
                   when userAccountControl = 66064   then 'Account Enabled, Password does not expire, currently Locked out'
                   when userAccountControl = 8388608 then convert(varchar(48), 'Password has Expired')
                   else convert(varchar(248), userAccountControl)
                 end
from #ADList
where givenName is not null
order by sn asc;
go

print '... Removing temp table';
go

drop table #ADList;
go

print '... Removing link conenction to Active Directory';
go

if exists(select srv.name from sys.servers as srv where srv.server_id != 0 and srv.name = N'ADSI')
    begin
        exec master.dbo.sp_dropserver @server = N'ADSI', @droplogins = 'droplogins'
    end;
go

print ' AD Data Collection Complete.';