使用Get-MgUser查询含特殊字符的Azure用户时遇400错误的解决方法
解决Get-MgUser查询含特殊字符用户ID的400错误
问题原因
- PowerShell中
&是命令分隔符,直接写ABC&CD@domain.onmicrosoft.com会被解析成执行ABC命令后接CD@domain.onmicrosoft.com,导致参数传递错误。 - Graph API要求URL中的特殊字符必须编码,未编码的
&会被识别为请求参数分隔符,引发400 BadRequest错误。
解决方法
方法1:用单引号包裹用户ID
单引号在PowerShell中会将内容视为原样字符串,不会解析特殊字符,修改脚本如下:
$Account_disabled = ((Get-MgUser -UserId 'ABC&CD@domain.onmicrosoft.com' -Property accountEnabled | Select-Object accountEnabled).AccountEnabled -eq $false)
方法2:对用户ID进行URL编码
如果单引号包裹仍有问题,使用[Uri]::EscapeDataString()对用户ID进行URL编码,确保Graph API能正确识别:
$userId = 'ABC&CD@domain.onmicrosoft.com' $encodedUserId = [Uri]::EscapeDataString($userId) $Account_disabled = ((Get-MgUser -UserId $encodedUserId -Property accountEnabled | Select-Object accountEnabled).AccountEnabled -eq $false)
验证
执行修改后的脚本后,PowerShell会正确传递用户ID到Graph API,避免因特殊字符导致的请求格式错误,成功获取用户的accountEnabled属性。
内容的提问来源于stack exchange,提问作者Kartik M
相关产品推荐
相关产品推荐

