无法使用带有管道变量的-filter子句在Powershell中运行Get-CASMailbox

时间:2011-07-25 15:58:45

标签: powershell exchange-server exchange-server-2007

我在使用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:无法将参数'Filter'绑定到目标。异常设置“过滤器”:“无法转换类型为'System.Management.Automa'的对象 .PSObject'输入'System.String'。“ 在C:\ Users \ erawlins \ Desktop \ MailboxFilterBug.ps1:7 char:38 + Get-CASMailbox -ResultSize:10 -Filter<<<< {ServerName -eq $ _}     + CategoryInfo:WriteError:(:) [Get-CASMailbox],ParameterBindingException     + FullyQualifiedErrorId:ParameterBindingFailed,Microsoft.Exchange.Management.RecipientTasks.GetCASMailbox


我真的很困惑。我已经尝试了我能找到的每种语法,并且在每种情况下尝试使用$ _都会抛出相同的错误。如果我只是任何其他变量,例如$ 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工作正常但前两个方法抛出错误。在我看来,这些都应该起作用,因为它们都是弦乐。有什么区别?

2 个答案:

答案 0 :(得分:3)

试试这个:

$MailServerList | Foreach-Object { Get-CASMailbox -Filter "ServerName -eq  '$_'" }

答案 1 :(得分:1)

您正在将一个scriptblock传递给filter参数,并且您正在引用一个自动变量($ )。在对scriptblock进行评估时,它可能位于定义$ 的其他一些代码中。使用嵌套范围的自动变量时务必小心。