Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell代理电子邮件地址_Powershell_Csv_Active Directory - Fatal编程技术网

PowerShell代理电子邮件地址

PowerShell代理电子邮件地址,powershell,csv,active-directory,Powershell,Csv,Active Directory,目前我有下面的脚本,它将CSV中的电子邮件地址与ActiveDirectory中的主邮件地址进行比较,但它不考虑代理地址。例如,如果Mary Smith有一个电子邮件地址Mary。Smith@abc.com,然后玛丽结婚了,她的姓改成了琼斯。她的标准电子邮件地址仍然是玛丽。smith@abc.com但她现在有一个代理人叫玛丽。jones@abc.com. 如何使用此脚本还针对proxyaddresses进行验证?最好不要对Active Directory造成太大影响 $path = "H:\us

目前我有下面的脚本,它将CSV中的电子邮件地址与ActiveDirectory中的主邮件地址进行比较,但它不考虑代理地址。例如,如果Mary Smith有一个电子邮件地址Mary。Smith@abc.com,然后玛丽结婚了,她的姓改成了琼斯。她的标准电子邮件地址仍然是玛丽。smith@abc.com但她现在有一个代理人叫玛丽。jones@abc.com.

如何使用此脚本还针对proxyaddresses进行验证?最好不要对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}
}

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

$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"}
 }
$ExSession=new pssession-configurationname Microsoft.Exchange-ConnectionURIhttp:///powershell/ -身份验证kerberos
foreach($csv中的行)
{ 
if(调用命令{Get Recipient$args[0]}-ArgumentList$line.Email-Session$ExSession-ErrorAction SilentlyContinue)
{“AD中存在用户”}
else{“在AD中找不到用户”}
}

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

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

"(&(objectclass=user)(proxyAddresses=*$($line.Email)*))"
顺便说一句,邮件属性可能与代理地址中的主SMTP地址不同,因为后者由Exchange强制执行,但前者可以在Exchange外部随意更改。如果您有一个与域集成的Exchange组织,则可能性不大,但如果您担心这种可能性,则可以使用此筛选器:

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

我收到拒绝访问的错误消息。我还尝试将-authentication kerberos替换为-credential\并出现此错误,WinRM客户端无法处理该请求。WinRM客户端尝试使用协商身份验证机制,但您使用的帐户的目标计算机必须是具有运行cmdlet权限的Exchange RBAC角色的成员。仅查看组织管理将起作用。基本上,您只需要查看正确的收件人。如果您有另一个要使用的帐户,则可以在New-PSSession cmdlet上指定备用凭据。因此,根据我们的Exchange管理员,我必须有一个远程会话,但他们不允许使用。他们完全可以理解,不允许这样做。但由于没有远程会话,我无法测试此会话。我是Exchange管理员,不明白为什么会出现问题。执行这些查找将在Exchange服务器上施加繁琐的负载,同时从DC中移除大量负载。我想任何Exchange管理员都会认为这是件好事。如果你只被授予查看权限,你所能做的就是检索信息,你不能更新任何东西。好吧,我测试了这个,是的,它确实有效,但是对于8个电子邮件地址的列表(你提供的两个版本),脚本需要15秒才能全部运行。我知道这不是问题的一部分,但有没有办法加快速度?原因很简单,这符合最初的问题,而且确实有效,而且由于限制,我无法测试唯一其他建议的解决方案,我将其标记为已回答