我无法通过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。 脚本将加载到模块中,并将搜索词作为参数输入。所以第二个命令是首选。
答案 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*"