我有一些api调用,这些调用使我从Microsoft 365资产中获取信息,尤其是我满意的用户和许可证信息,然后将这些数据推送到MySQL数据库。
有些用户拥有多个产品许可证,比如说“ Office 365”和“ Project Professional”。
运行脚本时, ForEach 会捕获 System.Array 中的第一个许可证,但是我无法确定如何为用户捕获后续许可证。
Api的
$apiUrl = 'https://graph.microsoft.com/v1.0/subscribedSkus/'
$skus = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get
$skus = ($skus | select-object Value).Value
#####
$apiUrl = 'https://graph.microsoft.com/v1.0/users?$select=displayName,userPrincipalName,assignedLicenses'
$users = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method GET
$users = ($users | select-object Value).Value
当前脚本:
ForEach($item in $users){
$itemSkuId = $item.assignedLicenses.skuId
ForEach($plan in $skus){
If($plan.skuId -in $itemSkuId){
$itemSkuId = $plan.skuPartNumber
$item.assignedLicenses = $itemSkuId
}
}
}
ForEach($item in $users){
if($item.assignedLicenses -notin $skus.skuPartNumber){
$item.assignedLicenses = ("No License Assigned")
}
}
Api调用的示例输出显示$ users: 一个人只分配了1个许可证,另一个人却分配了2个许可证(差异产品)。
displayName userPrincipalName assignedLicenses
----------- ----------------- ----------------
Joe Bloggs Joe.Bloggs@test.com {@{disabledPlans=System.Object[]; skuId=cdd28e44-67e3-425e-be4c-737fab2899d3}}
Joe Bloggs2 Joe.Bloggs@test.com {@{disabledPlans=System.Object[]; skuId=29a2f828-8f39-4837-b8ff-c957e86abe3c}, @{disabledPlans=System.Object[]; s...
本质上,分配给用户的每个许可证都会赋予另一个skuId值。