Script do PowerShell para listar usuários, grupos, permissões, etc. de um servidor

3

Estou procurando um script do PowerShell que consulte e envie todos os usuários, contas de serviço e grupos locais e do AD em determinados servidores do Windows. Eu preciso do script para listar recursivamente os membros de cada grupo que tem privilégios nesse servidor. Estou procurando um roteiro que me proporcione um bom ponto de partida para que eu possa adaptá-lo às minhas necessidades específicas. Obrigado.

    
por teancum144 08.01.2014 / 00:13

1 resposta

5

Eu estava entediado em uma pausa para o almoço, então eu fiz isso para você.

$strLocalMachine = $env:computername

$arrLocalGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '$strLocalMachine'"
$arrDomainGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'"

ECHO ""
ECHO "Local Groups"
ECHO ""

foreach($objLocalGroup in $arrLocalGroups)
{
$groupname = $objLocalGroup.Name

$group = [ADSI]"WinNT://./$groupname"
ECHO "-----$($objLocalGroup.caption)-----"
@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
}


ECHO ""
ECHO "Domain Groups"
ECHO ""


foreach($objDomainGroup in $arrDomainGroups)
{
$groupname = $objDomainGroup.name

$groupmembers = Get-QADGroupMember $groupname
ECHO "-----$groupname-----"
foreach($entry in $groupmembers)
    {
    IF($entry.type -eq 'group')
        {
        Echo "$($entry.name)'n    GROUP MEMBERS"
        $subgroupmembers = Get-QADGroupMember $($entry.name)
        foreach($member in $subgroupmembers){ECHO "    $($member.name)"}
        }
    else{echo "$($entry.name)"}
    $entry = $null
    }
}
  1. Isso tem uma dependência para os commandlets gratuitos da Quest para enumerar as associações de grupos de domínio . Você poderia alterá-lo para fazer o mesmo com os cmdlets do Microsoft AD, caso tenha instalado o RSAT ou executado em um DC.

  2. Eu não testei isso em várias máquinas, então não posso prometer o quão bem ele vai funcionar além do meu teste Win 7 box, mas isso deve ser ok, enquanto você estiver executando como administrador de domínio.

  3. Sinto que a saída dos grupos de domínios é muito alta para o PC membro do domínio. O comando Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'" retornou muito mais do que eu esperava para o YMMV, mas se eles são os grupos corretos, ele deve percorrer e listar as naves-membro.

  4. Não consigo descobrir como identificar se os membros dos grupos locais são um usuário ou grupo. A linha: @($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} deve nos permitir invocar outro nome que não seja o nome, mas não consigo fazê-lo funcionar. Se alguém puder esclarecer isso para você, você poderá usar isso para listar os membros dos grupos locais.

espero que isso ajude.

    
por 09.01.2014 / 14:29

Tags