Это работает для меня.Я более знаком с PSCustomObjects, но вы могли бы сделать это вместо хеш-таблицы, я уверен (хотя я думаю, что хеш-таблицы получаются забавными, если вы попытаетесь использовать целое число в качестве ключа).
И я 'извините, мне лень реорганизовать это с помощью ADSI, но, надеюсь, логика ясна.
Если вы захотите, вы можете вернуть нужные вам пользовательские свойства при первоначальном запросе LDAP и добавить их в[PSCustomObject]
, который вы создаете для каждого пользователя.Затем просто извлеките свойства из $usertable
вместо выполнения другого запроса AD.(См. Второй пример.)
Однако я действительно непреклонен в том, что, если это более чем несколько свойств для нескольких пользователей, не пытайтесь захватить все сразу.Мне очень надоели ленивые фильтры LDAP с -properties *
, когда вам нужно только одно свойство.В моей среде, если я получу все свойства только для моей учетной записи, это будет 74 КБ.Это начинает быстро складываться при перетаскивании содержимого из LDAP.
# sort user list by desired attribute below e.g. samaccountname, lastname, etc
$users = get-aduser -filter 'name -like "macdo*"' | sort samaccountname
# create an array to store the user results
$usertable = @()
$no = 0
$users | foreach {
$no++
$o = [PSCustomObject]@{
No = $no
Name = $_.samaccountname
}
$usertable += $o
}
$usertable |sort no
# this is what the table will look like on screen
No Name
-- ----
1 AKMacDonald
2 AMacDonald
3 BMacDonald
4 BMacdonnell
$myint = Read-Host 'Enter user number'
> Enter user number: 29
# Select desired user properties in Get-ADUser below
$ADuser = $usertable | where {$_.no -eq $myin} |select -ExpandProperty Name |
Get-Aduser -Properties msExchHomeServerName
$ADuser
#AD user output
DistinguishedName : CN=BMacDonald,OU=Accounts,DC=example,DC=com
Enabled : False
GivenName : Bruce
Name : BMacDonald
...
Если вы захватываете несколько дополнительных атрибутов с помощью своего исходного запроса AD, вы можете сохранить их в $usertable
для быстрого поиска.
# grab msExchHomeServerName in this query
$users = get-aduser -filter 'name -like "macdo*"' -properties msExchHomeServerName |
sort samaccountname
# create an array to store the user results
$usertable = @()
$no = 0
$users | foreach {
$no++
$o = [PSCustomObject]@{
No = $no
Name = $_.samaccountname
Exchsrv= $_.msExchHomeServerName
}
$usertable += $o
}
# do a "select" below if you don't want to display everything in $usertable
$usertable |sort no
# $usertable contents
No Name Exchsrv
-- ---- ----
1 AKMacDonald Exch1
2 AMacDonald Exch1
3 BMacDonald Exch2
4 BMacdonnell Exch3
$myint = Read-Host 'Enter user number'
> Enter user number: 29
# Select desired user properties from $usertable
$usertable | where {$_.no -eq $myint} | Select Name,Exchsrv
# output
Name Exchsrv
---- ----
AKMacDonald Exch1