通过脚本在Exchange中搜索mailcontact

时间:2018-05-23 06:22:26

标签: powershell exchange-server exchangewebservices

我无法通过PowerShell脚本搜索mailcontacts,但如果我在PowerShell中手动运行相同的命令,则可以正常运行。

在PowerShell中手动运行的命令是:

Get-MailContact -Filter {name -like "*test*"}

但是如果我把文本放在一个变量中:

Get-MailContact -Filter {name -like "*$s*"}

我得到另一个结果;主要是什么都没有,其中没有任何联系人包含" test"。如果命令在脚本中,则相同。

我可以执行以下操作,但搜索速度要慢得多,我会尽量避免

Get-MailContact -ResultSize unlimited | ? {$_.name -like "*$s*"}

P.S。 脚本将加载到模块中,并将搜索词作为参数输入。所以第二个命令是首选。

2 个答案:

答案 0 :(得分:0)

看起来过滤器通过字符串“按原样”发送,没有替换(即,它实际上是在检查名为*$s*的用户)。解决此问题的一种方法是预先生成模式。有点笨重,但应该工作:

$name = "Mary"
$pattern = "*$name*"

Get-MailContact -Filter {name -like $pattern}

答案 1 :(得分:0)

我找到了答案。

我找到了解释here 简短的回答:Exchange cmdlet在语法上有点不同。

将卷曲支架改为双引号后,我得到了我想要的东西。 解决方案如下:

Get-MailContact -Filter "Name -like '$s'"

也适用于Get-DistributionGroup:

Get-DistributionGroup -Filter "Name -like '$s'"

$s包含用通配符包围的搜索词:

$searchword = "test"
$s = "*$searchword*"