WINDOWS::SUPORTE A REDES – SCRIPTS

Redes

Redes

Suporte a Redes!

Scripts VBS para gerar relatórios de dados do Active Directory no Microsoft Excel

Este artigo apresenta uma joia para o administrador de redes Microsoft e que faz uso constante do Active Directoy. Como administrador de redes em um multinacional de grande porte, volte outra o gerente de TI me solicitava relatórios de contas de usuários que foram recém-criadas ou desativadas no domínio. Ele sempre esperava, e é o que ele recebia claro 😉 , uma listagem em uma planilha do Microsoft Excel, que já era automaticamente formatada. Talvez, esta seja a sua necessidade também, então veja como meu blog será bastante útil a você!

Em cada um dos scripts, você precisa apenas substituir, a informação do domínio. Aonde você encontrar ‘LDAP://dc=abbteste,dc=local’, que se refere ao meu domínio de teste ‘abbteste.local’, altere para refletir o domínio que você administra. Por exemplo, se o seu domínio fosse ‘brvendas.sp.local’, você deveria alterar para ‘LDAP://dc=brvendas,dc=sp,dc=local‘.

  • Script para gerar relatório no Excel referente a contas de computadores desativadas no domínio:
Set objCon = CreateObject("ADODB.CONNECTION")
Set objCmd = CreateObject("ADODB.COMMAND")
objCon.Provider = "ADSDSOOBJECT"
objCon.Open = "ACTIVE DIRECTORY PROVIDER"
objCmd.ActiveConnection=objCon
objCmd.Properties("Page Size")=10000
objCmd.Properties("SEARCHSCOPE")=2
objCmd.CommandText="SELECT adspath FROM 'LDAP://dc=abbteste,dc=local' WHERE objectCategory='computer'"

Set objRec=objCmd.Execute
    irow=2
    par=1

Set oExcel = WScript.CreateObject("Excel.Application")
    oExcel.Visible = True
    oExcel.Workbooks.Add

Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
    oSheet.Cells(1, 1).Value = "[Título do Relatório]"
    oSheet.Cells(2, 1).Value = "Computador"
    oSheet.Cells(2, 2).Value = "OU do Computador"
    oSheet.Cells(2, 3).Value = "OU do Departamento"
    oSheet.Cells(2, 4).Value = "Nome Distinto"
    objRec.MoveFirst

Do Until objRec.EOF
    p=objRec.Fields("adspath").Value

    Set objComputer= GetObject(p)
    if objComputer.AccountDisabled = TRUE Then

        oSheet.Cells(irow + 1, 1).Value = objComputer.cn
        
        'Cria um Array com as informações de Paternidade
         arrOUs = Split(objComputer.Parent, ",")

        'Obtem a primeira OU
         arrMainOU = Split(arrOUs(0), "=")
         oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

        'Obtem a segunda OU
        arrMainOU = Split(arrOUs(1), "=")
        oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
        oSheet.Cells(irow + 1, 4).Value = objComputer.distinguishedName

        ' Zebrar linhas
        if (par Mod 2) <> 0 then
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
            next
            par=par+1
        else
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
            next
            par=par+1
        end if
        irow=irow+1
    End if
    objRec.MoveNext
Loop

' Título
oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de computadores " & chr(34) & "DESATIVADAS" & chr(34) & " no domínio"
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.ColorIndex = 1
oSheet.range("A1:D1").Interior.ColorIndex = 6
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.Size = 14
oSheet.range("A1:D1").MergeCells = True
oSheet.Range("A1:D1").HorizontalAlignment = -4108

' Cabeçalho
oSheet.range("A2:D2").Font.Bold = TRUE
oSheet.range("A2:D2").Font.Size = 11
oSheet.range("A2:D2").Font.ColorIndex = 2
oSheet.range("A2:D2").Interior.ColorIndex = 1
oSheet.Range("A2:D2").HorizontalAlignment = -4108
oSheet.Range("A1:D" & irow).Columns.AutoFit
oSheet.Range("A1:D" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:D" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:D" & irow).Borders.Color = RGB(0,0,0)

  • Script para gerar relatório no Excel referente a contas de computadores ativadas no domínio:
