Запрос атрибута UID Active Directory

Я пытаюсь получить список 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. Приветствуется любая помощь.

PSVersion: 2.0

0
задан 10 July 2018 в 18:55
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
    }
}
0
ответ дан 5 December 2019 в 05:39

Спасибо за информацию. Я использовал подход, при котором я фильтрую номера UID на основе Min и Max, определенных в моем скрипте. Итак, код выглядит примерно так:

$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++
}
0
ответ дан 5 December 2019 в 05:39

Теги

Похожие вопросы