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.