Resultado para contas ativadas no domínio
Resultado para contas de computadores ativadas no domínio
Set objCon = CreateObject("ADODB.CONNECTION")
Set objCmd = CreateObject("ADODB.COMMAND")

objCon.Provider = "ADSDSOOBJECT"
objCon.Open = "ACTIVE DIRECTORY PROVIDER"
objCmd.ActiveConnection=objCon
objCmd.Properties("Page Size")=10000
objCmd.Properties("SEARCHSCOPE")=2
objCmd.CommandText="SELECT adspath FROM 'LDAP://dc=abbteste,dc=local' WHERE objectCategory='computer'"

Set objRec=objCmd.Execute
irow=2
par=1

Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add

Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)

oSheet.Cells(1, 1).Value = "[Título do Relatório]"
oSheet.Cells(2, 1).Value = "Computador"
oSheet.Cells(2, 2).Value = "OU do Computador"
oSheet.Cells(2, 3).Value = "OU do Departamento"
oSheet.Cells(2, 4).Value = "Nome Distinto"
objRec.MoveFirst

Do Until objRec.EOF
    p=objRec.Fields("adspath").Value
    Set objComputer= GetObject(p)

    if objComputer.AccountDisabled = FALSE Then
        oSheet.Cells(irow + 1, 1).Value = objComputer.cn

       'Cria um Array com as informações de Paternidade
        arrOUs = Split(objComputer.Parent, ",")

       'Obtem a primeira OU
        arrMainOU = Split(arrOUs(0), "=")
        oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

       'Obtem a segunda OU
        arrMainOU = Split(arrOUs(1), "=")
        oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
        oSheet.Cells(irow + 1, 4).Value = objComputer.distinguishedName

       ' Zebrar linhas
        if (par Mod 2) <> 0 then
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
            next
            par=par+1
        else
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
            next
            par=par+1
        end if
        irow=irow+1
    End if
    objRec.MoveNext
Loop

' Título
oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de computadores " & chr(34) & "Ativadas" & chr(34) & " no domínio"
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.ColorIndex = 1
oSheet.range("A1:D1").Interior.ColorIndex = 6
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.Size = 14
oSheet.range("A1:D1").MergeCells = True
oSheet.Range("A1:D1").HorizontalAlignment = -4108

' Cabeçalho
oSheet.range("A2:D2").Font.Bold = TRUE
oSheet.range("A2:D2").Font.Size = 11
oSheet.range("A2:D2").Font.ColorIndex = 2
oSheet.range("A2:D2").Interior.ColorIndex = 1
oSheet.Range("A2:D2").HorizontalAlignment = -4108
oSheet.Range("A1:D" & irow).Columns.AutoFit
oSheet.Range("A1:D" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:D" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:D" & irow).Borders.Color = RGB(0,0,0)
  • Script para gerar relatório no Excel referente a contas de usuários criadas no domínio em um período específico ou ao menos 30 dias:
Parametrização de filtro do script que apresenta novas contas
Parametrização de filtro do script que apresenta novas contas
Resultado filtrado apresentado novas contas criadas no domínio
Resultado filtrado apresentado novas contas criadas no domínio
On Error Resume Next

EntraDias = InputBox( "Este relatório apresenta a listagem de todas as novas contas de usuários criadas no domínio nos últimos 30 dias ou mais."+ vbCrLf + vbCrLf +" Entre com um número maior que trinta."+ vbCrLf + vbCrLf +"(Se for menor que trinta ou outro caractere diferente de numérico, será considrado 30)", "Contas novas de usuários criadas no domínio",numDias )

if EntraDias < 30 then EntraDias = 30
   ' Extrair data
    dataAtual = now()-EntraDias
    dataArray = Split(dataAtual, "/")
    dia = dataArray(0)
    mes = dataArray(1)
    anoArray = Split(dataArray(2), " ")
    ano = anoArray(0)
    data = ano & mes & dia & "000000.0Z"

