【发布时间】:2011-10-12 17:36:27
【问题描述】:
我在 Exchange cmdlet Get-CASMailbox 的语法上遇到了一些问题。
我在 2007 环境中运行,并且在 PowerGUI 2.4、3.0 和 PS ISE 2.0 中进行了测试。
用于演示的示例代码:
[String[]] $MailServerList = @('IP-0A207B07')
$MailServerList | %{
Get-CASMailbox -ResultSize:10 -Filter {ServerName -eq $_}
}
在这个例子中只有一个邮件服务器。在调用 Get-CASMailbox 期间,管道运算符 $_ 是 IP-0A207B07 并且 $_.GetType() 确认它是一个字符串。如果此行运行,我会收到以下错误:
Get-CASMailbox:无法将参数“过滤器”绑定到目标。异常设置“过滤器”:“无法投射'System.Management.Automa'类型的对象 tion.PSObject' 来输入 'System.String'。” 在 C:\Users\erawlins\Desktop\MailboxFilterBug.ps1:7 char:38 + Get-CASMailbox -ResultSize:10 -Filter
我真的对此感到困惑。我已经尝试了我能找到的所有语法,并且在每种情况下尝试使用 $_ 都会引发相同的错误。如果我只是使用任何其他变量,例如 $test=$_,并在查询中替换它,它就可以正常工作。
认为使用管道运算符可能会出现一些问题(可能一旦 Get-CASMailbox 开始运行 $_ 中的其他内容)我还尝试使用对象属性(这是原始代码的一部分)。在 get-casmailbox 调用之前添加了以下两行
$ServerInfo = "" | Select-Object Name
$ServerInfo.Name = $_.ToString()
Get-CASMailbox -ResultSize:10 -Filter {ServerName -eq $ServerInfo.Name}
同样失败,同样的错误信息。所以我真的很困惑为什么要使用 $_ 或 $ServerInfo.Name 并将其分配给 $test,然后使用 $test 可以正常工作,但前两种方法会引发错误。在我看来,它们中的每一个都应该工作,因为它们都是字符串。有什么区别?
【问题讨论】:
标签: powershell exchange-server exchange-server-2007