我正在尝试将Exchange Online(Office 365)PowerShell脚本放在一起,使用命令行开关set-clutter批量处理邮箱,以便关闭邮箱杂乱功能。可以为单个邮箱运行以下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。受限语言模式或数据部分不支持Hashtable-to-Object转换。” + CategoryInfo:InvalidData:(:) [Set-Clutter],ParameterBindin ... mationException + FullyQualifiedErrorId:ParameterArgumentTransformationError,Set-Clutter + PSComputerName:outlook.office365.com
根据错误消息,我相信我认为数据类型与从CSV文件传递到变量的内容和命令行开关所期望的内容不匹配。我没有足够的知识继续进行或补救。
以下是CSV文件外观的示例:
ALIAS
ProjectMailbox1 ProjectMailbox2 ProjectMailbox3 ProjectMailbox4 等等...
它总是有助于理智检查变量中的数据。将其管道到Get-Member
可以让您深入了解您正在使用的数据。
在这种情况下,假设您CSV中的第一行是ALIAS,并且您将$Identities
传送给Get-Member,您会看到以下内容:
[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属性,其中包含值ALIAS=ProjectMailbox1
这意味着当您循环遍历所有身份时,您将循环遍历ALIAS = ProjectMailbox1,ALIAS = ProjectMailbox2,ALIAS = ProjectMailbox3,而不是您实际期望的数据。
要获得您期望的结果,您需要引用您所追求的属性,在您的特定情况下(根据错误消息判断)您需要引用Identity
属性:
set-clutter -identity $Identity.Identity -enable $false
Import-CSV尝试创建对象,期望CSV文件中的多个列构建对象的所有属性。例如,您可能拥有FirstName,LastName,Alias,SamAccountName列,并且您可以调用其中任何一个属性。
如果您只处理一个“列”数据,那么最好只使用每行一个项目的文本文件(顶部没有标题)。然后你可以用Get-Content
导入文本文件并迭代它,你将处理简单的字符串,而不是单个属性psobjects。
如果您只处理一个“列”数据,那么最好只使用每行一个项目的文本文件(顶部没有标题)。然后,您可以使用Get-Content导入文本文件并对其进行迭代,您将按照预期处理简单字符串,而不是单个属性psobjects。
我只是想指出这是要记住的事情。我只是花了一个小时试图弄清楚为什么我不再从我的物体中获取PrimarySMTPAddress
。所有这些都是因为我决定在Import-CSV
上使用Get-Content
。