Como posso visualizar informações de grupos de domínio a partir da linha de comando apenas com os principais utilitários do Windows?

3

Estou familiarizado com o uso dos comandos NET para obter informações para usuários e grupos locais na maioria dos cenários. No entanto, estou correndo em um problema usando-o para obter informações para grupos de domínio com nomes longos. A saída do NET USER parece limitar os nomes dos grupos em cerca de 20 caracteres, e eu não encontrei uma maneira de usar o NET GROUP para obter informações sobre quaisquer grupos que têm nomes mais longos que isso.

Certamente, em minha própria estação de trabalho, posso usar os utilitários de Ferramentas de Administração Remota do Servidor (por exemplo, comandos "ds ..." ou o módulo Active Directory no PowerShell) para obter as informações de que preciso. No entanto, também quero ser capaz de pesquisar detalhes de grupos de domínio de outros sistemas que podem não ter o RSAT e nos quais posso não ter permissão para instalar ferramentas adicionais.

Embora a solução do problema com o comando NET GROUP seja interessante, não estou necessariamente limitado a essa ferramenta. No entanto, preciso limitar-me apenas às ferramentas disponíveis em uma instalação principal dos sistemas operacionais Windows 7 (ou semelhantes) para que eu possa facilmente transportar a solução em diferentes computadores, onde a adição de outras ferramentas pode não ser uma opção. Se há uma maneira de fazer isso com algo como WMIC ou PowerShell sem os módulos adicionais do RSAT, estou definitivamente interessado em ouvir sobre isso.

Exemplo: "MyReallyLongDomainGroupName" é um membro do grupo Admins local. Então, quem tem acesso de administrador ao sistema? Ou "AnotherVerboseDomainGroupName" está em algumas permissões de compartilhamento de arquivos - quem tem acesso a esse compartilhamento?

    
por Iszi 12.11.2014 / 21:09

4 respostas

4

O antigo comando NET ainda tem limitações da era do Windows NT em que foi criado. Para manipular nomes mais longos, é melhor usar os vários ds... commands dsquery , dsmod , etc ou ferramentas de terceiros como adfind . Você não terá limitações de tamanho de nome.

Editar:

As ferramentas ds são EXEs independentes que, enquanto presentes no RSAT, podem ser copiados livremente. Mesmo assim, porque quero honrar o espírito do seu pedido, aqui está um script Powershell que conta com a interface ADSI (presente no Windows sem exigir que o RSAT seja instalado - é um componente básico do sistema operacional) que irá enumerar a associação de um grupo.

# iADSNameTranslate constants
$ADS_NAME_INITTYPE_GC = 3
$DISTINGUISHEDNAME = 1
$DOMAINSIMPLE = 5
$UNKNOWN = 8

if ($args.count -ne 1) { "'nUsage: ./GroupEnum.ps1 <DOMAIN\groupName>'n"; Exit; }

$ns = New-Object -ComObject NameTranslate

[System.__ComObject].InvokeMember(“init”, ”InvokeMethod”, $null, $ns, ($ADS_NAME_INITTYPE_GC, $null))
[System.__ComObject].InvokeMember(“Set”, ”InvokeMethod”, $null, $ns, ($UNKNOWN, $args[0]))
$dn = [System.__ComObject].InvokeMember(“Get”, ”InvokeMethod”, $null, $ns, $DISTINGUISHEDNAME)

$Group = [ADSI]"LDAP://$dn"
if ($Group.SchemaClassName -eq "group") {
    $Group.Member | ForEach-Object { 
        $x = [ADSI]"LDAP://$_" 
        if ($x.SchemaClassName -eq "user") { $x.sAMAccountName }
    }
}

Eu testei isso com uma conta de usuário limitada em uma máquina com Windows 7 x64 SP1 com nenhum RSAT instalado. Eu testei com um grupo chamado "123456789012345678901234567890123456789012345678901234567890", também.

Não há absolutamente nenhuma verificação de erros neste script.

    
por 12.11.2014 / 21:21
4

Adicionando outra resposta, já que minha resposta atual é baseada nos grupos de usuários conectados no momento ... e o OP declarou em um comentário:

Example: "MyReallyLongDomainGroupName" is a member of the local Admins group. So, who has admin access to the system? Or "AnotherVerboseDomainGroupName" is in some file share permissions - who has access to that share?

Então, aqui vai você ... Eu testei isso de uma conta de usuário comum em uma estação de trabalho Win7:

Da linha RUN (win + R)

Rundll32 dsquery.dll OpenQueryWindow

Isso deve abrir uma janela de consulta do AD onde você pode encontrar o grupo em questão ... clique duas vezes no grupo ... e veja os usuários no grupo.

    
por 13.11.2014 / 15:21
3

OK, então sabendo que você quer ferramentas não-RSAT de um computador de domínio que não é sua estação de trabalho, então eu vou fazer uma suposição de que você está querendo descobrir os grupos que o usuário naquela estação de trabalho é um membro de .

Se esse for o caso, há algumas opções em que posso pensar:

  1. você pode executar WHOAMI /GROUPS
  2. Você pode executar mstsc e rdp em sua estação de trabalho ou em um controlador de domínio e usar ferramentas normais
  3. Você pode executar gpresult /R /SCOPE USER

Tudo isso, é claro, exige que você esteja no domínio com o computador capaz de consultar um DC.

Espero que ajude ... melhor que eu possa pensar no momento.

    
por 13.11.2014 / 02:14
3

Você pode usar o Powershell.

Get-ADGroup -Filter '*'
Get-ADGroup -Filter '*' | Select-Object Name

O primeiro apenas imprime um monte de detalhes sobre os grupos. O segundo imprime apenas seus nomes.

EDITAR: Se o módulo ActiveDirectory estiver disponível apenas por meio do RSAT, aqui está uma solução .net .

$dn = New-Object System.DirectoryServices.DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","Username","PWD")
$dsLookFor = new-object System.DirectoryServices.DirectorySearcher($dn)
$dsLookFor.Filter = "(&(objectCategory=group))"; 
$dsLookFor.SearchScope = "subtree"; 
$n = $dsLookFor.PropertiesToLoad.Add("cn"); 
$n = $dsLookFor.PropertiesToLoad.Add("distinguishedName");
$n = $dsLookFor.PropertiesToLoad.Add("sAMAccountName");

$lstUsr = $dsLookFor.findall()
foreach ($usrTmp in $lstUsr) 
{
  Write-Host $usrTmp.Properties["samaccountname"]
}
    
por 12.11.2014 / 22:15