找出安全帐户管理器(SAM)名称是用户还是组

时间:2013-10-08 00:52:34

标签: powershell active-directory 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,他有一个替代的写作形式,带有脚本块和其他一些建议。 谢谢,user2142466。这看起来像是我原始剧本的一个很好的建议。

4 个答案:

答案 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