排序 Office 365 用户帐户/邮箱属性

Sorting Office 365 user account / mailbox properties

我正在通过 Powershell 访问我的云 Office 365 Exchange 服务器。可以通过 Get-Mailbox 'username' | Select * (MS reference).

显示帐户的所有属性

在大多数系统上,这些属性已经排序(例如 Get-ADUser 'username' -Properties *)。是否可以对 Get-Mailbox 输出进行排序?我认为 Get-Mailbox 'username' | Select * | Sort-Object 可以解决问题,但它没有任何区别(我猜 属性 不构成对象)。为单个用户排序属性的正确命令是什么?

注意:对多个帐户的属性进行排序效果很好,例如Get-Mailbox -filter * | select Name, DisplayName | Sort-Object Displayname

更新: 我设法使用

获得了排序的属性列表
(Get-Mailbox 'mailboxname' | select *).PSObject.properties | ForEach-Object {$_.Name} | Sort-Object Name

它得到以下输出:

AcceptMessagesOnlyFrom
AccountDisabled
AddressBookPolicy
ArchiveWarningQuota
...

$_.Name 给了我值,但到目前为止我无法将两者合并到一个列表中,我正在尝试获取 s.th。像这样:

AcceptMessagesOnlyFrom = {}
AccountDisabled = False
AddressBookPolicy = 
ArchiveWarningQuota = 45 GB (48,318,382,080 bytes)
...

我不完全确定这就是您想要的,如果我错了请告诉我。在我的评论中,Sort-Object 可以处理 listobject[] 的一个或多个属性的排序;但是按其属性对单个对象进行排序,比如按字母顺序排序,需要结合使用 .PSObject.Properties.Name 访问对象的属性,然后使用 Sort-Objectlist 进行排序。之后我们可以使用 Select-Object 和这个排序列表来显示我们想要的对象。

以下面的对象为例,因为我不知道 Microsoft.Exchange.Data.Directory.Management.Mailbox 类型的外观如何。

$mailbox = [pscustomobject]@{
    DisplayName = 'someuser'
    UserPrincipalName = 'someuser@somedomain.com'
    Mail = 'someuser@somedomain.com'
    IsLicensed = $true
}

$properties = $mailbox.PSObject.Properties.Name | Sort-Object

$mailbox | Select-Object $properties

如您所见,对象的属性现在按字母顺序排序:

DisplayName IsLicensed Mail                    UserPrincipalName
----------- ---------- ----                    -----------------
someuser          True someuser@somedomain.com someuser@somedomain.com

通过查看您的编辑,您似乎正在寻找单行本,所以它看起来应该是这样的:

Get-Mailbox 'mailboxname' | ForEach-Object {
    $_ | Select-Object ($_.PSObject.Properties.Name | Sort-Object)
}