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)





