是否有API获取M365新增用户代词?如何同步至AD?
获取Microsoft 365用户代词的可行方案
一、Microsoft Graph API(推荐方式)
Microsoft 365的用户代词数据可通过Microsoft Graph API的用户资源获取,对应字段为pronouns。
1. 权限要求
根据使用场景选择以下权限之一:
User.Read.All(应用权限,支持批量读取)User.ReadBasic.All(应用权限)User.Read(委托权限,读取当前用户数据)User.ReadWrite(委托权限,支持读取和修改)
2. 请求示例
获取单个用户代词
GET https://graph.microsoft.com/v1.0/users/{user-id}/pronouns
响应示例:
{ "value": "she/her" }
批量获取用户代词
GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,pronouns
3. PowerShell调用示例(基于Microsoft Graph PowerShell模块)
先完成模块安装与连接:
Install-Module Microsoft.Graph.Users -Force Connect-MgGraph -Scopes "User.Read.All"
获取单个用户代词:
Get-MgUserPronoun -UserId "user@example.com"
批量筛选并获取用户代词:
Get-MgUser -Filter "pronouns ne null" -Select Id,DisplayName,Pronouns | Format-Table DisplayName,Pronouns
二、Exchange Web Services (EWS)
根据官方说明,代词存储在Exchange邮箱的扩展属性中,可通过EWS访问获取。
1. 权限准备
需为应用分配目标用户邮箱的FullAccess权限,或使用委托权限进行访问。
2. PowerShell示例(使用EWS Managed API)
# 加载EWS Managed API库 Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" $ewsUrl = "https://outlook.office365.com/EWS/Exchange.asmx" $username = "admin@example.com" $password = ConvertTo-SecureString "你的密码" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($username, $password) $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016) $service.Credentials = $credential $service.Url = New-Object System.Uri($ewsUrl) # 指定目标用户邮箱 $mailbox = New-Object Microsoft.Exchange.WebServices.Data.Mailbox("user@example.com") $folderId = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Root, $mailbox) # 定义代词对应的扩展属性ID $pronounProperty = New-Object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x7A0A, [Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) # 加载并读取扩展属性 $folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderId, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstClassProperties) $folder.Load([Microsoft.Exchange.WebServices.Data.PropertySet]::CreateFromPropertyDefinitions([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties, $pronounProperty)) # 输出代词数据 if ($folder.ExtendedProperties.Contains($pronounProperty)) { Write-Host "用户代词: " $folder.ExtendedProperties[$pronounProperty].Value }
三、关于Exchange Online PowerShell模块
当前ExchangeOnlineManagement模块的Get-Mailbox命令无法直接返回代词数据,因为该数据未暴露在邮箱常规属性中。若需通过Exchange PowerShell获取,可结合上述EWS方案,或优先使用Microsoft Graph的实现方式。
内容的提问来源于stack exchange,提问作者Maia Yeager
相关产品推荐
相关产品推荐

