none
Como exportar os usuarios membros de grupos locais usando Power Shell com Delimitadores RRS feed

  • Pergunta

  • Ola Pessoal, gostaria de ajuda com o seguinte script Power Shell encontrado no internet e modificado por mim...

    $Result = @()

    foreach($server in (gc C:\temp\ListaServidores.txt)){

     

    $computer = [ADSI](”WinNT://” + $server + “,computer”)

    $Group = $computer.psbase.children.find(”Administrators”)

    $Group1 = $computer.psbase.children.find(”Power Users”)

    $Group2 = $computer.psbase.children.find(”Remote Desktop Users”)

     

    function getAdmins

    {$members = ($Group.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')

    $members}

     

    function getPower

    {$members = ($Group1.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')

    $members}

     

    function getRemoteDesk

    {$members = ($Group2.psbase.invoke(”Members”) | %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')

    $members}

     

    $Result += Write-Output '***************************************************************************'

    $Result += Write-Output "SERVER: $server"

    $Result += Write-Output ' '

    $Result += Write-Output 'Membro de Administrators'

    $Result += ( getAdmins )

    $Result += Write-Output ' '

    $Result += Write-Output 'Membro de Power Users'

    $Result += ( getPower )

    $Result += Write-Output ' '

    $Result += Write-Output 'Membro de Remote Desktop Users'

    $Result += ( getRemoteDesk )

    $Result += Write-Output ' '

    }

     

    $Result > C:\temp\Resultado.txt

     

    Através deste script, obtenho uma lista de todos os usuários membros dos grupos  Administradores, Power Users e Remote Desktop Users, ele lê os serves da listaservidores.txt e grava no arquivo Resultado.txt conforme exemplo abaixo:

    ***************************************************************************

    SERVER: VM-TESTE

     

    Membro de Administrators

    DOMINIO/VM-TESTE/Administrator

    DOMINIO/Domain Admins

    DOMINIO/Administrator

     

    Membro de Power Users

    DOMINIO/Usuario

     

    Membro de Remote Desktop Users

    DOMINIO/Domain Admins

     

    O que acontece é que não estou conseguindo configurar o script para gravar em CSV com delimitadores e abrir com o Excel. Gostaria que as informações coletadas ficassem no arquivo da seguinte maneira como no exemplo abaixo:

     

    SERVER, GRUPO, USUARIOS

    VM-TESTE, Membro de Administrators, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,

    VM-TESTE, Membro de Power Users, DOMINIO/Usuario,

    VM-TESTE, Membro de Remote Desktop Users, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,

    VM-AJUDA, Membro de Administrators, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,

    VM-AJUDA, Membro de Power Users, DOMINIO/Usuario, DOMINIO/Usuario2, DOMINIO/Usuario2,

    VM-AJUDA, Membro de Remote Desktop Users, DOMINIO/VM-TESTE/Administrator, DOMINIO/Domain Admins, DOMINIO/Administrator,

     

     

    Será que deu para entender a lógica, desta forma posso importar para o Excel utilizando a “,” como delimitador ficando desta forma o layout abaixo:

     

    SERVER

      GRUPO

      USUARIOS

       

    VM-TESTE

      Membro de Administrators

      DOMINIO/VM-TESTE/Administrator

      DOMINIO/Domain Admins

      DOMINIO/Administrator

    VM-TESTE

      Membro de Power Users

      DOMINIO/Usuario

       

    VM-TESTE

      Membro de Remote Desktop Users

      DOMINIO/VM-TESTE/Administrator

      DOMINIO/Domain Admins

      DOMINIO/Administrator

    VM-AJUDA

      Membro de Administrators

      DOMINIO/VM-TESTE/Administrator

      DOMINIO/Domain Admins

      DOMINIO/Administrator

    VM-AJUDA

      Membro de Power Users

      DOMINIO/Usuario

      DOMINIO/Usuario2

      DOMINIO/Usuario2

    VM-AJUDA

      Membro de Remote Desktop Users

      DOMINIO/VM-TESTE/Administrator

      DOMINIO/Domain Admins

      DOMINIO/Administrator

     

     

      Será que alguém pode me auxiliar nesta dúvida, caso tenham alguma outra alternativa ou ideia também é válida.

     

     

    Desde já agradeço a atenção..

     

    Jeferson

     

    quarta-feira, 9 de junho de 2010 17:21

Respostas

  • Jefeson,

    Apenas altere a parte de output como no script a seguir:

    $Result = @() 
    
    foreach($server in (gc C:\temp\ListaServidores.txt)){ 
    
        $computer = [ADSI](”WinNT://” + $server + “,computer”) 
    
        $Group = $computer.psbase.children.find(”Administradores”) 
    
        $Group1 = $computer.psbase.children.find(”Power Users”) 
    
        $Group2 = $computer.psbase.children.find(”Remote Desktop Users”) 
    
      
    
        function getAdmins {
            $members = ($Group.psbase.invoke(”Members”) | 
                %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
            $members
        } 
    
      
    
        function getPower {
            $members = ($Group1.psbase.invoke(”Members”) | 
                %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
     
            $members
        } 
    
      
    
        function getRemoteDesk {
            $members = ($Group2.psbase.invoke(”Members”) | 
                %{$_.GetType().InvokeMember(”Adspath”, ‘GetProperty’, $null, $_, $null)}) -replace ('WinNT://DOMAIN/' + $server + '/'), '' -replace ('WinNT://DOMAIN/', 'DOMAIN\') -replace ('WinNT://', '')
     
            $members
        } 
    
    
    
        $Result += "SERVER;GRUPO;USUARIO"
        $Result += "$Server;Administrators;"+[string]::join(";",(getAdmins))
        $Result += "$Server;Power Users;"+[string]::join(";",(getPower))
        $Result += "$Server;Remote Desktop Users;"+[string]::join(";",(getRemoteDesk))
    
    } 
    
      
    
    $Result > C:\temp\Resultado.txt 
    

    ---------------------------

    Mutirão de Respostas

    ---------------------------


    Fábio de Paula Junior

    terça-feira, 27 de novembro de 2012 15:25
    Moderador