从原始问题编辑,因为真正的问题与问题
无关我从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,他有一个替代的写作形式,带有脚本块和其他一些建议。
谢谢,user2142466。这看起来像是我原始剧本的一个很好的建议。
答案 0 :(得分:2)
您可以使用变量:
$sam = "My Users"
Get-ADObject -Filter {(SamAccountName -eq $sam)}
但我同意在-Filter
中使用vars有时会导致vars(see this question)的奇怪行为,所以我更喜欢使用-LDAPFilter
。
Get-ADObject -LDAPFilter "(SamAccountName =$user)"
小心-LDAPFilter对过滤器使用波兰表示法,它在开头有点令人不安,但在这里,这是使用底层协议LDAP过滤的自然方式。
您可以在Search Filter Syntax中获得有关此语法的更多信息,您也可以在About_ActiveDirectory_Filter中获得相应的过滤器。
答案 1 :(得分:1)
我猜你正在获得一系列受托人。 (即用户,组,用户,用户,组)。所以,如果你有一个小组,那么你也想从中吸引成员吗?
所以我会看看它是否是一个群体,就像你先做的那样,然后将这些成员拉出来。将它添加到另一个数组中,该数组将包含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
}
}
答案 2 :(得分:0)
我收到了一个列表,并被要求确定对象是用户还是组,我想出了这个。它奏效了!
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
答案 3 :(得分:0)
我被要求列出这些组的所有成员,以及他们的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