返回 Exchange Online 邮箱信息

 

上一次修改主题: 2014-06-09

**摘要:**使用 Windows PowerShell 来管理使用 Windows PowerShell cmdlet、脚本和批处理过程的 Office 365。

为了让您对可使用 Exchange Online 和 Windows PowerShell 执行的操作有所了解,我们将以用户邮箱为主题。正如您所料,您可以轻松获取单个用户邮箱的相关信息;例如,以下命令可返回 Ken Myer 邮箱的一些信息:

Get-Mailbox -Identity "Ken Myer"

返回的内容如下所示:

Name      Alias       ServerName      ProhibitSendQuota
----      -----       ----------      -----------------
kenmyer   kenmyer     bn1pr02mb038    49.5 GB (53,150,220,288 bytes)

现在的效果不错:您可以快速浏览 Ken 的别名和邮件配额等内容。不过,Exchange Online 邮箱的相关信息远不止 Get-Mailbox cmdlet 返回的四个属性。我们如何访问所有此类信息?

方法如下:

Get-Mailbox -Identity "Ken Myer" | Select-Object *

语法 Select-Object* 指示 Windows PowerShell 返回 Get-Mailbox cmdlet 可以返回的所有信息;结果一个用户邮箱可以返回大约 200 个不同的属性和属性值。正如我们已看到的,如果我们运行命令 Get-Mailbox –Identity "Ken Myer",则我们只能获取 Get-Mailbox cmdlet 默认返回的少量信息子集。此外,您当然始终可以使用 Select-Object cmdlet 指定要返回的特定属性值集。您表示只对 Ken Myer 的诉讼保留相关属性感兴趣?那么您为什么没有这样说:

Get-Mailbox -Identity "Ken Myer" | Select-Object DisplayName, LitigationHoldEnabled, LitigationHoldDate, LitigationHoldOwner, LitigationHoldDuration

下面介绍了一个实用的小提示:您可以在使用 Select-Object cmdlet 时使用通配符。例如,所有诉讼保留属性均以字母“lit”开头。也就是说,我们可以使用以下命令检索相同的信息:

Get-Mailbox -Identity "Ken Myer" | Select-Object DisplayName, Lit*

该命令指示 Get-Mailbox 检索 Ken 的 DisplayName 属性值以及名称以字母“lit”开头的其他任何属性值。看一看我们获取的内容:

DisplayName            : Ken Myer
LitigationHoldEnabled  : False
LitigationHoldDate     :
LitigationHoldOwner    :
LitigationHoldDuration : Unlimited

事实上,我们还可以使用 DisplayName 属性的通配符缩短该命令:

Get-Mailbox -Identity "Ken Myer" | Select-Object Disp*, Lit*

我们会主动奉上您所需的信息,我们本可以将“Lit*”缩短为“L*”:

Get-Mailbox -Identity "Ken Myer" | Select-Object DisplayName, L*

这样做有一个缺点?您会获得以字母“L”开头的所有属性值:

DisplayName             : Ken Myer
Location                :
LitigationHoldEnabled   : False
LitigationHoldDate      :
LitigationHoldOwner     :
LitigationHoldDuration  : Unlimited
Languages               : {en-US}
LinkedMasterAccount     :
LastExchangeChangedTime :
LegacyExchangeDN        : /o=ExchangeLabs/ou=Exchange Administrative 
                          Group(FYDIBOHF23SPDLT)/cn=Recipients/
                          cn=44386eeefe7c4c2a92199aff4a2bc7b0-KenMyer

其中可能包含您实际不需要的信息。

这也只是关于单个邮箱的信息。能否返回多个邮箱的信息?当然可以。您只需省略 Identity 参数即可:

Get-Mailbox 

或者,通过管道将数据传递到 Select-Object cmdlet,以返回几个指定的属性值:

Get-Mailbox | Select-Object DisplayName, LitigationHoldEnabled

效果非常好,使用起来也很方便。另一方面,您有时会只想查看邮箱帐户的子集。例如,假设您需要获取已分配诉讼保留的所有邮箱的列表。您需要多久才能获取该列表?如果您需要返回所有邮箱帐户,然后逐个浏览以找到已启用诉讼保留的帐户,可能需要一段时间才能完成(假设您有大量用户)。较好的方法是向 Get-Mailbox 命令添加筛选条件,如下所示:

Get-Mailbox -Filter '(LitigationHoldEnabled -eq $True)'

这个问题问得好:为什么不通过管道将返回的邮箱信息传递到 Where-Object cmdlet,就像我们在处理 Office 365 用户帐户时所执行的操作一样?难道此命令无法起到同等作用:

Get-Mailbox | Where-Object {$_.LitigationHoldEnabled -eq $True}

诚然,这取决于您对“同等作用”的定义。毫无疑问,这两个命令会返回完全相同的信息。不过,当您通过管道将特定信息传递到 Where-Object cmdlet 时,具体过程如下所示:

  1. Get-Mailbox cmdlet 与服务器联系,并检索所有可用的邮箱信息。

  2. 所有这些信息通过网络传输到您的本地计算机。

  3. 然后,您的本地计算机对这些信息进行筛选,并舍弃“多余”数据。

如果您改用 Filter 参数,则会发生什么情况?具体过程如下:

  1. Get-Mailbox cmdlet 与服务器联系,邮箱信息在服务器上进行筛选。

  2. 只有筛选出的信息(通常代表全部邮箱信息的很小一部分子集)才会通过网络传输到您的本地计算机。

也就是说,使用 Filter 参数,您可以让服务器执行大部分的操作,并且大幅减少必须通过网络传输的信息量。换言之,只要您拥有支持 Filter 参数的 Office 365 cmdlet,则应使用该参数,而不是 Where-Object。

备注

具体取决于您尝试要筛选的内容。并非所有的属性值都可以进行筛选。

明确这一点后,让我们看看另一个筛选示例。您也许想知道哪些用户在其邮箱上启用了邮件转发功能。可以快速地做到吗?请自行参阅:

Get-Mailbox -Filter '(DeliverToMailboxAndForward -eq $False)'

如果您想将返回的数据限制为仅包含用户的显示名称和邮件转发地址,为什么不这样操作:

Get-Mailbox -Filter '(DeliverToMailboxAndForward -eq $True)' | Select-Object DisplayName, ForwardingSmtpAddress

换一个如何?假设您想确保您的所有用户均已启用垃圾邮件规则。下面的方法可快速确定您的所有用户是否均已启用该规则:

Get-Mailbox | Get-MailboxJunkEmailConfiguration | Where-Object {$_.Enabled -eq $False}

备注

我们为什么不在此示例中使用 Filter 参数?答案很简单:我们无法使用 Filter 参数,因为 Get-MailboxJunkEmailConfiguration cmdlet 不支持此参数。

这个问题问得好:每个人都应该启用垃圾邮件规则,不是吗?不仅如此,每个人还应该在阻止的发件人名单和域列表中添加 fabrikam.com。那么,还在等什么:

Get-Mailbox | Set-MailboxJunkEmailConfiguration -Enabled $True -BlockedSendersAndDomains @{Add="fabrikam.com"}

或者,您的一些用户已在阻止的发件人名单中列出 fabrikam.com,而实际上他们本不应该添加 fabrikam.com。能否找出这些用户并将 fabrikam.com 从阻止的发件人名单中删除用户?不能,我们做不到。不过,使用 Windows PowerShell 可以做到:

Get-Mailbox | Get-MailboxJunkEmailConfiguration | Where-Object {$_.BlockedSendersAndDomains -match "fabrikam.com"} | Set-MailboxJunkEmailConfiguration -BlockedSendersAndDomains @{Remove="fabrikam.com"}

那么,难道改用 Exchange 管理中心执行所有这些操作不更简单?也许是。不过,说实话,我们无法使用管理中心管理垃圾邮件。正如我们所说,您必须使用 Windows PowerShell 配置垃圾邮件处理、日历设置、拼写检查配置或自动签名和邮箱操作。相信您已领会其中要旨。

下一步: 使用 Exchange Online 报告

另请参阅

概念

使用 Windows PowerShell 管理 Exchange Online