排序 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
可以处理 list 或 object[]
的一个或多个属性的排序;但是按其属性对单个对象进行排序,比如按字母顺序排序,需要结合使用 .PSObject.Properties.Name
访问对象的属性,然后使用 Sort-Object
对 list 进行排序。之后我们可以使用 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)
}
我正在通过 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
可以处理 list 或 object[]
的一个或多个属性的排序;但是按其属性对单个对象进行排序,比如按字母顺序排序,需要结合使用 .PSObject.Properties.Name
访问对象的属性,然后使用 Sort-Object
对 list 进行排序。之后我们可以使用 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)
}