Function ConverteTimeStamp(timeStamp)

    Dim dateMonth : dateMonth = DatePart("M", timeStamp)
    Dim dateDay : dateDay = DatePart("D", timeStamp)
    Dim dateYear : dateYear = DatePart("YYYY", timeStamp)
    Dim dateString

    If dateDay < 10 Then
        dateString = "0" & dateDay & "/"
    Else
        dateString = dateDay & "/"
    End If

    If dateMonth < 10 Then
        dateString = dateString & "0" & dateMonth & "/"
    Else
        dateString = dateString & dateMonth & "/"
    End If

    dateString = dateString & dateYear
    ConverteTimeStamp = dateString
End Function

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.CommandText = _
"<LDAP://dc=abbteste,dc=local>;" & _
"(&(objectCategory=Person)(objectClass=User)(whenCreated>=" & data & "));" & _
"cn,Name,distinguishedName,enabled,whenCreated;Subtree"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

irow=2
par=1
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
oSheet.Cells(1, 1).Value = "[Título do Relatório]"
oSheet.Cells(2, 1).Value = "Nome"
oSheet.Cells(2, 2).Value = "OU da Conta"
oSheet.Cells(2, 3).Value = "OU do Departamento"
oSheet.Cells(2, 4).Value = "Data de criação"
oSheet.Cells(2, 5).Value = "Nome Distinto"

Do Until objRecordSet.EOF
    if objRecordSet.Fields("enable") <> null then
        oSheet.Cells(irow + 1, 1).Value = objRecordSet.Fields("Name").Value
        
       'Cria um Array com as informações de Paternidade
        arrOUs = Split(objRecordSet.Fields("distinguishedName"), ",")

       'Obtem a primeira OU
         arrMainOU = Split(arrOUs(1), "=")
         oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

       'Obtem a segunda OU
        arrMainOU = Split(arrOUs(2), "=")
        oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
        oSheet.Cells(irow + 1, 4).Value = Cdate(ConverteTimeStamp(objRecordSet.Fields("whenCreated")))
        oSheet.Cells(irow + 1, 4).HorizontalAlignment = -4108
        oSheet.Cells(irow + 1, 5).Value = objRecordSet.Fields("distinguishedName")
        objRecordSet.MoveNext

       ' Zebrar linhas
        if (par Mod 2) <> 0 then
            for a = 1 to 5
                oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
            next
            par=par+1
        else
            for a = 1 to 5
                oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
            next
            par=par+1
        end if
        irow=irow+1
    end if
Loop

' Título
oSheet.range("A1:E1").Font.Bold = TRUE
oSheet.range("A1:E1").Font.ColorIndex = 1
oSheet.range("A1:E1").Interior.ColorIndex = 6
oSheet.range("A1:E1").Font.Bold = TRUE
oSheet.range("A1:E1").Font.Size = 14
oSheet.range("A1:E1").MergeCells = True
oSheet.Range("A1:E1").HorizontalAlignment = -4108

' Cabeçalho
if (irow-2) > 1 then
    oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de usuários foram criadas no domínio nos ultimos "&EntraDias
else
    oSheet.Cells(1, 1).Value = "Apenas uma conta de usuário foi criada no domínio nos ultimos "&EntraDias
end if
oSheet.range("A2:E2").Font.Bold = TRUE
oSheet.range("A2:E2").Font.Size = 11
oSheet.range("A2:E2").Font.ColorIndex = 2
oSheet.range("A2:E2").Interior.ColorIndex = 1
oSheet.Range("A2:E2").HorizontalAlignment = -4108
oSheet.Range("A1:E" & irow).Columns.AutoFit
oSheet.Range("A1:E" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:E" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:E" & irow).Borders.Color = RGB(0,0,0)
  • Script para gerar relatório no Excel referente a contas de usuários ativadas no domínio:
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.CommandText = _
"<LDAP://dc=abbteste,dc=local>;" & _
"(&(objectCategory=User)(!userAccountControl:1.2.840.113556.1.4.803:=2));" & _
"cn,Name,distinguishedName,enabled;Subtree"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
irow=2
par=1
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
oSheet.Cells(1, 1).Value = "[Título do Relatório]"
oSheet.Cells(2, 1).Value = "Nome"
oSheet.Cells(2, 2).Value = "OU da Conta"
oSheet.Cells(2, 3).Value = "OU do Departamento"
oSheet.Cells(2, 4).Value = "Nome Distinto"

