使用PowerShell从Azure AD获取用户数据时无法获取OfficeLocation字段
问题:AzureAD PowerShell无法获取OfficeLocation字段
我在Azure门户中能看到用户的OfficeLocation字段数据,但用PowerShell脚本无法获取到该字段。我的脚本如下:
$users = Get-AzureADUser -All $true | ` Where-Object {$_.CompanyName -like 'CompanyName*'} | ` Get-Random -Count 1000 | ` Select-Object @{N="EmployeeID";E={$_.ExtensionProperty.employeeId}}, GivenName, Surname, OfficeLocation
注:出于隐私考虑修改了公司名称并移除部分检索对象,脚本可正常获取其他所需数据。此前EmployeeID字段无法直接获取,通过查询测试后用ExtensionProperty解决,但OfficeLocation字段尝试多种写法均失败:
- 尝试过
OfficeLocation、officeLocation等不同大小写的字段名 - 尝试过自定义属性写法:
@{N="OfficeLocation";E={$_.AdditionalProperties["officeLocation"]}} - 也尝试过:
@{N="OfficeLocaton";E={$_.ExtensionProperty.officeLocation}}
两种写法都无效。已确认账户权限无问题,请问为何无法获取OfficeLocation字段?是否只能通过Microsoft Graph API实现?
原因及解决方法
1. AzureAD模块的字段映射差异
Get-AzureADUser返回的对象中,Azure门户显示的OfficeLocation对应AD原生属性PhysicalDeliveryOfficeName,这个字段既不在顶层属性直接暴露,也不在ExtensionProperty或AdditionalProperties集合里。修改脚本直接调用该属性即可:
$users = Get-AzureADUser -All $true | ` Where-Object {$_.CompanyName -like 'CompanyName*'} | ` Get-Random -Count 1000 | ` Select-Object @{N="EmployeeID";E={$_.ExtensionProperty.employeeId}}, GivenName, Surname, @{N="OfficeLocation";E={$_.PhysicalDeliveryOfficeName}}
2. 名称差异的原因
Azure门户为了用户友好,将AD原生属性physicalDeliveryOfficeName显示为OfficeLocation,但Get-AzureADUser直接返回AD的原始属性名,没有做前端的名称转换,所以直接写OfficeLocation无法匹配到对应字段。
3. 是否需要切换到Microsoft Graph?
不需要,用上述方法修改现有脚本就能解决问题。不过如果后续需要调用更多现代AzureAD功能,Microsoft Graph是官方推荐的方向,示例脚本如下:
# 需先安装Microsoft.Graph.Users模块并完成身份验证 Get-MgUser -Filter "startsWith(companyName,'CompanyName')" -Top 1000 -Select GivenName,Surname,OfficeLocation,EmployeeId
内容的提问来源于stack exchange,提问作者Sanktas
相关产品推荐
相关产品推荐

