如何在Powershell块/闭包参数中使用变量

时间:2019-05-14 08:09:52

标签: powershell closures

这很漂亮:

Get-Mailbox -Filter {DisplayName -like "Axel*"}

现在,我想在函数中重复使用此函数。不幸的是,这种构造严重失败了:

> $name = "Axel*"
> Get-Mailbox -Filter {DisplayName -like $name}

我不是超级强者,但我认为(!)我发现闭包(我认为{Displayname -eq ...}是一个)是在执行时求值的,它是 in Get-Mailbox cmdlet,该变量在外部作用域中不再可用。

所以我的问题是-我该怎么做?

我明确不想这样做,因为它慢了大约50倍:

Get-Mailbox | Where-Object DisplayName -like $name

有人可以帮我吗?

我发现有a couple of篇文章比较详细,似乎都归结为:“只需使用.GetNewClosure()”。那对我不起作用:

> $dname = "Axel*"
> Get-Mailbox -Filter {DisplayName -like $dname}.GetNewClosure()
[...still no effect...]

1 个答案:

答案 0 :(得分:0)

非常感谢上面的Tesla-这种解决方案实际上有效:

> $dname = "Axel*"
> $full_filter = "DisplayName -like '$dname'"
> Get-Mailbox -Filter $full_filter

它的速度应该是应该的。

太好了:)