首页 > 解决方案 > 从每个 O365 用户收集邮箱属性所需的 PowerShell 脚本

问题描述

我需要一个(单个)Powershell 脚本来收集每个 Office 365 用户的以下属性:

  1. 显示名称
  2. 用户主体名称
  3. 转发地址
  4. 转发Smtp地址
  5. DeliverToMailboxAndForward
  6. IsMailboxEnabled
  7. 自动回复状态
  8. 内部消息
  9. 外部消息

数字 1-6 是从命令中获得的Get-MailBox。数字 7-9 是从命令中获得的Get-MailboxAutoReplyConfiguration(对于单个用户)。要为所有用户获取 AutoReplyConfiguration,我们可以使用命令将结果通过管道Get-Mailbox输入。Get-MailboxAutoReplyConfigurationGet-MailBox | Get-MailboxAutoReplyConfiguration

一旦我们有了,Collection<PSObject> results我们就可以通过使用代码来遍历集合来收集属性,如下所示:

string displayName = (string) result.Properties["DisplayName"].Value;

我想要的是一种在一个脚本中收集所有上述 9 个属性的方法。到目前为止,我只能先调用Get-MailBox,将结果收集到字典中,然后使用Get-MailboxAutoReplyConfiguration,收集结果,从字典中找到它的用户,然后应用剩余的属性。我需要调用脚本并在 C# 中收集结果。

将这两个动作组合成一个动作的目的是减少查询的总时间。如果这样做实际上不是更有效,请告诉我,我将继续我目前的行动方案。谢谢!

标签: c#powershell

解决方案


创建自己的对象的一种方法是向现有对象添加脚本方法或简单的 NoteProperties。(请务必明确选择您需要的所有属性)

$MailBoxes = Get-MailBox | Foreach-Object { 
$autoConfig = $_ | Get-MailboxAutoReplyConfiguration
$_ | Add-Member -Type NoteProperty -Name AutoReplyState -Value $autoConfig.AutoReplyState 
$_ | Add-Member -Type NoteProperty -Name InternalMessage -Value $autoConfig.InternalMessage
$_ | Add-Member -Type NoteProperty -Name ExternalMessage -Value $autoConfig.ExternalMessage
}

$MailBoxes | Select-Object * 

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-member?view=powershell-6


推荐阅读