我正在编写一个Powershell脚本,
问题是当我尝试删除联系人时。可以通过以下方式完成:
#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文件的函数。但这不是脚本中断的地方,而是我创建文件的方式。 我想念什么?
答案 0 :(得分:0)
该错误消息告诉您无法将$ _的值转换为-Identity参数所需的值。通常,大多数PS Commandlet的-Identity参数将是某些东西的人类可读的唯一名称。在这种情况下,它将是一个电子邮件地址。这样,错误消息告诉您,而不是$ _包含电子邮件地址的字符串版本,它包含一个哈希或字典对象,该对象包含单个属性ExternalEmailAddress。
因此,要执行此操作,请将$ _更改为$ _。ExternalEmailAddress,现在对Remove-MailContact的调用将使用ForEach循环中对象的ExternalEmailAddress属性的值。