Powershell/dsquery组数组中的用户拉列表使用唯一用户创建一个数组
我的任务是确保所有管理员都有正确的权限。我们有几个管理组,所以我想我应该做的是使用powershell和dsquery从这些组中提取所有用户,并将它们放入一个数组中。该用户可能在多个管理员组中,因此我只需要每个用户中的一个。然后,我将使用dsget获取所有用户的更多信息,并将其输出到css。我被一个事实所困扰,那就是我不能正常工作。在我有了这个用户列表后,重新开始应该是向前的Powershell/dsquery组数组中的用户拉列表使用唯一用户创建一个数组,powershell,dsquery,Powershell,Dsquery,我的任务是确保所有管理员都有正确的权限。我们有几个管理组,所以我想我应该做的是使用powershell和dsquery从这些组中提取所有用户,并将它们放入一个数组中。该用户可能在多个管理员组中,因此我只需要每个用户中的一个。然后,我将使用dsget获取所有用户的更多信息,并将其输出到css。我被一个事实所困扰,那就是我不能正常工作。在我有了这个用户列表后,重新开始应该是向前的 $admingroups = @("Group 1","Group 2","Group 3","Group 4") $a
$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
}
}
我一直在看你的逻辑,不能指出我认为完全错误的地方。主要是您的名字varialble
$admin
-contains
用于检查元素是否是数组的一部分。从
描述:安全壳操作员。说明
参考值包括单个测试值
但是,您可以同时使用$adminnames
和$admin
数组。首先,您的dsquery
将返回discrimitedName
的数组。为了使逻辑正常工作,您必须循环遍历每个逻辑,以便-contains
也按您的期望执行
您是否必须使用dsquery
获取此信息?一些内置cmdlet可以轻松处理此问题
$groups = @("group 1","group 2")
$groups | ForEach-Object{Get-ADGroupMember -Identity $_} | Sort-Object -Unique | Select -ExpandProperty DistinguishedName
如果您仍然想使用dsquery
,我仍然会使用排序对象
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)"
那么,您想看看,对于每个管理员用户,他们都在哪些管理员组中 但是,您的主要问题是(如果我错了,请纠正我):
假设您正在通过查询每个管理员组来检索管理员用户的总体列表,那么您可能有重复项,那么如何删除重复项呢 在这种情况下,问题是缺少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
}
}
}
或者,选择对象具有“-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 )
此外,考虑安装远程服务器管理工具,然后可以导入ActiveDirectory模块并真正开始完成任务。我也是一个IT爱好者,我每天都使用它。链接:@Matt,my PowerShell 2.0没有显示任何此类要求
Get Help Select-Full
,这里的3.0文档中也没有。