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:

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:


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:

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

