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