我正在改编一个Powershell脚本,该脚本可以根据AzureAD到MS Graph的姓名和电子邮件地址列表查询并创建EXO联系人和用户。
在我的旧脚本中,我可以使用Get-EXORecipient和Get-AzureADUser查询电子邮件地址。在新的世界中,我使用Get-MgUser和Get-MgContact。
在大多数情况下,这工作得很好,但我现在遇到了一个难题,我有多个不同的联系人,他们有相同的基本电子邮件地址,使用加号地址来区分(所以,user+a@foo.com,user+b@foo.com,user+c@foo.com等)。
我的旧脚本处理得很好。但是MS Graph cmdlet似乎将+解释为特殊字符,并且无法返回结果,这破坏了我的脚本。
有没有一种简单的方法来避免或处理这种情况,而不需要我每次都进行输入验证?我希望这仍然只是一个简单的字符串比较。
在一个基本的层面上,我只是想这样做:
Get-MgContact -consistencylevel eventual -Search 'mail:foo@foo.com'
要么有结果要么没有。
如果联系人的电子邮件地址中包含加号,则会出现此错误。Get-MgContact -consistencylevel eventual -Search 'mail:foo+a@foo.com'
不返回任何结果,即使此联系人电子邮件地址存在。
我可以做一个部分查询,这个工作,除了我有多个联系人的不同的人谁共享相同的基本电子邮件地址(这是一个家庭,他们使用+为他们的孩子)。
所以我可以做Get-MgContact -consistencylevel eventual -Search 'mail:foo'
并得到所有相应的结果,但是一旦我加上+,我什么也得不到。
这一切都与旧的cmdlet工作正常,但我坚持搞清楚如何处理这种情况?
1条答案
按热度按时间7nbnzgx91#
我尝试在我的环境中复制相同的内容,下面是结果
您遇到的问题是由于加号(+)是Microsoft Graph查询语言中的特殊字符,用于表示搜索查询中的空格。
如果我尝试使用
-Search
获取用户的联系方式,我会得到下面的错误。错误
要解决此问题,可以使用**-replace运算符将加号替换为URL编码版本“%2B”**。
输出
参考:MS Doc Get-MgContact