Узнайте, является ли имя диспетчера учетных записей безопасности (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