Sending messages to users with the Horizon API’s

I got the question today from Fabian Lenz if it is possible to send messages to end users using the Horizon API. I knew I had seen it somewhere already and here’s a quick explanation.

There are two method’s to do this, one for a single session and the other for a group of sessions. Both fall under the session service.

$services1.session | gm

You can see both the methods called session_sendmessage and session_sendmessages if we look at what’s required for both we see that the difference is a single sessionid or an array of session id’s.

Let’s see what the API explorer says what’s needed.

So the msgtype is a string that can have three values and the message is just a string, let’s test this.

I am lazy and will use get-hvlocalsession for the sessionid.

$session=get-HVlocalsession | select -first 1

I do the -first 1 so it isn’t an array but a single session.

Now let’s send a message.

 $services1.session.Session_SendMessage($session.id,"INFO","This is a test message for retouw.nl at 30-10-2018 19:13h")

And the result:

Now let’s do the same for multiple sessions.

$sessions=get-HVlocalsession
$services1.session.Session_SendMessages($sessions.id,"ERROR","This is a test message with multiple recipients for retouw.nl at 30-10-2018 19:25h")

And to show that this also works for global sessions (both where connected to pod2cbr1)

$sessions=get-HVglobalsession 
$services2.session.Session_SendMessages($globalsessions.id,"WARNING","This is a test message with multiple global recipients for retouw.nl at 30-10-2018 19:30h")

If you want to filter the sessions on user or machine name you can filter the $globalsessions on $globalsessions.namesdata.basenames

 $globalsessions.namesdata.basenames | select-object username,machineorrdsservername,clientname

With the localsessions it’s located in $sessions.namesdata

$sessions.namesdata | select-object username,machineorrdsservername,clientname

It’s also possible to filter this with the query service, take a look on my previous post on how to handle queries.

So now you know how to send messages to users. Not that they always read these messages but at least you can try warning them a bit faster now!

Horizon View Api’s: back to basics part 2: Queries

So this is the second post in this series about the Horizon View API basics. While functions logically would be part 2 I have decided on doing queries first since you might need the result for a query before you can use some of the functions. Some if it will seem double from my recent post about pulling event information but not everyone might be looking into that. This post will not have as much gifs as the first post but that’s because only the end results count for this one.

Looking at the API Explorer these are the services that we can actually query:

There are some examples in the API explorer but will show you some different examples with the aduserorgroupsummaryview since that one has a lot of documented filters and I can easily add some extra accounts to show different queries.

The first thing that we always need to do with queries is to declare the queryservice object

$queryservice=new-object vmware.hv.queryserviceservice

If you do a get-method on this object it will show several possible methods to use.

The next thing to do is to create a definition object in which we will declare the things the query looks for.

$defn = New-Object VMware.Hv.QueryDefinition

When getting this object and its get-method it shows the definitions we can set, as you can see all method’s are already visible from just viewing the object so we don’t need to use the get-method anymore.

Now we need to set a QueryEntityType these can be found in the API explorer under the Queryable Entity Types. They have to be used between quotation marks.

$defn.queryentitytype='ADUserOrGroupSummaryView'

Now we’re already set to create some results by putting the query into an object.

$queryResults = $queryService.QueryService_Create($hvServices1, $defn)

As you can see below this will create an object where the results property contains all the data. This Results property has 2 other properties of it’s own that actually contain all the data.

And if we expand the base property it gives us one of the build-in Active Directory groups.

$queryresults.results | select-object -first 1 | select -expandproperty Base

Since this can go several layers deep it is smarter to use the round brackets to get this information. (Select -expandproperty following select – expandproperty is just ugly and takes too long)

($queryresults.results | select-object -first 1).base

This way it’s also easy to count the amount of returned objects. This is very useful if you have a bigger environment and want to take counts of sessions with their status (i.e. Connected, disconnected, error etc)

($queryresults.results).count

Next up is adding a filter, so we only get user accounts but we need to do some maintenance first. If you do too many queries it is possible that you will get some errors about too many filters or something (of course I am not getting them while writing this post) so, it might be needed to remove the old stored queries is possible with the queryservice_deleteall method.

$queryservice.QueryService_DeleteAll($hvservices1)

This does not give any feedback on the results so let’s continue with the old query and put a filter on it. First you need to know what kind of filter you need and the options are listed in the API explorer.

The first one I will use is queryfilterequals since I use that the most. I start by defining a filter object consisting of a property with a value.

$filter = New-Object VMware.Hv.QueryFilterEquals -Property @{ 'memberName' = 'base.group'; 'value' = $false }

