我的任务是确保所有管理员都拥有正确的权限。我们有一些管理组,所以我要做的就是使用powershell和dsquery从这些组中提取所有用户并将它们放入一个数组中。用户可能在多个管理员组中,因此我只想要每个用户中的一个。然后我会使用dsget获取所有用户的更多信息并将其输出到css。我坚持认为我不能让 - 包含正常工作。在我有这个用户列表后,reast应该是前进的。
$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
}
}
答案 0 :(得分:0)
我一直在看你的逻辑,不能指责我认为完全错误的东西。它主要是变量$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)"
答案 1 :(得分: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 )