Do Until objRecordSet.EOF
    if objRecordSet.Fields("enable") <> null then
        oSheet.Cells(irow + 1, 1).Value = objRecordSet.Fields("Name").Value

       'Cria um Array com as informações de Paternidade
        arrOUs = Split(objRecordSet.Fields("distinguishedName"), ",")

       'Obtem a primeira OU
        arrMainOU = Split(arrOUs(1), "=")
        oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

       'Obtem a segunda OU
        arrMainOU = Split(arrOUs(2), "=")
        oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
        oSheet.Cells(irow + 1, 4).Value = objRecordSet.Fields("distinguishedName")
        objRecordSet.MoveNext

       ' Zebrar linhas
        if (par Mod 2) <> 0 then
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
            next
            par=par+1
        else
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
            next
            par=par+1
        end if
        irow=irow+1
    end if
Loop

' Título
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.ColorIndex = 1
oSheet.range("A1:D1").Interior.ColorIndex = 6
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.Size = 14
oSheet.range("A1:D1").MergeCells = True
oSheet.Range("A1:D1").HorizontalAlignment = -4108

' Cabeçalho
oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de usuários " & chr(34) & "Ativadas" & chr(34) & " no domínio"
oSheet.range("A2:D2").Font.Bold = TRUE
oSheet.range("A2:D2").Font.Size = 11
oSheet.range("A2:D2").Font.ColorIndex = 2
oSheet.range("A2:D2").Interior.ColorIndex = 1
oSheet.Range("A2:D2").HorizontalAlignment = -4108
oSheet.Range("A1:D" & irow).Columns.AutoFit
oSheet.Range("A1:D" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:D" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:D" & irow).Borders.Color = RGB(0,0,0)
  • Script para gerar relatório no Excel referente a contas de usuários desativadas no domínio:
Apresenta contas de usuários que foram desativadas no domínio
Apresenta contas de usuários que foram desativadas no domínio
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.CommandText = _
"<LDAP://dc=abbteste,dc=local>;" & _
"(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=2));" & _
"cn,Name,distinguishedName,enabled;Subtree"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
irow=2
par=1
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
oSheet.Cells(1, 1).Value = "[Título do Relatório]"
oSheet.Cells(2, 1).Value = "Nome"
oSheet.Cells(2, 2).Value = "OU da Conta"
oSheet.Cells(2, 3).Value = "OU do Departamento"
oSheet.Cells(2, 4).Value = "Nome Distinto"
Do Until objRecordSet.EOF
    if objRecordSet.Fields("enable") <> null then
        oSheet.Cells(irow + 1, 1).Value = objRecordSet.Fields("Name").Value
       
       'Cria um Array com as informações de Paternidade
        arrOUs = Split(objRecordSet.Fields("distinguishedName"), ",")

       'Obtem a primeira OU
        arrMainOU = Split(arrOUs(1), "=")
        oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

       'Obtem a segunda OU
        arrMainOU = Split(arrOUs(2), "=")
        oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
        oSheet.Cells(irow + 1, 4).Value = objRecordSet.Fields("distinguishedName")

       ' Zebrar linhas
        if (par Mod 2) <> 0 then
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
            next
            par=par+1
        else
            for a = 1 to 4
                oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
            next
            par=par+1
        end if
        objRecordSet.MoveNext
        irow=irow+1
    end if
Loop

' Título
oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de usuários " & chr(34) & "DESATIVADAS" & chr(34) & " no domínio"
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.ColorIndex = 1
oSheet.range("A1:D1").Interior.ColorIndex = 6
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.Size = 14
oSheet.range("A1:D1").MergeCells = True
oSheet.Range("A1:D1").HorizontalAlignment = -4108

