Select-Object apenas para grupos do AD

1

Estou tentando configurar um script para encontrar todas as informações de permissão de compartilhamentos de arquivos em nossa rede.

No momento, tenho um script Powershell que faz isso, mas inclui grupos, usuários, conta SID, tudo.

Eu tenho manualmente filtrado para contas SID, mas eu queria saber se existe um Select-Object para fazer com que apenas as informações dos grupos do Active Directory possam ser exibidas? Aqui está um trecho do código que tenho no momento:

$ACLs = get-acl $Folder.FullName |
ForEach-Object {$_.Access} |
Where {$_.IdentityReference -notlike "*S-1-5*"}

Talvez algo nos moldes de objectClass, como " grupo " ??

    
por The Woo 08.08.2014 / 02:03

2 respostas

0

Também fiz essa pergunta no TechNet, para quem estiver interessado na minha solução que estou usando - aqui está:

$ACLs = get-acl $Folder.FullName |
ForEach-Object {$_.Access} |
Where {$_.IdentityReference -notlike "*S-1-5*" -and (dsquery group -samid $_.IdentityReference.Value.Split("\")[1])}

Isso funcionou apenas para retornar os itens AD do 'grupo'.

    
por 12.08.2014 / 05:20
0

Você não pode obter as informações que está procurando diretamente da IdentityReference, mas se você lançar alguma lógica (não muito diferente da direção que você já estava indo para filtrar as contas SID), você pode reduzi-la a apenas Objetos AD.

(Get-Acl -Path $Folder.FullName | ForEach-Object {
  [string]$Identity = $_.IdentityReference
  if ($Identity -like '*\*' -and $Identity -notlike 'BUILTIN*' -and $Identity -notlike 'NT AUTHORITY*') {
    $SamAccountName = $Indentity.Split('\')[1]
    $ADObject = Get-ADObject -Filter ('SamAccountName -eq "{0}"' -f $SamAccountName)
    if ($ADObject.ObjectClass -eq 'group') {
      $Identity
    }
  }
}

A maior parte do trabalho aqui é feita por essa instrução "if". O teste de uma barra invertida garante que o objeto faça parte de um domínio de algum tipo (local ou AD ou outro). Em seguida, ele lança fora os domínios locais que eu estava vendo no meu teste.

No meu caso, isso foi o suficiente para garantir que eu estivesse sempre obtendo objetos do AD, sejam eles usuários ou grupos, e depois disso é muito simples obter o ADObject e testar sua classe de objeto.

Se você estiver fazendo isso em um ambiente com apenas um domínio, você pode alterar a instrução if para procurar apenas isso, o que reduziria o número de casos de teste, por exemplo:

if ($Identity -like 'test.domain.com\*)

Você também pode levar isso adiante e obter o objeto ADGroup real, etc.

    
por 09.08.2014 / 14:45