在PowerShell中提供过滤值作为变量会产生不同的结果

时间:2015-06-24 18:07:30

标签: powershell scope

我尝试在Exchange 2010服务器上的一组邮箱上执行批量操作。为了限制我需要操作的数字框,我想过滤结果。我知道我需要处理的是在2015-01-01之后创建的,所以我将它作为过滤值提供(可行):

$boxes = Get-Mailbox -filter { whenCreated -gt '2015-01-01' }

我希望稍后能够重用我的脚本,所以我尝试将其设置为接受参数,但它返回所有框(不起作用)......

$filterdate = '2015-01-01'; $boxes = Get-Mailbox -filter { whenCreated -gt $filterdate }

我的猜测是,当我提供字符串文字与提供字符串变量时,过滤器正在进行某种隐式类型转换

如何为变量提供-Filter?

编辑:

这也会返回未经过滤的列表:

$filterdate = [System.DateTime]'2015-01-01'; get-mailbox -filter { whencreated -gt $filterdate }

导致错误:

$filterdate = '2015-01-01'; get-mailbox -filter { whencreated -gt "$filterdate" }

1 个答案:

答案 0 :(得分:1)

我确定问题是您在$filterdate的脚本块范围内不存在变量{ whencreated -gt "$filterdate" }。语法很好....直到你添加变量混合。非常确定,在该范围内,$filterdate将为空。然后你得到了所有的邮箱,因为任何东西都大于null(当然接受它自己)。

1 -gt $null
"asdf" -gt $null
True

使用正确引用的字符串可以获得相同的结果。

-filter "whencreated -gt '$filterdate'"