使用PowerShell查询带加号(+)的电子邮件地址

qjp7pelc  于 2023-04-21  发布在  Shell
关注(0)|答案(1)|浏览(425)

我正在改编一个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工作正常,但我坚持搞清楚如何处理这种情况?

7nbnzgx9

7nbnzgx91#

我尝试在我的环境中复制相同的内容,下面是结果

您遇到的问题是由于加号(+)是Microsoft Graph查询语言中的特殊字符,用于表示搜索查询中的空格。
如果我尝试使用-Search获取用户的联系方式,我会得到下面的错误。

Get-MgContact -consistencylevel eventual -Search "Theja+a@xxxxxxxxx.OnMicrosoft.com"

错误

要解决此问题,可以使用**-replace运算符将加号替换为URL编码版本“%2B”**。

Install-Module -Name Microsoft.Graph.Identity.DirectoryManagement -Force
Update-Module -Name Microsoft.Graph.Identity.DirectoryManagement -Force

Connect-MgGraph –Scopes "Application.ReadWrite.All","DeviceManagementApps.Read.All", "Directory.AccessAsUser.All","Directory.ReadWrite.All"

$email = 'Theja+a@M365x77030329.OnMicrosoft.com'
$urlEncodedEmail = $email -replace '\+','%2B'
$searchQuery = "mail:$urlEncodedEmail"

$Result= Get-MgContact -consistencylevel eventual -Search $searchQuery
$Result

输出

参考:MS Doc Get-MgContact

相关问题