查询 Active Directory UID 属性

查询 Active Directory UID 属性

我正在尝试获取 UID 列表(NIS 属性)。问题是 UID 顺序不对。我想定义一个范围并检查是否存在具有该 UID 的帐户,如果存在,则获取范围内使用的最后一个 UID。我可以使用以下代码,但循环遍历范围需要花费大量时间(对于此示例,范围非常小)。我想知道是否有其他方法可以以更好的性能完成相同的任务。

[int32[]] $array= 50000..100000
$initArray = @()
foreach ($arr in $array){
  $acct = (Get-ADUser -Filter (uidnumber -eq $arr) -Properties uidNumber) | select name, uidnumber
  $initArray += $acct.uidnumber      
}
$initArray | Select -Last 1

这样我就可以得到最后使用的 UID,但如果范围是 300000 到 900000,那么 foreach 循环将花费大量时间来获取最后一个 UID。如能得到任何帮助,我将不胜感激。

PS版本:2.0

答案1

感谢您的信息。我使用了一种根据脚本中定义的最小值和最大值过滤 UID 号码的方法。因此,代码大致如下。

$min = 3000000
$max = 9000000
$res = (Get-ADUser -Filter * -Properties uidnumber | where_object {($_.uidnumber ge $min) -and ($_.uidnumber le $max)}).uidnumber
$uid = ($res |Measure -Maximum).Maximum

if ($uid -eq $null){
   $uid = $min
} else {
   $uid++
}

答案2

对于如此多的用户,单个获取会很慢。这uidNumber是一个索引属性,因此您可以在 LDAP 查询中利用该索引。我会像这样逐步完成它。

for ($x=100000; $x -ge 50000; $x=$x -10000) {
    $x
    $q = get-aduser -filter { uidNumber -gt $x } -prop uidNumber,Name
    if ($q) {
        $q | sort-object -prop uidNumber | select-object -last 1
        break
    }
}

相关内容