2016-12-05 4 views
0

Я использую приведенный ниже код для извлечения и одновременного добавления разделителя «,» для каждого smtp-атрибута в EmailAddresses -создании.PowerShell извлекать и сортировать EmailAddresses

get-mailbox | select-object DisplayName,PrimarySMTPAddress, @{Name='EmailAddresses';Expression={[string]::join(", ", ($_.EmailAddresses))}} 

Но я также хотел бы, чтобы отсортировать значения EmailAddressess так, что верхний регистр всегда приходит первой с помощью PowerShell и с минимальными усилиями (короткий код), как это возможно.

Если вы не знакомы с Microsoft Exchange: каждое значение внутри EmailAddresses начинается с smtp: или SMTP:, за которым следуют различные адреса электронной почты. SMTP верхнего регистра означает его основной SMTP-адрес, используемый при отправке электронной почты, например. Нижний регистр smtp означает его просто другой адрес электронной почты.

Я хотел бы сортировать выход так, чтобы на первом месте было значение SMTP:*.

Вопрос о бонусе, в Expression -block; можно использовать несколько перегрузок [string]::, если да, то как?

Я пытался добиться отсортирован с помощью [string]::OrderBy() и [string]::OrderByDescending(), но я не мог понять, как использовать их вместе с [string]::split().

Благодаря пользователю 4c74356b41, теперь я понимаю, что моя строка не содержит OrderBy() или OrderByDescending(), следовательно, они не могут быть использованы.

MSDN: OrderBy Method
MSDN: OrderbyDescending Method

+0

string не содержит 'OrderByDescending()' или 'OrderBy()' – 4c74356b41

+0

Это объясняет это. Благодарю. – NiklasJ

+0

вы можете использовать 'Sort-Object' для сортировки в powershell. Например: '$ a = @ ('b', 'A'); $ a | Sort-Object' – 4c74356b41

ответ

-1

Вы можете просто гнездятся трубопровод рода внутри вашего выражения.

@{Name='EmailAddresses';Expression={[string]::join(", ", ($_.EmailAddresses | Sort-Object))}} 

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

+0

Я никогда не пробовал с этой позицией sort-object. Вот пример, который не сработал: '... Expression = {[string] :: join (", ", ($ _. EmailAddresses)) | Sort-Object -Property EmailAddresses}} 'Я попробую ваше предложение завтра. – NiklasJ

+0

Если вы не достигнете стадии сортировки этого конвейера, вы уже создали свой массив объектов, а затем попросите конвейер отсортировать весь массив на основе свойства 'EmailAddresses' каждого объекта, поэтому вы сами сортируете объекты, а не электронные письма, помещая сортировку внутри вашего выражения, сортируя электронные письма, прежде чем добавлять их к объектам, которые добавляются в ваш массив. работает ли мой код, если вы его запустили? –

+0

Я пробовал это сейчас, и это не работает, к сожалению. Я пробовал разные подходы, и никто не работал отлично. Странно, что объекты сортируются по-разному, но SMTP: * не появляется во всех случаях во всех случаях. '... Expression = {[string] :: join (", ", ($ _. EmailAddresses | Sort-Object -Property EmailAddresses))}} и: ' ... Expression = {[string] :: join (",", ($ _. EmailAddresses | Sort-Object -CaseSensitive))}} и: '... Expression = {[string] :: join (", ", ($ _. EmailAddresses | Sort-Object -CaseSensitive -Descending))}} ' – NiklasJ

Смежные вопросы