【问题标题】:PowerShell ProxyEmail AddressPowerShell 代理电子邮件地址
【发布时间】:2013-12-24 02:17:31
【问题描述】:

目前我有下面的脚本,它将 CSV 中的电子邮件地址与 ActiveDirectory 中的主邮件地址进行比较,但它不考虑代理地址。例如,如果 Mary Smith 有一个电子邮件地址 Mary.Smith@abc.com,那么 Mary 结婚并且她的姓氏更改为 Jones。她的标准电子邮件地址仍然是 Mary.smith@abc.com,但她现在有一个名为 mary.jones@abc.com 的代理。

如何使用此脚本来验证代理地址?最好不要对 Active Directory 造成巨大影响。

$path = "H:\users.csv"
$csv = Import-Csv $path 
Import-Module ActiveDirectory

foreach ($line in $csv)
{
    $User = Get-ADUser -LDAPFilter "(&(objectclass=user)(mail=$($line.Email)))"
    if ($User -eq $Null) {"User does not exist in AD   " + $line.Email }
    else {"User found in AD  - " + $line.Email}
}

【问题讨论】:

    标签: powershell csv active-directory


    【解决方案1】:

    AD 为启用邮件的用户提供了一个 proxyAddresses 属性,其中包括主 SMTP 地址以及任何别名。将您的 -LDAPFilter 参数更改为:

    "(&(objectclass=user)(proxyAddresses=*$($line.Email)*))"
    

    顺便说一句,ma​​il 属性可能与 proxyAddresses 中的主 SMTP 地址不同,因为后者由 Exchange 强制执行,但前者可以随意更改交易所外。如果您有一个与域集成的 Exchange 组织,则不太可能,但如果您担心这种可能性,您可以使用此过滤器:

    "(&(objectclass=user)(|(mail=$($line.Email))(proxyAddresses=*$($line.Email)*)))"
    

    【讨论】:

    • 好的,所以我测试了这个,是的,它确实有效,但是对于 8 个电子邮件地址的列表(您提供的两个版本),脚本需要 15 秒才能运行它们。我知道这不是问题的一部分,但有没有办法加快速度?
    • 仅仅因为这符合最初的问题并且确实有效,并且由于限制,我无法测试唯一的其他建议解决方案,我将其标记为已回答
    【解决方案2】:

    假设您正在运行 Exchange,您最好为此使用 Exchange Get-Recipient cmdlet。 Exchange 维护一个由 SMTP 地址索引的数据库,因此这些查找是即时的。 AD 没有,因此它必须搜索每个用户的所有 ProxyAddres 以寻找匹配项。

    $ExSession =   new-pssession -configurationname Microsoft.Exchange -ConnectionURI http://<ExchangeServerName>/powershell/ -authentication kerberos 
    foreach($line in $csv)
     { 
      if (Invoke-Command {Get-Recipient $args[0]} -ArgumentList $line.Email -Session $ExSession -ErrorAction SilentlyContinue)
       {"User exists in AD"}
       else {"User not found in AD"}
     }
    

    在 new-pssession 命令中替换您的一台 Exchange 服务器的名称。

    【讨论】:

    • 我收到拒绝访问错误消息。我还尝试将 -authentication kerberos 替换为 -credential \ 并收到此错误 WinRM 客户端无法处理请求。 WinRM 客户端尝试使用协商身份验证机制,但目标计算机
    • 您使用的帐户需要是具有运行 cmdlet 权限的 Exchange RBAC 角色的成员。仅查看组织管理将起作用。您基本上只需要 View-Only Recipients 权限。如果您有另一个要使用的帐户,则可以在 New-PSSession cmdlet 上指定备用凭据。
    • 因此,根据我们的 Exchange 管理员,我将不得不进行他们不允许的远程会话。他们不允许这样做是完全可以理解的。但由于没有远程会话,我无法测试这个
    • 我是一名 Exchange 管理员,我不明白为什么会出现这样的问题。执行这些查找将在 Exchange 服务器上施加微不足道的负载,同时从 DC 中移除大量负载。我认为任何 Exchange 管理员都会认为这是一件好事。如果您仅被授予“仅查看”权限,您所能做的就是检索信息,您无法更新任何内容。
    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2017-04-19
    • 2011-09-17
    • 2017-07-23
    • 2016-07-08
    • 2012-04-08
    • 2014-06-01
    相关资源
    最近更新 更多