【问题标题】:Searching mailcontact in Exchange via script通过脚本在 Exchange 中搜索 mailcontact
【发布时间】:2018-11-02 00:24:07
【问题描述】:

我在通过 PowerShell 脚本搜索邮件联系人时遇到问题,但如果我在 PowerShell 中手动运行相同的命令,它可以工作。

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

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

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

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

我得到另一个结果;基本上什么都没有,其中没有一个联系人包含“测试”。如果命令在脚本中,则相同。

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

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

附: 脚本被加载到模块中,搜索词作为参数输入。所以首选第二个命令。

【问题讨论】:

  • Get-MailContact -Filter {name -like "*$($s)*"} 适合你吗?
  • 不,没有任何结果。

标签: powershell exchange-server exchangewebservices


【解决方案1】:

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

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

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

【讨论】:

  • 那行不通。它似乎获取所有邮件联系人 15.000+
  • Hmmmm ...我无法使用Get-MailContact 进行测试,但确实尝试使用Get-ADUser,它使用相同的过滤器格式并且它按照我的建议工作。也许 cmdlet 对过滤器有一些怪癖 - 文档中有什么有用的吗?
  • 可能是Get-MailContactGet-ADUser 处理过滤器的方式不同。不幸的是,我在文档中没有找到任何内容。
【解决方案2】:

我已经找到了答案。

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

将大括号改为双引号后,我得到了我想要的。 解决方法如下:

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

也适用于 Get-DistributionGroup:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多