Пользовательский объект несколько строк

Я создал скрипт для извлечения некоторой информации из AD, проблема, с которой я столкнулся, заключается в том, что в поле вторичного SMTP-адреса содержится более одной строки. Я хотел бы показать каждый вторичный SMTP в новой строке. Вывод моего скрипта выглядит как {smtp:joe.rodriguez@con...

$searchBase = 'OU=Users,DC=Contoso,DC=LOCAL'

$users = Get-ADUser -filter 'enabled -eq $true' -SearchBase $searchBase |select -expand samaccountname

Foreach ($user in $users){ 
$Secondary = get-recipient -Identity $user -ErrorAction SilentlyContinue| select Name -ExpandProperty emailaddresses |? {$_.Prefix -like "SMTP" -and $_.IsPrimaryAddress -like "False"} |select -ExpandProperty $_.Smtpaddress 

New-Object -TypeName PSCustomObject -Property @{
Name = Get-ADUser -Identity $user -Properties DisplayName |select  -ExpandProperty DisplayName
"Login ID" = Get-ADUser -Identity $user -Properties SamAccountName |select -ExpandProperty SamAccountName
Primary = get-recipient -Identity $user -ErrorAction SilentlyContinue| select Name -ExpandProperty emailaddresses |? {$_.Prefix -like "SMTP" -and $_.IsPrimaryAddress -like "True"} |select -ExpandProperty Smtpaddress 
Secondary =  $Secondary 
  }
}

person JoeRod    schedule 20.03.2014    source источник
comment
Когда вы заполняете $Secondary, я думаю, вы хотите использовать select -ExpandProperty smtpaddress вместо $_.smtpaddress, чтобы получить дополнительные адреса электронной почты.   -  person Kohlbrr    schedule 20.03.2014
comment
Затем это показывает, что {[email protected]... список все еще не расширен   -  person JoeRod    schedule 20.03.2014
comment
Нет, но заранее $Secondary заполнялись всеми выбранными свойствами (Name, ProxyAddressString и т. д.), а не только адресами электронной почты. Это шаг в правильном направлении.   -  person Kohlbrr    schedule 20.03.2014
comment
Формат отображения по умолчанию не размещает эти адреса в отдельных строках. Вам придется написать скрипт или функцию для их отображения таким образом, или создать настраиваемый тип объекта и определить настраиваемый формат отображения в файле types.ps1xml.   -  person mjolinor    schedule 20.03.2014


Ответы (1)


Лично я бы создал массив, вытащил список пользователей, а затем перебрал вторичные SMTP-адреса для каждого пользователя, добавив свой пользовательский объект в массив для каждой записи.

$Userlist = @()

$searchBase = 'OU=Users,DC=Contoso,DC=LOCAL'
$users = Get-ADUser -filter 'enabled -eq $true' -SearchBase $searchBase -Properties DisplayName

Foreach ($user in $users){ 
    $Recip = get-recipient -Identity $user.samaccountname -ErrorAction SilentlyContinue| select Name -ExpandProperty emailaddresses |? {$_.Prefix -like "SMTP"}

    $Recip|? {$_.IsPrimaryAddress -like "False"} |select -ExpandProperty Smtpaddress |%{
        $UserList += New-Object -TypeName PSCustomObject -Property @{
            Name = $User.DisplayName
            "Login ID" = $User.SamAccountName
            Primary = $Recip|? {$_.IsPrimaryAddress -like "True"} |select -ExpandProperty Smtpaddress 
            Secondary =  $_
        }
    }
}

Этот скрипт (основанный на вашем скрипте выше) также уменьшает количество запросов к серверу на 3 на пользователя, я думаю, поэтому он должен работать намного быстрее.

person TheMadTechnician    schedule 20.03.2014
comment
Сладкое, это именно то, что я искал! - person JoeRod; 21.03.2014