如何在Office365中自动删除Exchange联系人

时间:2018-11-12 20:31:06

标签: powershell exchange-server

我正在编写一个Powershell脚本,

  1. 比较两个CSV文件
  2. 输出文件:更改,添加,删除的联系人
  3. 更新和添加联系人
  4. 删除联系人

问题是当我尝试删除联系人时。可以通过以下方式完成:

  #Check for Removed Contacts
   foreach($row in $File1_Data )
  {
    $data_found=0
     foreach($id in $emails_id)
      {
       if ($row.ExternalEmailAddress -eq $id)
         {
          $data_found=1

         }

      } 

   if($data_found -eq 0 ) #Email Not Found
      { $row|Select-Object -Property ExternalEmailAddress|Export-Csv -Path $Removed_Contact -Append -NoTypeInformation}

  }

现在我有一个仅包含电子邮件地址的文件。当我尝试运行在交换服务器上连接的命令时,就会出现错误。

$RemoveContacts = Import-CSV ".\Removed Contacts_$((Get-Date).ToString('MMddyyyy')).csv"
$RemoveContacts | ForEach { Remove-MailContact -identity $_ -confirm:$false}

但是出现以下错误:

  

无法处理参数'Identity'的参数转换。无法转换   类型为“ Deserialized.System.Management.Automation.PSCustomObject”的“ @ {ExternalEmailAddress=testuser@testcompany.com}”值   键入“ Microsoft.Exchange.Configuration.Tasks.MailContactIdParameter”。       + CategoryInfo:InvalidData:(:) [Remove-MailContact],ParameterBindin ... mationException       + FullyQualifiedErrorId:ParameterArgumentTransformationError,Remove-MailContact       + PSComputerName:outlook.office365.com

$ File_Data结构为in the format Microsoft requires。 和 $ emails_id是比较两个csv文件的函数。但这不是脚本中断的地方,而是我创建文件的方式。 我想念什么?

1 个答案:

答案 0 :(得分:0)

该错误消息告诉您无法将$ _的值转换为-Identity参数所需的值。通常,大多数PS Commandlet的-Identity参数将是某些东西的人类可读的唯一名称。在这种情况下,它将是一个电子邮件地址。这样,错误消息告诉您,而不是$ _包含电子邮件地址的字符串版本,它包含一个哈希或字典对象,该对象包含单个属性ExternalEmailAddress。

因此,要执行此操作,请将$ _更改为$ _。ExternalEmailAddress,现在对Remove-MailContact的调用将使用ForEach循环中对象的ExternalEmailAddress属性的值。