Вернуть список в Powershell - PullRequest
       22

Вернуть список в Powershell

0 голосов
/ 22 марта 2019

Я пишу скрипт powershell, который будет искать в активном каталоге и сообщать мне информацию о таких пользователях:

$fname = Read-Host 'Enter first name'
$lname = Read-Host 'Enter Last Name'
$search = [adsisearcher]"(&(ObjectCategory=Person)(ObjectClass=User)(givenName=$fname)(sn=$lname))"

$users = $search.FindAll()

    foreach($user in $users) {
    $displayname = $user.Properties['displayname']
    "$displayname"
    }

Будет выведен список пользователей с одинаковыми именами и фамилиями:

Пользователь1
User2
Пользователь3
User4

Затем я бы хотел выбрать, для какого пользователя я хочу показать дополнительную информацию, что-то вроде этого:

Read-Host 'Enter user number'
#input 1 - 4

#returns exchange server name for the selected user:
$msExchHomeServerName = $user.Properties['msExchHomeServerName']
"Exchange server: $msExchHomeServerName" 

Я не могу понять, как вернуть выбираемый список, который позволяет мне получить дополнительную информацию об этом пользователе.

1 Ответ

0 голосов
/ 26 марта 2019

Это работает для меня.Я более знаком с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...