none
Script Listar membros TANTO do grupo ADMINISTRATORS como ADMINISTRADORES RRS feed

  • Pergunta

  • Galera, tenho o seguinte script que cria uma listagem dos membros de um grupo Local e me salva em um arquivo TEXTO essas informacoes, porem se o Windows está em ingles tenho que colocar ADMINISTRATORS como grupo a ser listado e se o windows está em PORTUGUES tenho que alterar o Grupo para ADMINISTRADORES.

     

    A pergunta é, TERIA COMO EU AUTOMATIZAR ESSE PROCESSO E RODAR APENAS UM UNICO SCRIPT NA MINHA REDE, pois atualmente estou rodando 2 scripts, um para Windows em INGLES outros para Windows portugues, para 7000 maquinas e qdo o windows esta numa linguagem DIFERENTE do script executado ele me gera um arquivo em branco...

     

     

    Segue abaixo script:

     

    'INICIO DO SCRIPT

    Dim objDom,objNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

     
    on error resume next

    StrComputer = "." 'Computador a ser verificado, o PONTO significa que o computador a ser verificado é o LOCAL

    StrGroup = "Administradores" 'Verificar membros do Grupo Local AdministraDORES

    Local = "\\servidor\compartilhamento" 'Local para salvar o arquivo .CVS com os membros do grupo especificado

    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".csv"

    ActionList = "no"

    Set ObjFSO = CreateObject("Scripting.FileSystemObject")

    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)

    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)

    Set objNetwork = CreateObject("WScript.Network")

    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")

     

    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro

    AdsPathGroup = objGroup.AdsPath

    i = 0

    For Each objUser In objGroup.Members

     

    WriteLog WshNetwork.ComputerName &","& Ucase(objUser.name) &","& objUser.class

    ActionList = "yes"

     

    Next

     

    Function WriteLog (Text)

     ObjFileAppending.WriteLine Text

    End Function
    'FIM DO SCRIPT

     

    Se alguem puder ajudar, agradeço.

     

    Atenciosamente

    quarta-feira, 30 de julho de 2008 05:17

Respostas

  • Albert,

     

    Descubrir o problema na query WMI ("Select * From Win32_Group Where Domain = '" & StrComputer & "'") a variavel StrComputer deve alocar o nome do host e não um ponto "." ou o nome "localhost" deve ser realmente o nome da máquina se não ela executa mas fica louca como podemos ver mais cedo. Para isso devemos acrescentar aquelas linhas do objeto Netowork ai o script fica assim:

     

    Code Snippet

    on error resume next

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    StrComputer = WshNetwork.ComputerName


    Set objWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") 'VC DEVE SER ADMINISTRADOR DA MAQUINA E N PODE HAVER FIREWALL NO CAMINHO
      if Err.number <> 0 then
          'WriteLog StrComputer & vbTab & Err.Description & vbTab & "Tentando conecta-se via WMI ao PC remoto"
        Err.Clear
       wscript.quit
      End if  

    Set colAccounts = objWMIService.ExecQuery _
        ("Select * From Win32_Group Where Domain = '" & StrComputer & "'")

    For Each objAccount in colAccounts
     'wsh.echo objAccount.name
      If objAccount.SID ="S-1-5-32-544" Then 'Achou  o grupo administradores
         Set ObjAdministrador = GetObject("WinNT://" & strComputer & "/" & objAccount.Name & "")
         StrGroup = objAccount.Name
     End if
    Next

    Local = "" 'Local para salvar o arquivo .CVS com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"

    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
     
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")
    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath


    For Each objUser In objGroup.Members
     WriteLog WshNetwork.ComputerName &","& Ucase(objUser.name) &","& objUser.class
     ActionList = "yes"
    Next

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

     

     

     

     

    att,

     

    Leonardo Couto.

    quinta-feira, 31 de julho de 2008 17:10