Then I will add it to the querydefinition

 $defn.filter=$filter

Now I will show you the results + the fact that you don’t necessarily need to define an object for the results. I have selected the first result to show you that it contains the domain administrator account

($queryService.QueryService_Create($hvServices1, $defn)).results.base | select -first 1

It is also possible to combine several filters into one query, while the ad service might not be the most useful for this it can still be used as an example. The thing to do is to first create a couple of filters.

Please be aware that these membernames are case sensitive!

$notgroupfilter = New-Object VMware.Hv.QueryFilterEquals -Property @{ 'memberName' = 'base.group'; 'value' = $false }
$usernamefilter = New-Object VMware.Hv.QueryFilterEquals -Property @{ 'memberName' = 'base.loginName'; 'value' = "m_wouter" }

These need to be combined into one array

$filterarray=@()
$filterarray+=$notgroupfilter
$filterarray+=$usernamefilter

To filter on multiple things we need to have a filterand object

$filterAnd = New-Object VMware.Hv.QueryFilterAnd

And then we can add the $filterarray to this object

$filterAnd.Filters = $filterarray

and finally we put this object into the querydefinition object

$defn.Filter = $filterAnd

Now let’s run the query

($queryService.QueryService_Create($hvServices1, $defn)).results.base

That’s it for the basics of doing queries using the Horizon View API’s. There are some more things that we can do with these like sorting them, but I think you can find that on your own in the API explorer examples.

Nutanix Technology Champion, what’s in it for you?

This week it was announced that applications for the 2019 Nutanix Technology Champions (NTC) are open. Despite not having worked with Nutanix in production in a while I have been a member of this great piece of vCommunity for two years now. Angelo, who runs the program, listed the benefits to include the following:

  • Early access briefings about Nutanix products and announcements
  • Access to private betas and insight into ongoing product development
  • Participation in exclusive meetings with engineering teams
  • Access to discussions on the Nutanix NTC slack channel with internal teams
  • Exclusive activities at our annual .NEXT conference including pre-show briefings
  • Support and Mentorship for those seeking NCP, NCAP and NPX career development

Let’s dive into these benefits a bit deeper.

Early access briefings about Nutanix products and announcements

Since I don’t work with the tech this is what really keeps me up to speed on what Nutanix is doing. While sometimes it’s hard for them to do it really early with the fast pace of developing new features or tools this still gives the edge for bloggers who like to blog about this. But it also gives us the possibility to provide feedback before it’s released for new ideas or enhancements.

Access to private betas and insight into ongoing product development

Again due to the high pace of developing at Nutanix the first part doesn’t happen too often but the second one does every now and then. Engineers pitch ideas during regular calls and use our reactions to those to see if it would be worth implementing.

Participation in exclusive meetings with engineering teams

See the previous point, it’s really valuable for both sides to give and receive the input on new developments.

Access to discussions on the Nutanix NTC slack channel with internal teams

Being a customer or partner this is the icing on the cake for you. Besides communicating with your fellow NTC’s every Nutanix employee can have access to our Slack Channel. I have been on the phone with support during an issue while on Slack I was able to give logs and other information that otherwise might have taken a bit more time to end up on their side. In here there are no stupid questions and if the person with the required knowledge isn’t in the channel someone else will invite them in. And it isn’t about Nutanix software only, if someone at Nutanix has the knowledge we will get them in there. Want to ask CEO Dheeraj Pandey a question? He’s in there as well!

Exclusive activities at our annual .NEXT conference including pre-show briefings

We always have a NTC lunch at .Next and several briefings up front so we know what to expect. Angelo is also a selfie maniac at conferences so you probably won’t get away without one posted on Twitter. Everywhere you go you’ll find another NTC around so like most conferences it’s a great place to make new and meet old friends.

(and no I never look good on selfies :D)

Support and Mentorship for those seeking NCP, NCAP and NPX career development

For this again the Slack channel is essential. After a call about the NPX certification ealy this year I pitched the idea to have a bootcamp in The Netherlands and that turned out to be a success as you can see in my blogpost about it.

Other things

Are there any other advantages than those that Angelo names? Yes there certainly are, all NTC’s get a free subscription to Pluralsight and on a regular base we have calls with vendors that also supply us with nfr licenses. For example we have access to hycu, Bitdefender and after the comming call also  Unitrends.

Conclusion

It doesn’t matter if you are a partner, customer or member of the greater vCommunity being a member of the NTC program is great benefit. Angelo really strives to help us grow in whatever we do and succeeds in that! If it isn’t about the knowledge then it is about expanding your network in this awesome thing that we call the vCommunity.

