首页 > 解决方案 > 如何在 Office365 中自动删除 Exchange 联系人

问题描述

我正在编写一个 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}

但我收到以下错误:

无法处理参数“身份”的参数转换。无法将“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 结构采用Microsoft 要求的格式。$emails_id 是比较两个 csv 文件的函数。但这不是脚本中断的地方,这就是我创建文件的方式。我错过了什么?

标签: powershellexchange-server

解决方案


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

因此,要完成这项工作,请将您的 $_ 更改为 $_.ExternalEmailAddress,现在对 Remove-MailContact 的调用将使用 ForEach 循环中对象的 ExternalEmailAddress 属性的值。


推荐阅读