Usuário com melhor resposta
Script para listar membro de um grupo mas para varios grupos ao mesmo tempo

Pergunta
-
Bom dia,
Pessoal, tenho uma necessidade de listar membros de varios grupos. Eu até tenho o script que lista os membros de um grupo mas quando executo o script ele lista os membros e grava um arquivo txt com o nome do grupo.
O problema é que tenho mais de 2000 grupos e não queira fazer isso grupo por grupo. Será que consigo adaptar o script para ler um arquivo txt com o nome dos grupos e depois gravar um txt com o nome de cada grupo?
Abaixo o scritp que uso para fazer manualmente.
groupName = inputbox("Please enter the name of the group:") FileName = groupName & ".txt" if groupName = "" then wscript.quit end if groupPath = getgrouppath(groupName) if groupPath = "" then wscript.echo "Unable to find the specified group in the domain" wscript.quit end if set objGroup = getobject(grouppath) set objFSO = createobject("scripting.filesystemobject") set objFile = objFSO.createtextfile(FileName) objFile.WriteLine("sAMAccountName") for each objMember in objGroup.Members objFile.WriteLine(objmember.samaccountname) next objFile.Close function getGroupPath(byval GroupName) set cmd=createobject("ADODB.Command") set cn=createobject("ADODB.Connection") set rs=createobject("ADODB.Recordset") cn.open "Provider=ADsDSOObject;" cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'" cmd.activeconnection = cn set rs = cmd.execute if rs.bof <> true and rs.eof<>true then getgrouppath=rs(0) else getgrouppath = "" end if cn.close end function function getNC set objRoot=getobject("LDAP://RootDSE") getNC=objRoot.get("defaultNamingContext") end function
Grato pela ajuda
- Editado Fábio JrModerator segunda-feira, 16 de julho de 2012 14:13 Formato do código
Respostas
-
Olha só vc inventou uma váriavel: strGroupName
O parametro do seu script é o GroupName, no do exemplo que te passei é strComputer. Estas são as variaveis com a principal informação do script.
Outra coisa, vc tirou a linha FileName = groupName & ".txt", sem ela onde é que vc vai gravar a informação?
Vc comentou um IF no inicio do script, veja que descomentei, ele é perfeito: Se não tiver parametro então sai do script.
Outro erro, na primeira linha a variavel setada como ".", no caso do meu script ela é util porque se o cara não passar parametro então considera o computador local- que é representado por "." - no seu caso coloque ele como em branco ("").
Não tenho ambiente pra testar seu script, tenta aí e me diga o resultado, de preferência com vc fez com prints.
GroupName="" if wscript.arguments.count>0 then GroupName=wscript.arguments(0) if groupName = "" then wscript.quit end if FileName = groupName & ".txt" groupPath = getgrouppath(groupName) if groupPath = "" then wscript.echo "Unable to find the specified group in the domain" wscript.quit end if set objGroup = getobject(grouppath) set objFSO = createobject("scripting.filesystemobject") set objFile = objFSO.createtextfile(FileName) objFile.WriteLine("sAMAccountName") for each objMember in objGroup.Members objFile.WriteLine(objmember.samaccountname) next objFile.Close function getGroupPath(byval GroupName) set cmd=createobject("ADODB.Command") set cn=createobject("ADODB.Connection") set rs=createobject("ADODB.Recordset") cn.open "Provider=ADsDSOObject;" cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'" cmd.activeconnection = cn set rs = cmd.execute if rs.bof <> true and rs.eof<>true then getgrouppath=rs(0) else getgrouppath = "" end if cn.close end function function getNC set objRoot=getobject("LDAP://RootDSE") getNC=objRoot.get("defaultNamingContext") end function
Fábio de Paula Junior
- Marcado como Resposta RCirino segunda-feira, 16 de julho de 2012 21:19
Todas as Respostas
-
Tente utilizar o que proponho neste link, se tiver alguma dificuldade retorne.
3 Scripts pelo preço de 1
social.technet.microsoft.com/Forums/pt/scriptadminpt/thread/b6f08152-33a2-43cd-8688-5da5d9471fed
O que eu fiz com strComputer você vai fazer com groupName.
Fábio de Paula Junior
-
-
Poste aqui como está seu script agora.
Executar uma linha de comando é o último passo, vc tem alterar seu script também para que ele aceite parametros, está tudo naquel post.
Fábio de Paula Junior
- Editado Fábio JrModerator segunda-feira, 16 de julho de 2012 14:58 add
-
-
-
então, modifiquei o script porém quando executo ele parece que lê o arquivo, mas não grava nada. Veja como ficou o script. Logo abaixo tem a saida dele no prompt
strGroupName="."
if wscript.arguments.count>0 then strGroupName=wscript.arguments(0)
'if groupName = "" then
' wscript.quit
'end if
groupPath = getgrouppath(groupName)
if groupPath = "" then
wscript.echo "Unable to find the specified group in the domain"
wscript.quit
end if
set objGroup = getobject(grouppath)
set objFSO = createobject("scripting.filesystemobject")
set objFile = objFSO.createtextfile(FileName)
objFile.WriteLine("sAMAccountName")
for each objMember in objGroup.Members
objFile.WriteLine(objmember.samaccountname)
next
objFile.Close
function getGroupPath(byval GroupName)
set cmd=createobject("ADODB.Command")
set cn=createobject("ADODB.Connection")
set rs=createobject("ADODB.Recordset")
cn.open "Provider=ADsDSOObject;"
cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _
"' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'"
cmd.activeconnection = cn
set rs = cmd.execute
if rs.bof <> true and rs.eof<>true then
getgrouppath=rs(0)
else
getgrouppath = ""
end if
cn.close
end functionfunction getNC
set objRoot=getobject("LDAP://RootDSE")
getNC=objRoot.get("defaultNamingContext")
end function.
-
Olha só vc inventou uma váriavel: strGroupName
O parametro do seu script é o GroupName, no do exemplo que te passei é strComputer. Estas são as variaveis com a principal informação do script.
Outra coisa, vc tirou a linha FileName = groupName & ".txt", sem ela onde é que vc vai gravar a informação?
Vc comentou um IF no inicio do script, veja que descomentei, ele é perfeito: Se não tiver parametro então sai do script.
Outro erro, na primeira linha a variavel setada como ".", no caso do meu script ela é util porque se o cara não passar parametro então considera o computador local- que é representado por "." - no seu caso coloque ele como em branco ("").
Não tenho ambiente pra testar seu script, tenta aí e me diga o resultado, de preferência com vc fez com prints.
GroupName="" if wscript.arguments.count>0 then GroupName=wscript.arguments(0) if groupName = "" then wscript.quit end if FileName = groupName & ".txt" groupPath = getgrouppath(groupName) if groupPath = "" then wscript.echo "Unable to find the specified group in the domain" wscript.quit end if set objGroup = getobject(grouppath) set objFSO = createobject("scripting.filesystemobject") set objFile = objFSO.createtextfile(FileName) objFile.WriteLine("sAMAccountName") for each objMember in objGroup.Members objFile.WriteLine(objmember.samaccountname) next objFile.Close function getGroupPath(byval GroupName) set cmd=createobject("ADODB.Command") set cn=createobject("ADODB.Connection") set rs=createobject("ADODB.Recordset") cn.open "Provider=ADsDSOObject;" cmd.commandtext = "SELECT adspath from 'LDAP://" & getnc & _ "' WHERE objectCategory = 'Group' and sAMAccountName = '" & groupname & "'" cmd.activeconnection = cn set rs = cmd.execute if rs.bof <> true and rs.eof<>true then getgrouppath=rs(0) else getgrouppath = "" end if cn.close end function function getNC set objRoot=getobject("LDAP://RootDSE") getNC=objRoot.get("defaultNamingContext") end function
Fábio de Paula Junior
- Marcado como Resposta RCirino segunda-feira, 16 de julho de 2012 21:19
-
esses grupos são do ad ou locais você pode tentar powershell é muito facil...
se for AD roda isso no powershell como ADMimport-module activedirectory
para trazer todos
Get-ADGroup -Filter * | %{$Grupo = $_.DistinguishedName ; echo "$Grupo" >> c:\$Grupo.txt ; Get-ADGroupMember $Grupo | %{echo "$_.DistinguishedName" >> c:\$Grupo.txt } }Se quiser só o nome simples dos objetos use
Get-ADGroup -Filter * | %{$Grupo = $_.Name ; echo "$Grupo" >> c:\$Grupo.txt ; Get-ADGroupMember $Grupo | %{echo "$_.Name" >> c:\$Grupo.txt } }
Meu Blog: http://howtoserver.com Minhas Ceritificações: 73-642,73-640
- Editado Matheus Kamphorst segunda-feira, 16 de julho de 2012 16:38
-