[Update 15-10] VMware PowerCLI 11.0.0 release with new Horizon (7.6!) API calls

UPDATE 12-10: The new API explorer page also has been published, it just needs to be added to the main page. Check this link: https://code.vmware.com/apis/445

Update 15-10: I have received an overview from VMware about the other changes:

New API Endpoints:
ConnectionServer_GetTags
GlobalSettings_GetEnvironmentSettings
QueryService_DeleteByIds
Datastore_GetDatastoreRequirements
Datastore_ListDatastoresByDesktopOrFarm
RemoteApplication_EndApplication

There also have been some changes to some objects (MachineBase,AccessGroup etc) to include more properties

Original Article:

Today the latest version of PowerCLI was released with version 11.0.0. When you look at the release notes it’s obvious that some extra things have been added for the Horizon VIew API’s.

PowerCLI has been moving at quite the rapid pace over the last 2 years. In 2018, we’ve been releasing roughly every other month to make sure we get the latest features, performance improvements, and updates available as quickly as possible. Well, it’s been two months and we’re not going to break this trend. Today, we are releasing PowerCLI 11.0.0!

PowerCLI 11.0.0 comes with the following updates:

  • Added a new Security module
  • Added new cmdlets for Host Profiles
  • Added a new cmdlet to interact with NSX-T in VMware Cloud on AWS
  • Support for vSphere 6.7 Update 1
  • Support for NSX-T 2.3
  • Support for Horizon View 7.6
  • Support for vCloud Director 9.5
  • Multiplatform support for the Cloud module
  • Updated the Get-ErrorReport cmdlet
  • Removed the PCloud module
  • Removed the HA module

Even though Jake Robinson already gave me a heads up that this version was coming it’s always the question what has been added for Horizon View. According to the API explorer page no new querydefinitions have been added. Like last time I decided to compare the services against the old list and there are two new additions:

  • CategoryFolder
  • ResourceSettings

I have tried both against a Horizon 7.5 setup and they failed so these are only exposed from Horizon View 7.6 and up.

The first one called Categoryfolder is linked to the possibility to put rdsh applications into folders.

It currently has only one function:

I have also investigated if there was a way to change things using the helper function but sadly it has no .update api call so that’s a no-go. I currently have no rdsh on my lab so I can do the list but it doesn’t show anything.

The other new service is the .ResourceSettings just like categoryfolder it also only has one function:

For this one I can actually show what it’s used for:

It shows the general settings for forced logoffs.

Sadly this service also doesn’t show a way to change things.

Sadly I have no found no way yet to see what queryservice entity’s have been added so hopefully we will have a new API explorer soon (maybe with release notes this time, pretty please VMware?) that shows us all the new goods.

Horizon View Api’s: back to basics part 1: Connecting

Intro

I have done a lot of deep dives but just like the VMware{Code} session I did at VMworld I think it’s time to go back to the basics on how to work with the Horizon api’s from PowerCLI. First up is connecting to a Connection server and disconnecting. I will be showing various ways to do but the new and secure one is the best for me since that’s also usable when you want to schedule scripts.

The easy way

The easiest wat to connect is by using the connect-hvserver SERVERNAME

connect-hvserver pod1cbr1

This will give you a nice credentials popup.

The Unsecure way

The previous way that I used was by using the -user, -pass and maybe the -domain parameters.

connect-hvserver pod1cbr1 -user m_wouter@magneet -pass Password

The ‘new’ and secure way

Since one of the latest updates it is also possible to use a credential object. We found this out during the Hackathon @VMworld US that it is possible. It will use the good old credentials function from Powershell like in this post from 2008. First you’ll need to make a file with the encrypted password. Big thanks to Ariel & Edgar 🙂 check this for the vDocumentation script.

 read-host -assecurestring | convertfrom-securestring | out-file password.txt

The next two lines I will combine into one, just because I can.

$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "magneet\m_wouter",(get-content .\password.txt | ConvertTo-SecureString)

Doing it in two lines is also possible and might make it a bit easier to read

$pass= get-content .\password.txt | ConvertTo-SecureString
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "magneet\m_wouter", $pass

And then it’s time to connect

connect-hvserver -server pod1cbr1 -cred $cred

That’s easy right?

Connect to the api’s

There’s a little bit more to it so you can actually use the api’s. First we need to put the session into a variable. I always use a number so it’s easy to separate my various pods.

$hvserver1=connect-hvserver -server pod1cbr1 -cred $cred

