Somehow I have never really blogged about using the Horizon api’s to gather entitlement data. These are actually stored in entitlement objects and we can find them using a query against either the EntitledUserOrGroupLocalSummaryView or EntitledUserOrGroupGlobalSummaryView objects. Let’s start with the local variety.
$queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'EntitledUserOrGroupLocalSummaryView' $queryResults= ($queryService.queryService_create($HVservice, $defn)).results $queryService.QueryService_DeleteAll($HVservice) $queryresults
So we have some property’s and the ID is the easiest one to use since it’s of the VMware.Hv.UserOrGroupId type that we can resolve using aduserorgroup.aduserorgroup_GetInfos(arrayofids)
$hvservice.ADUserOrGroup.ADUserOrGroup_GetInfos($queryResults.id)
and the name is visible using base.displayname
($hvservice.ADUserOrGroup.ADUserOrGroup_GetInfos($queryResults.id)).base.displayname
Yes that’s me making a typo, try to talk to me on Slack. I hardly type anything without typo’s. Back to the $queryresults because there’s an easier way to get the group or username because it’s listed under the base property.
$queryresults.base
or
So we now have the group or username now we need to find what they have been entitled to, this information is stored under localdata.
$queryresults.localdata
The Applications and Desktops properties contain the ids where the users have rights to so if we use Desktop.Desktop_GetSummaryViews or Application_GetSummaryViews we end up with the relevant data. I have opened the summarydata for both to make things more visible.
($hvservice.Desktop.Desktop_GetSummaryViews($queryResults.localdata.desktops)).desktopsummarydata ($hvservice.Application.Application_GetSummaryViews($queryResults.localdata.applications)).applicationsummarydata
To create a nice overview of this I have created a small script
$queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'EntitledUserOrGroupLocalSummaryView' $queryResults= ($queryService.queryService_create($HVservice, $defn)).results $queryService.QueryService_DeleteAll($HVservice) $entitlements=@() foreach ($queryresult in $queryresults){ $userorgroupname = $queryresult.base.displayname $group = $queryresult.base.group $desktops=@() if ($queryresult.localdata.desktops){ foreach ($desktop in $queryresult.localdata.desktops){ $desktops+=($hvservice.desktop.desktop_get($desktop)).base.name } } $applications=@() if ($queryresult.localdata.applications){ foreach ($application in $queryresult.localdata.applications){ $applications+=($hvservice.application.application_get($application)).data.name } } $entitlements+=New-Object PSObject -Property @{ "Name" = $userorgroupname; "group" = $group; "desktops" = $desktops; "applications" = $applications; } } $entitlements | select-object Name,group,desktops,applications
as you can see user1 is the lucky SoB that I test everything on.
The difference with global entitlements is that the localdata property is replaced bij globaldata.
$queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'EntitledUserOrGroupGlobalSummaryView' $queryResults= ($queryService.queryService_create($HVservice, $defn)).results $queryService.QueryService_DeleteAll($HVservice) $queryresults
And the entitlements are named a bit different
$queryresults.globaldata
To rebuild the script for global entitlements it needed a bit of tinkering but here it is
$queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'EntitledUserOrGroupGlobalSummaryView' $queryResults= ($queryService.queryService_create($HVservice, $defn)).results $queryService.QueryService_DeleteAll($HVservice) $entitlements=@() foreach ($queryresult in $queryresults){ $userorgroupname = $queryresult.base.displayname $group = $queryresult.base.group $desktops=@() if ($queryresult.globaldata.GlobalEntitlements){ foreach ($desktop in $queryresult.globaldata.GlobalEntitlements){ $desktops+=($hvservice.GlobalEntitlement.GlobalEntitlement_Get($desktop)).base.displayname } } $applications=@() if ($queryresult.globaldata.GlobalApplicationEntitlements){ foreach ($application in $queryresult.globaldata.GlobalApplicationEntitlements){ $applications+=($hvservice.GlobalApplicationEntitlement.GlobalApplicationEntitlement_Get($application)).base.displayname } } $entitlements+=New-Object PSObject -Property @{ "Name" = $userorgroupname; "group" = $group; "desktops" = $desktops; "applications" = $applications; } } $entitlements | select-object Name,group,desktops,applications
So here you have the ways to retrieve information about entitlements, locally and globally. Next post will be about creating entitlements.