Todas as Respostas

  • Ae man,

     

     

    Esse ai acha o grupo administradores da máquina automaticamente sem precisar mudar ADMINISTRADORES e ADMINISTRATORS, teste ai aqui ele foi sem erros:

     

    Code Snippet

    Dim objDom,objNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    on error resume next

    StrComputer = "wkstaspnoc002" 'Computador a ser verificado, o PONTO significa que o computador a ser verificado é o LOCAL

    Set objWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") 'VC DEVE SER ADMINISTRADOR DA MAQUINA E N PODE HAVER FIREWALL NO CAMINHO
      if Err.number <> 0 then
          'WriteLog StrComputer & vbTab & Err.Description & vbTab & "Tentando conecta-se via WMI ao PC remoto"
        Err.Clear
       wscript.quit
      End if  

    Set colAccounts = objWMIService.ExecQuery _
        ("Select * From Win32_Group Where Domain = '" & StrComputer & "'")

    For Each objAccount in colAccounts
     'wsh.echo objAccount.name
      If objAccount.SID ="S-1-5-32-544" Then 'Achou  o grupo administradores
         Set ObjAdministrador = GetObject("WinNT://" & strComputer & "/" & objAccount.Name & "")
         StrGroup = objAccount.Name
     End if
    Next

    Local = "" 'Local para salvar o arquivo .CVS com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"

    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
     
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")
    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath

    i = 0

    For Each objUser In objGroup.Members
     WriteLog WshNetwork.ComputerName &","& Ucase(objUser.name) &","& objUser.class
     ActionList = "yes"
    Next

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

     

    att,

     

    Leonardo Couto.

    quarta-feira, 30 de julho de 2008 17:57
  • Leo, tentei executar mas ele só ta gerando o arquivo em txt em branco... ta dando erro na linha 17 conforme abaixo em negrito:

     

    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")
    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath

     

    Que pode ser hein!? Tentei executa-lo no windows Ingles e Portugues.

     

     

    Valeu

     

     Leonardo Couto Conrado wrote:

    Ae man,

     

     

    Esse ai acha o grupo administradores da máquina automaticamente sem precisar mudar ADMINISTRADORES e ADMINISTRATORS, teste ai aqui ele foi sem erros:

     

    Code Snippet

    Dim objDom,objNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    on error resume next

    StrComputer = "wkstaspnoc002" 'Computador a ser verificado, o PONTO significa que o computador a ser verificado é o LOCAL

    Set objWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") 'VC DEVE SER ADMINISTRADOR DA MAQUINA E N PODE HAVER FIREWALL NO CAMINHO
      if Err.number <> 0 then
          'WriteLog StrComputer & vbTab & Err.Description & vbTab & "Tentando conecta-se via WMI ao PC remoto"
        Err.Clear
       wscript.quit
      End if  

    Set colAccounts = objWMIService.ExecQuery _
        ("Select * From Win32_Group Where Domain = '" & StrComputer & "'")

    For Each objAccount in colAccounts
     'wsh.echo objAccount.name
      If objAccount.SID ="S-1-5-32-544" Then 'Achou  o grupo administradores
         Set ObjAdministrador = GetObject("WinNT://" & strComputer & "/" & objAccount.Name & "")
         StrGroup = objAccount.Name
     End if
    Next

    Local = "" 'Local para salvar o arquivo .CVS com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"

    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
     
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")
    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath

    i = 0

    For Each objUser In objGroup.Members
     WriteLog WshNetwork.ComputerName &","& Ucase(objUser.name) &","& objUser.class
     ActionList = "yes"
    Next

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

     

    att,

     

    Leonardo Couto.

    quinta-feira, 31 de julho de 2008 10:54
  • Albert,

     

    Descubrir o problema na query WMI ("Select * From Win32_Group Where Domain = '" & StrComputer & "'") a variavel StrComputer deve alocar o nome do host e não um ponto "." ou o nome "localhost" deve ser realmente o nome da máquina se não ela executa mas fica louca como podemos ver mais cedo. Para isso devemos acrescentar aquelas linhas do objeto Netowork ai o script fica assim:

     

    Code Snippet

    on error resume next

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    StrComputer = WshNetwork.ComputerName


    Set objWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") 'VC DEVE SER ADMINISTRADOR DA MAQUINA E N PODE HAVER FIREWALL NO CAMINHO
      if Err.number <> 0 then
          'WriteLog StrComputer & vbTab & Err.Description & vbTab & "Tentando conecta-se via WMI ao PC remoto"
        Err.Clear
       wscript.quit
      End if  

    Set colAccounts = objWMIService.ExecQuery _
        ("Select * From Win32_Group Where Domain = '" & StrComputer & "'")

    For Each objAccount in colAccounts
     'wsh.echo objAccount.name
      If objAccount.SID ="S-1-5-32-544" Then 'Achou  o grupo administradores
         Set ObjAdministrador = GetObject("WinNT://" & strComputer & "/" & objAccount.Name & "")
         StrGroup = objAccount.Name
     End if
    Next

    Local = "" 'Local para salvar o arquivo .CVS com os membros do grupo especificado
    FileLog = Local & WshNetwork.ComputerName & "_" & StrGroup  & ".txt"
    ActionList = "no"

    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
     
    Set objNetwork = CreateObject("WScript.Network")
    Set objGroup = GetObject("WinNT://" & StrComputer & "/" & StrGroup & ",group")
    StrMemberAdsPath = "WinNT://" & StrComputer & "/" & StrMember ' AdsPath do Membro
    AdsPathGroup = objGroup.AdsPath


    For Each objUser In objGroup.Members
     WriteLog WshNetwork.ComputerName &","& Ucase(objUser.name) &","& objUser.class
     ActionList = "yes"
    Next

    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

     

     

     

     

     

     

    att,

     

    Leonardo Couto.

    quinta-feira, 31 de julho de 2008 17:10
  • Olá Albert tudo bem?

     

    Segue a minha solução testada e aprovada.

     

    1º - Crie uma pasta no servidor e compartilhe a mesma e defina as permissões para os grupos especificos.

    2º - Crie um arquivo .bat nesta pasta ou na pasta netlogon fica a seu critério como os seguintes parametros:

    hostname >> \\servidor\pasta\teste.txt   "vai pegar o nome da estação e colocar no arquivo"

    net localgroup administrators >> \\servidor\pasta\teste.txt "se tiver este grupo vai pegar os usuários dele"

    net localgroup administradores >> \\servidor\pasta\teste.txt "se tiver este grupo vai pegar os usuários dele"

    3º - No Active Directory cria uma GPO e aplica este scripts para os usuários.

     

    Realizei os testes aqui e funcionou corretamente.

     

    Espero ter ajudado

     

    Leonardo Duarte - MCP / MCSA

     

     

     

    terça-feira, 5 de agosto de 2008 12:28