Я пытаюсь получить список 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
За это многие пользователи будут работать медленно. 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
}
}
Спасибо за информацию. Я использовал подход, при котором я фильтрую номера 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++
}