0

我的任务是确保所有管理员都拥有正确的权限。我们有几个管理员组,所以我想做的是使用 powershell 和 dsquery 从这些组中提取所有用户并将它们放入一个数组中。用户可能在一个以上的管理员分组中,所以我只想要每个用户中的一个。然后,我将使用 dsget 获取有关所有用户的更多信息并将其输出到 css。我坚持这样一个事实,即我无法正常工作。在我有这个用户列表之后,应该是向前的。

$admingroups = @("Group 1","Group 2","Group 3","Group 4")
$adminnames = @()

foreach ($adming in $admingroups) { 
  $admin = (&dsquery group -samid $adming -limit 0 | dsget group -members -expand)
  if ($adminnames -contains $admin) {
    write-host "Dupes"
  }Else{
    $adminnames += $admin
  }
}
4

2 回答 2

0

我一直在看你的逻辑,不能把我的手指放在我认为完全错误的地方。它主要是你的名字 varialble $admin-contains应该检查一个元素是否是数组的一部分。来自about_Comparison_Operators

描述:收容操作员。判断参考值集合是否包含单个测试值

但是,您可以同时拥有$adminnames并且$admin是数组。首先你dsquery会返回和数组DistinguishedName。为了使您的逻辑正常工作,您必须遍历每个逻辑才能-contains执行您期望的操作。

你必须使用dsquery这些信息吗?一些内置的 cmdlet 可以轻松处理此问题。

$groups = @("group 1","group 2")
$groups | ForEach-Object{Get-ADGroupMember -Identity $_} | Sort-Object -Unique | Select -ExpandProperty DistinguishedName

如果您仍然想使用,dsquery我仍然会使用Sort-Object.

foreach ($adming in $admingroups) { 
     $adminnames += (&dsquery group -samid $adming -limit 0 | dsget group -members -expand)
}
$adminnames | Sort-Object -Unique 

如果您想知道与您已有的相似的重复项,您可以比较计数。

$uniqueAdminNames = $adminnames | Sort-Object -Unique
Write-Host "Ignored $($adminnames.Count - $uniqueAdminNames.Count) duplicate(s)"
于 2014-10-08T03:17:49.777 回答
0

那么,您想查看,对于每个管理员用户,他们属于哪些管理员组?

但是,您的主要问题是(如果我错了,请纠正我):
鉴于您通过查询每个管理员组来检索整个管理员用户列表,您可能有重复项,那么如何删除重复项?

在这种情况下,问题是您缺少一个 ForEach 循环:

$AdminGroups = @("Group 1","Group 2","Group 3","Group 4")
$AdminNames = @()

ForEach ($Group in $AdminGroups) {
    $AdminsInGroup = @( dsquery group -samid $Group -limit 0 | dsget group -members -expand )

    ForEach( $Admin in $AdminsInGroup ) {
        if( $AdminNames -contains $Admin ) {
            Write-Host "Dupes"
        } else {
            $AdminNames += $Admin
        }
    }
}

或者,Select-Object 有一个“-unique”参数:

$AdminGroups = @("Group 1","Group 2","Group 3","Group 4")
$AdminNames = @()

ForEach ($Group in $AdminGroups) {
    $AdminsInGroup = @( dsquery group -samid $Group -limit 0 | dsget group -members -expand )

    $AdminNames += $AdminsInGroup
}

$AdminNames = @( $AdminNames | Select -Unique )
于 2014-10-08T06:51:13.987 回答