' Cabeçalho
oSheet.range("A2:D2").Font.Bold = TRUE
oSheet.range("A2:D2").Font.Size = 11
oSheet.range("A2:D2").Font.ColorIndex = 2
oSheet.range("A2:D2").Interior.ColorIndex = 1
oSheet.Range("A2:D2").HorizontalAlignment = -4108
oSheet.Range("A1:D" & irow).Columns.AutoFit
oSheet.Range("A1:D" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:D" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:D" & irow).Borders.Color = RGB(0,0,0)
  • Script para gerar relatório no Excel referente a contas de usuários que nunca expiram no domínio:
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.CommandText = _
"<LDAP://dc=abbteste,dc=local>;" & _
"(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=65536));" & _
"cn,Name,distinguishedName;Subtree"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
irow=2
par=1
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
oSheet.Cells(1, 1).Value = "[Título do Relatório]"
oSheet.Cells(2, 1).Value = "Nome"
oSheet.Cells(2, 2).Value = "OU da Conta"
oSheet.Cells(2, 3).Value = "OU do Departamento"
oSheet.Cells(2, 4).Value = "Nome Distinto"

Do Until objRecordSet.EOF
    oSheet.Cells(irow + 1, 1).Value = objRecordSet.Fields("Name").Value

   'Cria um Array com as informações de Paternidade
    arrOUs = Split(objRecordSet.Fields("distinguishedName"), ",")

   'Obtem a primeira OU
    arrMainOU = Split(arrOUs(1), "=")
    oSheet.Cells(irow + 1, 2).Value = arrMainOU(1)

   'Obtem a segunda OU
    arrMainOU = Split(arrOUs(2), "=")
    oSheet.Cells(irow + 1, 3).Value = arrMainOU(1)
    oSheet.Cells(irow + 1, 4).Value = objRecordSet.Fields("distinguishedName")

   ' Zebrar linhas
    if (par Mod 2) <> 0 then
        for a = 1 to 4
            oSheet.Cells(irow+1, a).Interior.Color = RGB(255,255,255)
        next
        par=par+1
    else
        for a = 1 to 4
            oSheet.Cells(irow+1, a).Interior.Color = RGB(205,205,205)
        next
        par=par+1
    end if
    objRecordSet.MoveNext
    irow=irow+1
Loop

' Título
oSheet.Cells(1, 1).Value = "Total de " & irow-2 & " contas de usuários setadas para " & chr(34) & "Nunca expirar a senha" & chr(34) & " no domínio"
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.ColorIndex = 1
oSheet.range("A1:D1").Interior.ColorIndex = 6
oSheet.range("A1:D1").Font.Bold = TRUE
oSheet.range("A1:D1").Font.Size = 14
oSheet.range("A1:D1").MergeCells = True
oSheet.Range("A1:D1").HorizontalAlignment = -4108

' Cabeçalho
oSheet.range("A2:D2").Font.Bold = TRUE
oSheet.range("A2:D2").Font.Size = 11
oSheet.range("A2:D2").Font.ColorIndex = 2
oSheet.range("A2:D2").Interior.ColorIndex = 1
oSheet.Range("A2:D2").HorizontalAlignment = -4108
oSheet.Range("A1:D" & irow).Columns.AutoFit
oSheet.Range("A1:D" & irow).Borders.LineStyle = 1 'xlContinuous
oSheet.Range("A1:D" & irow).Borders.Weight = 2 'xlThin
oSheet.Range("A1:D" & irow).Borders.Color = RGB(0,0,0)
  • Script para gerar relatório no Excel referente a contas de usuários que fazem parte de um grupo especificado:
On Error Resume Next
Const ForAppending = 8

'----------------------- Solicitação de dados -----------------
GRUPO = InputBox( "Este relatório apresenta a listagem de todos os grupos."+ vbCrLf + vbCrLf +" Entre com um número maior que trinta."+ vbCrLf + vbCrLf +"(Se for menor que trinta ou outro caractere diferente de numérico, será considrado 30)", "nome do grupo no domínio",nomeGrupo )
DN_GRUPO = obtenerdn(GRUPO)


' Inciar Excel
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)
irow=2

