1

Я пытаюсь настроить скрипт, чтобы найти всю информацию о разрешениях файловых ресурсов в нашей сети.

На данный момент у меня есть скрипт Powershell, который делает это, но он включает в себя группы, пользователей, учетную запись SID, все.

Я вручную отфильтровал учетные записи SID, но мне было интересно, есть ли в нем объект Select, позволяющий отображать только информацию о группах Active Directory? Вот фрагмент кода, который у меня есть на данный момент:

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

Возможно, что-то вроде objectClass-подобной " группы "??

2 ответа2

0

Я задал этот вопрос также на TechNet, поэтому для всех, кто интересуется моим решением, которое я использую - вот оно:

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

Это работало только для того, чтобы возвращать элементы группы AD.

0

Вы не можете получить информацию, которую вы ищете, непосредственно из IdentityReference, но если вы добавите в нее некоторую логику (в отличие от направления, которое вы уже направлялись, чтобы отфильтровать учетные записи SID), вы можете сузить ее до просто объектов 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
    }
  }
}

Большая часть работы здесь выполняется с помощью этого заявления "если". Тестирование на обратную косую черту гарантирует, что объект является частью какого-либо домена (локального или AD или другого). Затем он выбрасывает локальные домены, которые я видел при тестировании.

В моем случае этого было достаточно, чтобы убедиться, что я всегда получаю объекты AD, будь то пользователи или группы, и после этого довольно просто получить ADObject и протестировать его объектный класс.

Если вы собираетесь делать это в среде только с одним доменом, вы можете изменить оператор if, чтобы искать только его, что сократит количество тестов, например:

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

Вы также можете пойти дальше и получить реальный объект ADGroup и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .