The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過 Microsoft Graph PowerShell 取得使用者的 Department 資料

由於 Microsoft Graph PowerShell 的 Microsoft.Graph 模組背後是呼叫 Microsoft Graph REST API v1.0 endpoint,所以有許多 Cmdlets 命令都受限於 Microsoft Graph REST API 的設計,因此使用上相當不便。當我在用 Get-MgUser Cmdlet 取得使用者資料時,一直都沒辦法取得 Department 屬性資料,今天終於給我研究出方法了。

image

List users - Microsoft Graph v1.0 有一段說明是這樣寫的:

By default, only a limited set of properties are returned (businessPhones, displayName, givenName, id, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage, surname, and userPrincipalName).To return an alternative property set, specify the desired set of user properties using the OData $select query parameter. For example, to return displayName, givenName, and postalCode, add the following to your query $select=displayName,givenName,postalCode.

也因為這個原因,害我好幾個月以來一直找不到方法可以取得使用者的部門資料,我下的命令是這樣:

Get-MgUser -Filter "UserPrincipalName eq 'user@example.com'" | select Id,UserPrincipalName,DisplayName,Mail,UserType,Department

你將會發現,回應的結果中 Department 屬性是空的!

使用 Microsoft.Graph 模組

由於我一直以來都使用 Microsoft.Graph 模組在執行命令,無論如何先升級到最新版再說:

Update-Module Microsoft.Graph

今天我找到了一個解決方案,那就是要額外加上 -Property-Select 明確指明要輸出哪些屬性,這樣就可以拿到資料了!

Get-MgUser -Filter "UserPrincipalName eq 'user@example.com'" -Select Id,UserPrincipalName,DisplayName,Mail,UserType,Department | select Id,UserPrincipalName,DisplayName,Mail,UserType,Department

這個問題在 PowerShell 的文件中完全沒有提及!😒

安裝 Microsoft.Graph.Beta 模組

這個問題已經在 Microsoft.Graph.Beta 被解決了,所以你可以安裝這個模組來使用:

Install-Module Microsoft.Graph.Beta -Scope CurrentUser

備註: Microsoft.Graph.Beta 背後是呼叫 Microsoft Graph REST API beta endpoint 喔!

然後很直覺的使用這個命令下去執行即可:

Get-MgBetaUser -Filter "UserPrincipalName eq 'will.huang@miniasp.com'" | select Id,UserPrincipalName,DisplayName,Mail,UserType,Department

注意: 使用 Get-MgBetaUser 可以回傳所有屬性,其中包含重要的 AssignedLicenses 屬性!

總結

今後我不會再用 Microsoft.Graph 模組了,改用 Microsoft.Graph.Beta 模組才是王道!👍

相關連結

留言評論