Как использовать переменные в параметрах блока / закрытия Powershell - PullRequest
2 голосов
/ 14 мая 2019

Это прекрасно работает:

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

Теперь я хочу снова использовать это в функции. К сожалению, эта конструкция ужасно терпит неудачу:

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

Я не бог PowerShell, но я думаю (!), Что я понял, что замыкание (я думаю, {Displayname -eq ...} - это единица) оценивается при выполнении, которое равно в Get-Mailbox командлет, в котором переменная больше не доступна из внешней области.

Итак, мой вопрос - как мне это сделать?

Я явно не хочу сделать это, потому что это примерно в 50 раз медленнее:

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

Может кто-нибудь помочь мне здесь?

Я нашел a пару из статей, которые подробно описываются, и все они, похоже, сводятся к: "Просто используйте .GetNewClosure()". Это не сработало для меня:

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

1 Ответ

0 голосов
/ 14 мая 2019

Огромное спасибо Тесле Грейту выше - это решение действительно работает:

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

И оно так быстро, как и должно быть.

Удивительно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...