powershell - 如何在 Office365 中自动删除 Exchange 联系人
问题描述
我正在编写一个 powershell 脚本:
- 比较两个 CSV 文件
- 输出文件:更改、添加、删除的联系人
- 更新和添加联系人
- 删除联系人
问题是当我尝试删除联系人时。由以下人员完成:
#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 文件的函数。但这不是脚本中断的地方,这就是我创建文件的方式。我错过了什么?
解决方案
错误消息告诉您它无法将 $_ 的值转换为 -Identity 参数所需的值。通常,大多数 PS 命令行开关的 -Identity 参数将是人类可读的唯一名称。在这种情况下,它将是一个电子邮件地址。话虽如此,错误消息告诉您,它不是包含电子邮件地址的字符串版本的 $_,而是包含一个包含单个属性 ExternalEmailAddress 的哈希或字典对象。
因此,要完成这项工作,请将您的 $_ 更改为 $_.ExternalEmailAddress,现在对 Remove-MailContact 的调用将使用 ForEach 循环中对象的 ExternalEmailAddress 属性的值。
推荐阅读
- google-apps-script - 如何在特定工作表上运行脚本并插入公式
- javascript - 触摸着陆页图片后,如何使向上箭头平滑消失?
- regex - 正则表达式对单个字符只检查一次并且包含多个数字?
- html - 模态 POST 中的 HTML 表单正在工作,但没有写入数据库 Django
- powerbi-desktop - 在 powerbi 中,是否可以有随滑块变化的轴?
- c++ - fork后,execv在执行目标程序时与父进程通信
- java - 在 JPA Criteria API 中实现行索引功能
- asp.net-mvc - 注册表单的服务器端或客户端过滤?
- php - 为什么向我显示“Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 GET 方法。”
- r - 将异构日期字符向量转换为日期格式 (R)