Next up is actually making the services visible. Again I added the number for when I am working with multiple pod’s.

$Services1= $hvServer1.ExtensionData

And a quick look at the available services which I will explain in a next blog post.

Disconnecting

If you are connected to a single Connection server this is easy, just a disconnect-hvserver is enough.

disconnect-hvserver

Or without confirmation, this is a standard powershell thing.

disconnect-hvserver -confirm:$false

This will not work when you are connected to multiple Pod’s so you’ll need to specify the server you are connected to.

disconnect-hvserver -server pod2cbr1 -confirm:$false

The End

Next time I will go into some of the things you can do with the services I quickly showed you.

My experience at the Nutanix NPX bootcamp

The preparation

After a Nutanix Technology Champions websession we had earlier this year I thought it was a good idea if there would be one in The Netherlands. The only requirement was to supply at least 12 people and also to leave some spots for Nutants. While I reached out to the current NTC’s Bert van der Lingen reached out to the NPP’s he trained in the Netherlands. It didn’t take long before we had enough people interested to start the process. The location was also arranged quickly at the Dutch Nutanix offices while the date was set for september 24-28th.

The coaches

Since we had 25 people signed up for the bootcamp there where three coaches assigned for this week: Tim Buckholz (NPX #12), Bruno Sousa (NPX #15) and Crescenzo Oliviero (NPX #16). Including in their coaching role they also where the Nubank customer for whom we had to create a new design. While being the customer we had to ask the right questions but if we weren’t sure about something they also showed great patience with us in explaining things.

The Bootcamp

In the time leading up to the bootcamp itself I was still apprehensive about my own (lack of) experience but lots of people told me that it shouldn’t be a problem. I went in with an open mind that it would be a great learning opportunity. Looking back at the week this was the best way to look at the process. No matter what you designed the NuBank customer always managed to find flaws and gave good feedback on what was lacking but also on what was good.

https://twitter.com/tbuckholz/status/1044243355977351168

One constant factor was change! The first day was a shock to most: Sizing can be rather difficult you know. On each day new tasks were added like networking, storage but also Business Critical apps and VDI you could expect curveballs to be thrown at any time! For this my open mind probably was a bonus because it was clear some people had issues with this. If you didn’t care about failing but still did the best you could in building the designs you would learn the most in my opinion. During the week we also learned to ask more and more questions to the customer, something we hardly did during the first day.

During the afternoon on day four it was time to build that last design so we could do a proper defence of it for the Nubank customer. For the presentation each team had 45 minutes and time management was difficult. It’s really easy to go down a rabbit hole in explaining nerd knobs while there is no time for that.

Even during the last presentation it was clear that the newly tech created during the week was needed in some cases. Our team required wireless ipmi while others had wireless load balancers, wireless 40GB lines and other wireless stuff.

My own verdict

For myself I consider this one of the best weeks of learning I have ever done. There’s hardly anywhere to work with a such a group of dedicated and motivated people. And it proved even more how good and important the vCommunity is in sharing knowledge and caring for others.

I would like to thank the three awesome coaches and also my teammates Wouter Iliohan, Nick Maeckelberghe and Arjan Hendriks for being such good sports this week.

The VMware Labs flings monthly for September 2018

September flew past for me like a whirlwind. So much new things that I learned so here’s my monthly overview of all the new and updated VMware flings. There are three new ones with the DRS Dump Insight H5 PluginWorkspace One Configuration Tool for provisioning and the Horizon Session Recording. Four have received updates: ESXi Compatibility Checker, HCIBench, vRealize Operations REST Notifications and but not least the SDDC Certificate tool. It’s also one of the few months where the HTML5 Client didn’t get an update.

New

[sta_anchor id=”horizonrecording” unsan=”HorizonRecording” /]

Horizon Session Recording

The Horizon Session Recording fling gives Horizon View administrators a way to record and save their users activity.

VMware Horizon Session Recording allows administrators of a VMware Horizon environment record their users activity in their Blast Extreme virtual desktop and application sessions.

With Session Recording, the administrator can choose to record local or remote sessions, to a central recording Server where the administrator can watch the recordings back via a HTML 5 web console integrated into the server.

The Session Recordings are stored as MP4 files for watching via the web console or downloading to play in a local player.

The VMware Horizon Session Recording Fling comprises of two components:

  • A Central Recording Repository + Web Front End
  • The Agent to be installed in the virtual desktop or RDSH host template which facilitates the recording.

Today VMware Horizon Session Recording supports Windows Server 2016 as the Central Server along with Windows 7, 10, Server 2012 and Server 2016 on the agent.

[sta_anchor id=”drsinsight” /]

DRS Dump Insight H5 Plugin

If you like the the older DRS Dump Insight fling you will like the DRS Dump Insight H5 Plugin even more. No need anymore for pulling the data yourself, with the Plugin it will be available directly.

The DRS Dump Insight H5 Plugin helps answer simple questions like

  • “Can I get all the recommendations made by DRS?”
  • “Why did DRS make a certain recommendation?”
  • “Why is DRS not making any recommendations to balance my cluster?”
  • “How is my custom affinity/anti-affinity rule affecting load balancing in my cluster?”
  • “If I have a policy defined in my cluster, how different would DRS load balancing be?”

When diagnosing Distributed Resource Scheduler (DRS) cluster issues in vSphere, we look at vCenter server logs from the support bundle, including DrmDump files to find any clues. Analyzing DrmDumps is a slow and tedious process, is usually done by VMware support or Engineering teams for advanced debugging of algorithm related issues. This is because analyzing the dumps requires building a replayer module, for which one needs access to the source code. Another challenge is that the final DrmDump data is not in plain text format; it requires someone with an understanding of the source code to be able to make good sense of it.

There is an existing DRS Dump Insight fling, which can replay DrmDumps and provide useful information for debugging. However, Dump Insight requires users to manually upload relevant DrmDump files from the time when the issue occurred. With the DRS Dump Insight H5 Plugin, customers do not need to upload any DrmDump files, and can access all the anal yzed information from their vSphere HTML5 web client itself.

  • Once a customer installs the HTML5 plugin, a new DRS Dump Insight tab will be available under the “cluster -> monitor” view.
  • All the DrmDump files that are available for the given cluster are listed in the opening screen. Customers can select the dump file of their choice for analysis.
  • They can also select multiple dump files to be analyzed together.
  • After analysis, the tool shows the analysis for each dump file in a separate tab view.

[sta_anchor id=”wsoneconfig” /]

Workspace ONE Configuration Tool for Provisioning

The Workspace ONE Configuration Tool for Provisioning fling is created for the Workspace One provisioning in the Dell factory.

The Workspace ONE Configuration Tool helps you build special-purpose unattend.xml configuration files to be applied in the Dell factory as part of Factory Provisioning. This helps to domain join (domain, workgroup, AAD, AAD Premium) and enroll devices automatically on first-boot. This simplifies the creation of the unattend.xml configuration file for Windows 10.

Features

  • It’s a stand-alone .exe app that helps IT administrators configure general and Out-of-the-Box Experience Windows setups to automatically enroll users in Workspace ONE.
  • The User Interface is made simple with explicit instructions about each field for easy and quick use by IT admins.
  • The User Interface has dynamic and efficient validations in Clarity and Angular, preventing the user from building the unattend.xml until all the validations are correctly satisfied.
  • This makes the UI fool-proof and reduces the chances of generating an invalid xml file.
  • The tool is made as a .Net Core 2.0 web app with Angular 5 and Clarity, which eases the integration of v2.0 into the AirWatch Console.

Updated

[sta_anchor id=”esxicompcheck” /]

ESXi Compatibility Checker

With the ESXi Compatibility Checker a vSphere admin can automatically check and validate a current vSphere environment against the HCL.

Changelog

Build 10066133

  • Fixed bugs

[sta_anchor id=”hcibench” /]

HCIBench

While it probably is optimized for VSAN workloads the HCIBench is a benchmark tool that can be used with any HCI solution.

Changelog

Version 1.6.7.2

  • Enhanced write/read buffer/cache methodology
  • Fixed network ip-prefix selection issue
  • Fixed 95% percentile calculation issue

[sta_anchor id=”vropsrest” /]

vRealize Operations REST Notifications Helper

With the vRealize Operations REST Notifications Helper fling it is possible it’s easier to use alerts in vRealize Operations Manager and send them to third-party tools.

Changelog

Version 1.1.2

  • Changed the line endings in text files from Win to Unix

Version 1.1

  • The new version of imset.jar
  • Updated properties file (imset.properties)
  • A new configuration file example (slack.json)
  • New version release notes (v1.1_notes.pdf)

[sta_anchor id=”sddccert” /]

SDDC Certificate Tool

The SDDC Certificate Tool is your one stop shop to replace all the certificates in a range of VMware Products: vSphere,NSX,vRLI,vROps etc.

Changelog

1.0.1 – Build 10253169

  • Spring Frameworks updated to version 4.3.19 due to security vulnerability