使用Microsoft Graph PowerShell脚本检查Office 365用户存在性的问题
用Microsoft Graph检查Office 365用户存在性的问题修复
我正在编写旧脚本的新版本,将其升级为使用Microsoft Graph创建Office 365账户。目前遇到问题:编写的检查用户是否存在的函数,因Get-MgUser返回对象的特性导致现有逻辑有时运行失败,尝试过Get-MgUserCount也未成功。
原函数代码:
#Function to check account existence Function AccountExists { Param( [string]$fxEmailAccount ) #Validamos si la cuenta existe $return = [System.Convert]::ToBoolean("TRUE") try { $user = Get-MgUser -UserId $fxEmailAccount Write-Output $($user.Count()) } catch { $return = [System.Convert]::ToBoolean("FALSE") } return $return } $result = AccountExists -fxEmailAccount zpinillal@mydomain.com
原逻辑的错误点
- 默认返回值逻辑颠倒:默认返回
$true,只有捕获异常才返回$false,不符合“未验证到存在则默认不存在”的合理逻辑。 $user.Count()调用错误:当Get-MgUser找到单个用户时,返回的是单个对象而非数组,单个对象没有Count()方法,会触发异常被catch捕获,导致错误返回$false。- 多余的
Write-Output:该语句不仅无意义,还会干扰函数的返回值输出。
修复后的函数实现
Function AccountExists { Param( [string]$fxEmailAccount ) # 默认标记用户不存在 $exists = $false try { # 仅请求用户ID字段,减少API返回数据量提升效率 $user = Get-MgUser -UserId $fxEmailAccount -Select Id -First 1 # 若返回对象不为空,说明用户存在 if ($null -ne $user) { $exists = $true } } catch { # 捕获用户不存在(404)或其他请求异常,均标记为不存在 $exists = $false } return $exists } $result = AccountExists -fxEmailAccount zpinillal@mydomain.com
另一种实现:使用Get-MgUserCount
如果想用Get-MgUserCount实现,需通过筛选器匹配邮箱,同时注意添加必要的请求头:
Function AccountExists { Param( [string]$fxEmailAccount ) try { # 根据实际场景选择mail或userPrincipalName作为筛选字段 $count = Get-MgUserCount -Filter "mail eq '$fxEmailAccount'" -Headers @{ConsistencyLevel = 'eventual'} # 统计数大于0则说明用户存在 return $count -gt 0 } catch { return $false } }
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