'----------------------- Obter usuarios -----------------
Set objGroup = GetObject ("LDAP://" & DN_GRUPO )
objGroup.GetInfo
arrMemberOf = objGroup.GetEx("member")
oSheet.Cells(irow + 1, 1).Value = GRUPO
irow=irow+1
For Each strMember in arrMemberOf
    set objuser=GetObject ("LDAP://" & strMember )
    oSheet.Cells(irow + 1, 1).Value = objUser.FullName & " (" & objUser.sAMAccountName & ")"
    irow=irow+1
Next
wscript.echo "Feito"
wscript.quit

'----------------------- Funções -----------------
function obtenerDN(nome)
    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    objCommand.CommandText = _
    "SELECT distinguishedName FROM 'LDAP://dc=abbteste,dc=local' WHERE objectCategory='group' AND sAMAccountName='" & nome & "'"
    Set objRecordSet = objCommand.Execute
    Quantidade = objRecordSet.RecordCount
    if Quantidade = 0 Then
        MsgBox "O usuario " & nome & " não existe na base", 0,"Mudança de privilégio"
        wscript.quit
    end if
    if Quantidade > 1 Then
        MsgBox "Encontrado mais de um usuário '" & nome & "' com mesmo nome", 0,"Cambio de sucursal"
        wscript.quit
    end if
    obtenerDN = objRecordSet.Fields("distinguishedName").Value
end function
  • Script para gerar relatório no Excel referente a todos os grupos das contas de usuários do domínio, ou seja, usuário a usuário e seus grupos:
on Error Resume Next
strDOMAIN = "DC=abbteste,DC=local"
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
' Inciar Excel
Set oExcel = WScript.CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.Workbooks.Add
Set oSheet = oExcel.ActiveWorkBook.WorkSheets(1)

' Create connection to AD
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"

' Create command
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000

' Execute command to get all users in OU
objCommand.CommandText = _
"<LDAP://" & strDOMAIN & ">;" & _
"(&(objectclass=user)(objectcategory=person));" & _
"adspath;subtree"
Set objRecordSet = objCommand.Execute

' Show info for each user in OU
Do Until objRecordSet.EOF
   'Show required info for a user
    spath = objRecordSet.Fields("adspath").Value
    Set objUser = Getobject(spath)
    userName = split(objUser.Name, "=")
    oSheet.Cells(irow + 1, 1).Value = userName(1)
    oSheet.Cells(irow + 1, 1).Font.Bold = TRUE
    oSheet.Cells(irow + 1, 1).Font.ColorIndex = 1
    oSheet.Cells(irow + 1, 1).Interior.ColorIndex = 6
    oSheet.Cells(irow + 1, 1).Font.Bold = TRUE
    oSheet.Cells(irow + 1, 1).Font.Size = 12
    oSheet.Cells(irow + 1, 1).HorizontalAlignment = -4108
    irow=irow+1
    arrMemberOf = objUser.Get("memberof")
    If Err.Number <> E_ADS_PROPERTY_NOT_FOUND Then
        If IsArray(arrMemberOf) Then
            For Each strMember in arrMemberOf
                's = s & strMember & vbcr
                groupName_1_Etapa = split(strMember,"=")
                groupName_2_Etapa = split(groupName_1_Etapa(1),",")
                oSheet.Cells(irow + 1, 1).Value = groupName_2_Etapa(0)
                irow=irow+1
            Next
            irow=irow+1
        Else
            groupName_1_Etapa = split(arrMemberOf,"=")
            groupName_2_Etapa = split(groupName_1_Etapa(1),",")
            oSheet.Cells(irow + 1, 1).Value = groupName_2_Etapa(0)
            irow=irow+1
        End if
    Else
        oSheet.Cells(irow + 1, 1).Value = "NOT Member of Any Group"
        irow=irow+1
        Err.Clear
    End if
    s= ""
    arrMemberOf = ""
    ' Move to the next user
    objRecordSet.MoveNext
Loop

' Clean up
objRecordSet.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
oSheet.Range("A1:A" & irow).Columns.AutoFit

Muito bem! Estes scripts vão ajudar bastante mas, eles podem não ser suficientes. Todavia, agora você tem uma base para elaborar novos scripts de relatórios para atender as necessidades da sua gestão de redes!

[]’s

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.