Usuário com melhor resposta
Script VBS para listar o "nome de logon" dos membros de um grupo do AD

Pergunta
-
Boa tarde !
encontrei na internet um script vbs que me lista o nome de todos os membros de um grupo do AD e grava em um arquivo .txt, o que faço para esse script me listar o "nome de logon" de cada membro do grupo ?
poderiam me ajudar, por favor !
desde já muito obrigado.
segue o script !
'--------------------------------------------------------------------------------------------------
On Error Resume Next
Diretorio= "c:\grupos"
grupo= "Nome do Grupo"
file= grupo & ".txt"
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = oFSO.CreateFolder(Diretorio)
Set Dir=oFSO.GetFolder(Diretorio)
Set arqtxt = Dir.CreateTextFile(file, True)
Set rootDSE = GetObject("LDAP://RootDSE")
domainContainer = rootDSE.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"
Set rs = conn.Execute(LDAPStr)
If rs.RecordCount = 1 Then
Set oGroup = GetObject(rs.Fields(0).Value)
End If
for each strMember in oGroup.member
Spmember = Split(strMember, ",")
member= Spmember(0)
arqtxt.WriteLine Mid (member,4)
Next
Respostas
-
Gabriel,
Bom dia,
acabei encontrando um script PowerShell que resolveu meu problema, segue o script.
Get-ADGroupMember -Identity nomedogrupo | ft SamAccountName -AutoSize |Out-File c:\list.txt
muito obrigado pela ajuda !
- Sugerido como Resposta Gabriel S Almeida sexta-feira, 10 de novembro de 2017 18:05
- Marcado como Resposta Leandro da Silva Almeida segunda-feira, 13 de novembro de 2017 14:59
Todas as Respostas
-
Leandro, Bom dia.
Teste este script, ele vai listar todos os grupos do AD e seus respectivos membros(um abaixo do outro) com Nome e SAN, so altere a linha MY_DOMAIN com seu dominio e pronto, o objeto que recupera o SAN dos usuarios é o objMember.sAMAccountName.
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objtextfile = objFSO.deleteFile("GruposAd.CSV")
Set objtextfile = objFSO.CreateTextFile("GruposAd.CSV", Forwritting)
Const ADS_SCOPE_SUBTREE = 8
Const MY_DOMAIN = "DC=DOMINIO,DC=COM"
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
' Get a recordset of groups in AD
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") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT ADsPath, Name FROM 'LDAP://" & MY_DOMAIN & "' WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
' For each Group, Get group properties
Do Until objRecordSet.EOF
Set objGroup = GetObject(objRecordSet.Fields("ADsPath").Value)
strGroupName = objRecordSet.Fields("Name").Value
If objGroup.GroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then
strGroupDesc = "Domain local "
ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
strGroupDesc = "Global "
ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then
strGroupDesc = "Universal "
Else
strGroupDesc = "Unknown "
End If
If objGroup.GroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then
TipoGrupo = "Security group"
Else
tipoGrupo = "Distribution group"
End If
' Check if there are members
err.clear
arrMemberOf = objGroup.GetEx("Member")
If Err.Number = E_ADS_PROPERTY_NOT_FOUND then
' Write a line to the outputfile with group properties and no members
objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & "<null>" & ";" & "<null>")
Else
' For each group member, get member properties
For Each strMemberOf in arrMemberOf
Set objMember = GetObject("LDAP://" & strMemberOf)
strMemberName = right(objMember.Name,len(objMember.Name)-3)
' Write a line to the outputfile with group and member properties
objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & tipoGrupo & ";" & strMemberName & ";" & objMember.sAMAccountName)
set objMember = nothing
Next
End If
objRecordSet.MoveNext
Set objGroup = nothing
Loop
objtextfile.close
wscript.echo "Done!" -
Leandro, Bom dia.
Teste este script, ele vai listar todos os grupos do AD e seus respectivos membros(um abaixo do outro) com Nome e SAN, so altere a linha MY_DOMAIN com seu dominio e pronto, o objeto que recupera o SAN dos usuarios é o objMember.sAMAccountName.
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objtextfile = objFSO.deleteFile("GruposAd.CSV")
Set objtextfile = objFSO.CreateTextFile("GruposAd.CSV", Forwritting)
Const ADS_SCOPE_SUBTREE = 8
Const MY_DOMAIN = "DC=DOMINIO,DC=COM"
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D
' Get a recordset of groups in AD
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") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT ADsPath, Name FROM 'LDAP://" & MY_DOMAIN & "' WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
' For each Group, Get group properties
Do Until objRecordSet.EOF
Set objGroup = GetObject(objRecordSet.Fields("ADsPath").Value)
strGroupName = objRecordSet.Fields("Name").Value
If objGroup.GroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then
strGroupDesc = "Domain local "
ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
strGroupDesc = "Global "
ElseIf objGroup.GroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then
strGroupDesc = "Universal "
Else
strGroupDesc = "Unknown "
End If
If objGroup.GroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then
TipoGrupo = "Security group"
Else
tipoGrupo = "Distribution group"
End If
' Check if there are members
err.clear
arrMemberOf = objGroup.GetEx("Member")
If Err.Number = E_ADS_PROPERTY_NOT_FOUND then
' Write a line to the outputfile with group properties and no members
objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & "<null>" & ";" & "<null>")
Else
' For each group member, get member properties
For Each strMemberOf in arrMemberOf
Set objMember = GetObject("LDAP://" & strMemberOf)
strMemberName = right(objMember.Name,len(objMember.Name)-3)
' Write a line to the outputfile with group and member properties
objtextfile.WriteLine(strGroupName & ";" & strGroupDesc & ";" & tipoGrupo & ";" & strMemberName & ";" & objMember.sAMAccountName)
set objMember = nothing
Next
End If
objRecordSet.MoveNext
Set objGroup = nothing
Loop
objtextfile.close
wscript.echo "Done!"- Sugerido como Resposta Gabriel S Almeida quarta-feira, 1 de novembro de 2017 13:30
-
Gabriel,
Boa tarde,
muito obrigado por responder,
o script que você me passou retorna todos os grupos do AD ?
O meu AD tem mais de 500 grupos, vai me retornar muita informação.
o script que eu postei quase faz o que eu preciso, eu informo o nome do grupo e ele cria um arquivo .csv ou .txt com o nome de cada membro do grupo, só que eu preciso do login de rede de cada membro e não o nome do usuário.
Exemplo:
o nome do usuário é "Gustavo Pereira"
o login do usuário é "gpereira"
o script me retorna o "Gustavo Pereira" e eu preciso do "gpereira"
o objeto que você me informou que retorna o que eu quero também está no meu script conforme a linha abaixo, sabe me informar se o objeto retorna o login do usuário mesmo ?
LDAPStr = "<LDAP://" & DomainContainer & ">;(&(objectclass=group)(objectCategory=group)(samaccountname=" & grupo & "));adspath;subtree"
essa é uma unica linha é que no post tem uma quebra automática
sabe como posso alterar o script para me retornar o que eu preciso ?
desde já o meu muito obrigado !
-
Leandro, eu nao testei o seu script mas tente alterar esta linha para .
Spmember = Split(strMember, ",", objMember.sAMAccountName,",")
Porem para apenas um grupo voce pode usar o net group
- Editado Gabriel S Almeida quarta-feira, 1 de novembro de 2017 20:16
-
-
-
Gabriel,
Bom dia,
acabei encontrando um script PowerShell que resolveu meu problema, segue o script.
Get-ADGroupMember -Identity nomedogrupo | ft SamAccountName -AutoSize |Out-File c:\list.txt
muito obrigado pela ajuda !
- Sugerido como Resposta Gabriel S Almeida sexta-feira, 10 de novembro de 2017 18:05
- Marcado como Resposta Leandro da Silva Almeida segunda-feira, 13 de novembro de 2017 14:59
-
Beleza é isso ai, marque como resposta o seu post para que ele seja fechado por favor.
- Marcado como Resposta Leandro da Silva Almeida segunda-feira, 13 de novembro de 2017 14:59
- Não Marcado como Resposta Leandro da Silva Almeida segunda-feira, 13 de novembro de 2017 14:59