So last week I created a blog about gathering Horizon entitlements using the api’s. At the end I promised that my next blog post would be about creating entitlements and guess what: that’s this post 🙂
First a short explanation about what UserEntitlements actually are in Horizon. When you pull the entitlement info the base property has the needed information.
So in short an entitlement is a link between the userorgroup object id and a resource object id. The resource object can be: Application, Desktop, Global Application Entitlement, Global Desktop Entitlement and URLRedirection.
Let’s first grab the id’s that we need, I use 2 queries for that bur first I put the names of the group and the desktop in variables:
$groupname = "example_group" $poolname = "pod01_pool01"
Than I create two objects called $group and $pool using queries.
$queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'ADUserOrGroupSummaryView' $defn.Filter = New-Object VMware.Hv.QueryFilterEquals -property @{'memberName'='base.name'; 'value' = "$groupname"} $group= ($queryService.queryService_create($HVService, $defn)).results $queryService.QueryService_DeleteAll($HVService) $queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'DesktopSummaryView' $defn.Filter = New-Object VMware.Hv.QueryFilterEquals -property @{'memberName'='desktopSummaryData.displayName'; 'value' = "$Poolname"} $pool= ($queryService.queryService_create($HVService, $defn)).results $queryService.QueryService_DeleteAll($HVService)
Next we create the object to link them together.
$userentitlement= new-object VMware.Hv.UserEntitlementBase $userentitlement.UserOrGroup = $group.id $userentitlement.Resource = $pool.id
And we create the actual entitlement, since the output we get from this is the id of the entitlement object I store this in a variable to show you the entitlement in the next step.
and to show the entitlement
($hvservice.UserEntitlement.UserEntitlement_Get($newentitlement)).base
If you want to create entitlements for other resource you’ll need to use the either of the following to build your query:
Name | Data object | property to filter on |
Application | ApplicationInfo | data.displayName |
Desktop | DesktopSummaryView | DesktopSummaryData.displayName |
Global Application Entitlement | GlobalApplicationEntitlementInfo | base.displayName |
Global Desktop Entitlement | GlobalEntitlementInfo | base.displayName |
There is no query for the URLRedirection so you’ll need to use URLRedirection.URLRedirection_List() to get the entire list and select the right one from that.
This is a complete example script that you could use to create a desktop entitlement:
Import-Module VMware.VimAutomation.HorizonView Import-Module VMware.VimAutomation.Core $cs = 'pod1cbr1.loft.lab' $groupname = "example_group" $poolname = "pod01_pool01" $hvServer = Connect-HVServer -Server $cs $HVService= $hvServer1.ExtensionData $queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'ADUserOrGroupSummaryView' $defn.Filter = New-Object VMware.Hv.QueryFilterEquals -property @{'memberName'='base.name'; 'value' = "$groupname"} $group= ($queryService.queryService_create($HVService, $defn)).results $queryService.QueryService_DeleteAll($HVService) $queryService = New-Object VMware.Hv.QueryServiceService $defn = New-Object VMware.Hv.QueryDefinition $defn.queryEntityType = 'DesktopSummaryView' $defn.Filter = New-Object VMware.Hv.QueryFilterEquals -property @{'memberName'='desktopSummaryData.displayName'; 'value' = "$Poolname"} $pool= ($queryService.queryService_create($HVService, $defn)).results $queryService.QueryService_DeleteAll($HVService) $userentitlement= new-object VMware.Hv.UserEntitlementBase $userentitlement.UserOrGroup = $group.id $userentitlement.Resource = $pool.id $hvservice.UserEntitlement.UserEntitlement_Create($userentitlement)