Exchange online powershell脚本接收“;无法将哈希表转换为以下类型的对象";错误

Exchange online powershell脚本接收“;无法将哈希表转换为以下类型的对象";错误,powershell,csv,office365,Powershell,Csv,Office365,我正在尝试整合Exchange Online(Office 365)PowerShell脚本,以便使用commandletset-croot批量处理邮箱,以关闭邮箱混乱功能。可以为单个邮箱运行以下PowerShell命令: set-clutter -identity "MailboxIdentityHere" -enable $false 我有一个带有每个邮箱标识的CSV文件 我不是一名程序员,也是一名脚本编写新手,我意识到我并不完全理解我的问题 我已经能够编写以下脚本: $Identitie

我正在尝试整合Exchange Online(Office 365)PowerShell脚本,以便使用commandletset-croot批量处理邮箱,以关闭邮箱混乱功能。可以为单个邮箱运行以下PowerShell命令:

set-clutter -identity "MailboxIdentityHere" -enable $false
我有一个带有每个邮箱标识的CSV文件

我不是一名程序员,也是一名脚本编写新手,我意识到我并不完全理解我的问题

我已经能够编写以下脚本:

$Identities = Import-csv "pathtofile\filename.csv"
foreach ($Identity in $Identities)  
{
set-clutter -identity $Identity -enable $false
}
但是,对于CSV文件中列出的邮箱的每次迭代,我都会重复以下错误:

无法处理参数“Identity”上的参数转换。不能 将值“@{IDENTITY=ProjectMailbox1}”转换为类型 “Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter”。错误: “无法将哈希表转换为以下类型的对象: Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter。 受限语言不支持哈希表到对象的转换 模式或数据节。“ +CategoryInfo:InvalidData:(:)[设置杂波],参数Bindin…mationException +FullyQualifiedErrorId:ParameterArgumentTransformationError,设置混乱 +PSComputerName:outlook.office365.com

根据错误消息,我认为我无法理解从CSV文件传递到变量的数据类型与commandlet期望的数据类型不匹配。我没有足够的知识来继续或纠正这一点

以下是CSV文件外观的示例:

别名

项目邮箱1
项目邮箱2
项目邮箱3
项目邮箱4


检查变量中的数据是否正确总是值得的。通过管道将其传送到
Get Member
可以让您对正在使用的数据有一些了解

在这种情况下,假设CSV中的第一行是ALIAS,通过管道
$identies
获取成员,您将看到以下内容:

[2] PS C:\temp> $Identities | get-member


   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
ALIAS       NoteProperty string ALIAS=ProjectMailbox1
请注意,有一个别名属性包含值
Alias=ProjectMailbox1

这意味着当您在所有标识中循环时,您是在ALIAS=ProjectMailbox1、ALIAS=ProjectMailbox2、ALIAS=ProjectMailbox3中循环,而不是在实际需要的数据中循环

要获得预期的结果,您需要引用所需的属性,在特定情况下(根据错误消息判断),您似乎需要引用
标识
属性:

set-clutter -identity $Identity.Identity -enable $false

导入CSV尝试创建一个对象,它需要CSV文件中的多个列来构建对象的所有属性。例如,您可能有FirstNameLastNameAliasSamAccountName列,并且您可以调用其中任何一个属性

如果您只处理一列数据,最好只使用每行一项的文本文件(顶部没有标题)。然后,您可以使用
Get Content
导入文本文件,并对其进行迭代,您将按照预期处理简单的字符串,而不是单个属性PSObject

如果您只处理一列数据,最好只使用每行一项的文本文件(顶部没有标题)。然后,您可以使用Get Content导入文本文件并对其进行迭代,您将按照预期处理简单的字符串,而不是单个属性psobjects


我只是想指出,这是需要牢记的。我刚刚花了一个小时试图弄明白为什么我不再从我的对象中获取
PrimarySMTPAddress
。这一切都是因为我决定使用
Import CSV
而不是
Get Content

多谢各位。由于您的解释,我能够通过引用单个列的属性来使用csv方法,并且通过使用get Content方法,我也能够使用以下内容来使用csv方法:ForEach($Identity in get Content“PathtFile\filename.txt”){set杂波-Identity$Identity-enable$false}