Узнайте, является ли имя диспетчера учетных записей безопасности (SAM) пользователем или группой

отредактировано от исходного вопроса, потому что реальная проблема была чем-то не связанным с вопросом

Я получил список доверенных лиц из разрешений NTFS, и теперь я хочу расширить группы, чтобы показать членство. Если у меня есть имя SAM, такое как MyDomain\name, нет никаких указаний на то, является ли это группой или нет. Команда Get-ADobject имеет свойство ObjectClass, которое будет указывать группу или пользователя, если это объект домена Active Directory. Можно использовать:Get-ADObject -filter 'SamAccountName -eq "My Users"' или же$sam = "My Users"Get-ADObject -filter 'SamAccountName -eq $sam'Спасибо JPBlanc, у которого была альтернативная форма написания этого с блоком сценария и некоторыми другими предложениями. И спасибо, пользователь 2142466. Это похоже на хорошее предложение для моего оригинального сценария.

4 ответа

Решение

Вы можете использовать переменную используя:

$sam = "My Users"
Get-ADObject -Filter {(SamAccountName -eq $sam)}

Но я согласен, что использование Vars в -Filter иногда приводит к странному поведению с переменными ( см. этот вопрос), поэтому я предпочитаю использовать -LDAPFilter,

Get-ADObject -LDAPFilter "(SamAccountName =$user)"

Будьте осторожны: -LDAPFilter использует польскую нотацию для фильтра, это немного смущает в начале, но здесь это естественный способ фильтрации с использованием нижележащего протокола LDAP.

Вы можете получить больше информации об этом синтаксисе в синтаксисе фильтра поиска, вы также можете получить соответствующие фильтры в About_ActiveDirectory_Filter.

Я предполагаю, что вы получаете множество опекунов. (т.е. пользователь, группа, пользователь, пользователь, группа). Так что, если у вас есть группа, то вы тоже хотите от нее оторваться?

Поэтому я хотел бы посмотреть, является ли это группа, например, как у вас дела сначала, а затем вытаскивать этих членов из нее. Добавьте его в другой массив, который будет содержать каждого пользователя для ваших разрешений NTFS.

$arraytrustees

#Create a blank Array

$NTFSUsers =@()
for each ($object in $arraytrustees){

$ObjectClass = (Get-ADObject -filter {SamAccountName -eq $object}).ObjectClass

  If ($ObjectClass -eq "group"){
  $AdGroupUsers = (Get-ADGroupMember -identity $object).SamAccountName
  $NTFSUsers = $NTFSUsers + $AdGroupUsers
   }else{
    $NTFSUsers = $NTFSUsers + $ojbect
  }
}

Я получил список, и меня попросили определить, были ли объекты пользователями или группой, и я придумал это. Это сработало!

cls
$Users = @()
$Groups = @()
$list = Get-Content z:\pcm.txt
Foreach ($o in $list)
{
$ObjectClass = (Get-ADObject -Filter {SamAccountName -eq $o}).ObjectClass
  If ($ObjectClass -eq "User")
  {
  $U = Get-ADUser -Properties * -Identity $o
  $User = "" | Select FullUserName, LoginID, Description
  $User.FullUserName = $U.DisplayName
  $User.LoginID = $U.SamAccountName
  $User.Description = $U.description
  $Users += $User
  }
 Else
 {
 If ($ObjectClass -eq "Group")
 {
 $G = Get-ADGroup -Properties * -Identity $o
 $Group = "" | Select GroupName, Description
 $Group.GroupName = $G.Name
 $Group.Description = $G.Description
 $Groups += $Group
 }
}
}
$Users | Export-Csv z:\Users.csv -NoTypeInformation
$Groups | Export-Csv z:\Groups.csv -NoTypeInformation

Меня попросили перечислить всех членов групп, а также их ID, имя и описание, поэтому я добавил пару строк.

cls
$Users = @()
$Groups = @()
$list = Get-Content z:\pcm2.txt
Foreach ($o in $list)
{
$ObjectClass = (Get-ADObject -Filter {SamAccountName -eq $o}).ObjectClass
  If ($ObjectClass -eq "User")
  {
  $U = Get-ADUser -Properties * -Identity $o
  $User = "" | Select FullUserName, LoginID, Description
  $User.FullUserName = $U.DisplayName
  $User.LoginID = $U.SamAccountName
  $User.Description = $U.description
  $Users += $User
  }
 Else
 {
 If ($ObjectClass -eq "Group")
 {
 $G = Get-ADGroup -Properties * -Identity $o
 $GM = Get-ADGroupMember -Identity $G.name -Recursive | Get-ADUser -Properties *
 Foreach ($gmember in $GM)
 {
 $Group = "" | Select GroupName, GroupDescription, GroupMemberName, GroupMemberLoginID, GroupMemberDesc
 $Group.GroupName = $G.Name
 $Group.GroupDescription = $G.Description
 $Group.GroupMemberName = $gmember.Name
 $Group.GroupMemberLoginID = $gmember.SamAccountName
 $Group.GroupMemberDesc = $gmember.Description
 $Groups += $Group
 }
}
}
}
$Users | Export-Csv z:\PCMUsers.csv -NoTypeInformation
$Groups | Export-Csv z:\PCMGroups.csv -NoTypeInformation
Другие вопросы по тегам