Exchange online powershell脚本接收“;无法将哈希表转换为以下类型的对象";错误
我正在尝试整合Exchange Online(Office 365)PowerShell脚本,以便使用commandletset-croot批量处理邮箱,以关闭邮箱混乱功能。可以为单个邮箱运行以下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
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文件中的多个列来构建对象的所有属性。例如,您可能有FirstName、LastName、Alias、SamAccountName列,并且您可以调用其中任何一个属性
如果您只处理一列数据,最好只使用每行一项的文本文件(顶部没有标题)。然后,您可以使用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}