Another question Sean Massey asked me if it is possible to register an instant clone domain administrator. This is possible using the instantcloneenginedomainadministrator service with the InstantCloneEngineDomainAdministrator_create method. This needs a spec with the following content:
base (vmware.hv.InstantCloneEngineDomainAdministratorBase)
username (string)
domain (domainid)
password(vmware.hv.securestring)
The password can be created using the same scriptlet I used to register a new vCenter server. The domain ID can actually be gotten by listing all domains using
$services1.ADDomain.addomain_list()
For now I have created a scripts that requires you to give some details so it can register the instant clone domain administrator. It can also be found on Github but I will also definitively add it to the vmware.hv.helper module.
$icausername=read-host "What username to use for instantclone administrator?"
$icadomain=read-host "please give the dns name for the domain to user (i.e. domain.com)"
$icapassword=read-host "vCenter User password?" -assecurestring
$temppw = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($icaPassword)
$PlainicaPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($temppw)
$icadminPassword = New-Object VMware.Hv.SecureString
$enc = [system.Text.Encoding]::UTF8
$icadminPassword.Utf8String = $enc.GetBytes($PlainicaPassword)
$spec=new-object vmware.hv.InstantCloneEngineDomainAdministratorSpec
$spec.base=new-object vmware.hv.InstantCloneEngineDomainAdministratorBase
$spec.base.domain=(($services1.ADDomain.addomain_list() | where {$_.DnsName -eq $icadomain} | select-object -first 1).id)
$spec.base.username=$icausername
$spec.base.password=$icadminpassword
$services1.InstantCloneEngineDomainAdministrator.InstantCloneEngineDomainAdministrator_Create($spec)
You might have seen the announcement on the VMware EUC blog, Twitter or the new EUC Champions page already but I have been named one of the VMware End-User Computing (EUC) Champions for 2018. It is an honour to be awarded this status that only a select few receive each year. For me it feels like a true recognition for the work I have been doing with the Horizon API’s and my activity in the broader (EUC) vCommunity.
What is the EUC Champions Program?
EUC Champions is an experts-only program designed to provide a forum where the end-user computing community and VMware EUC product groups come together and share new product information and ideas through in-person meetings, networking events, industry conferences and webinars. This interaction helps ensure VMware EUC experts receive the most up-to-date information, and VMware product teams hear from industry veterans.
Thought leadership is easier said than done. It takes hard work and an ear to the ground to stay on top of industry trends. Many of our 2018 VMware EUC Champions have been thought leaders for decades, while others are rapidly becoming the go-to experts in their respective area. Whether new or returning, this year’s champions are among the ranks of end-user computing experts, who have done the work, made the commitment and signed up for more of the same in 2018.
What are the requirements to become an EUC Champion?
Not everyone is cut out to be an EUC Champion. It takes deep VMware EUC product expertise, an ability to write about it, a willingness to voice your opinion and the talent to clearly and concisely communicate ideas. EUC Champions are respected by their peers and, most importantly, are respectful of others.
Specifically, we look for candidates that meet the following criteria:
Member of the vExpert Program
Recognized EUC expert
Well regarded member of the greater EUC community
Recommended group member
Who are the 2018 EUC Champions?
On the new page there is a nice overview of all 34 EUC Champions
I should’ve already posted a blog about this but better late then never. At the end of february I posted about several new functions being added to the vmware.hv.helper and two out of three where about pulling session information. Recently I received some questions about using those since it’s the raw data being returned. For my Dutch vmug presentation I used several gif’s that showed what you can do with that data. I might need to update the cmdlets so all information will be shown at once but that’s for another time since it might slow down the cmdlet a lot and I don’t like that.
Usage
Since get-hvglobalsession and get-hvlocalsession show almost similar data I will only show the latter one.
get-hvglocalsession
As you see this only shows the methods contained inside the session. We can show the content by pipelining it to select-object -expandproperty but I prefer the bracket method since these might go several layers deep.
(get-hvlocalsession).namesdata
Some of the returned values are logical like the username, machineorrdsservername. The desktop name though is the actual desktop pool the user is connected to. Desktoptype can be Automated, Manual or RDS depending on the type of desktop and Desktopsource can be Virtual_Center (VM’s hosted on vCenter but not managed by Horizon or Full Clone desktops), View_Composer(when using Linked Clones), Instant_Clone_engine (when using Instant Clones), Unmanaged (physical machines, non-vCenter vm’s) or RDS (Terminal Servers). Farmname will be used when it’s an RDS session. The Securitygateway will show the Connection Server the user connected to or the UAG/Security server used.
the same can be done with referencedata and sessiondata
Not a lot of directly usefull information but a bunch of id’s that you might be able to use with the api’s if needed.
A lot of information about the session itself.
The actual code
The get-hvglobalsession actually is a query repeated for all pods. First it connects to the query service and then creates a query to run against each pod and add that to a sessionlist.
It’s been a rather quiet month on the VMware flings front. No wonder with the vSphere 6.7 and other releases this month. Did you already test them? I have to say like vSphere 6.7 but it’s consider the numbering good as well, it wouldn’t have fit to be a 7.* release. One new fling with the PowerCLI for NSX-T Preview, two updated ones with the vSphere HTML5 Web Client and Cross vCenter VM Mobility – CLI. Another fling has gone GA in vSphere 6.7: VMFork for pyVmomi.
The one thing lacking for NSX-T was PowerCLI availability, this is solved with the release of the PowerCLI Preview for NSX-T fling. Please be aware that the fling still contains bugs and might even be considered an alpha release.
[sta_anchor id=”xvcvm” /]
Cross vCenter VM Mobility – CLI
Cross vCenter VM Mobility – CLI is the go to tool when you want to move vm’s between vCenter servers and don’t want to use the GUI fling. The versioning is a bit weird since we already had 1.6 and now they released 1.6.0.
Version 1.6.0
Relocate is failing with validation error “cln is missing”.
[sta_anchor id=”html5″ /]
vSphere HTML5 Web Client
Not sure what exact version of the html5 web client went into the vSphere 6.7 release but here you can find an overview of the functionality, don’t mind the url because the text clearly states it’s for 6.7. If you want an even more updated version or want to get used to it in vSphere 6.* then use the fling.
Fling 3.37 – Build 8313530
New Features
Add VM vApp option properties read-only view
SRIOV networking in clone wizard customize HW page
Improvements
Prevent the user from creating a GOSc spec with no specified timezone
Resize the migrate wizard to use the largest possible size based on VMware Clarity design standards
Last Saturday I created a pull request to add some new functionality to the VMware.hv.helper. Together with an older PR that was still open it received an okay on Sunday. This is a list of the functionality I have added:
Get-HVHealth
Shows the health information for the following services:
ADDomain
CertificateSSOConnector
ConnectionServer,EventDatabase
SAMLAuthenticator
SecurityServer
ViewComposer
VirtualCenter
Pod
new-hvpodfederation
Initiates the Cloud Pod Architecture.
remove-hvpodfederation
Uninitiates the Cloud Pod Architecture.
get-hvpodfederation
Shows information about the Cloud Pod Architecture.
register-hvpod
Registers a new pod in the Cloud Pod Architecture.
unregister-hvpod
Removes a pod from the Cloud Pod Architecture. This can either be gracefully or forced.
set-hvpodfederation
Sets the name of the Cloud Pod Architecture.
get-hvsite
Retrieves information about all sites in the Cloud Pod Architecture.
new-hvsite
Creates a new site in the Cloud Pod Architecture.
set-hvsite
Sets site properties within the Cloud Pod Architecture.
remove-hvsite
Removes a site from the Cloud Pod Architecture.
The next functionality on my list is to put the pod service methods from this previous post into functions.
This selects the first podid listed when pulling all the pods from all sites and gets the information about that pod. We’ll see the same information when doing a list but just with all pod’s listed.
[sta_anchor id=”list” unsan=”List” /]
Pod_List
$services1.pod.pod_list()
Those endpoints are the connection servers in the pod. Let’s take a short detour and get the listing for one of those (the podendpoint service only has list and get so you will not see them separately anyway).
Under $podhelper we can already see how to set things.
$podhelper | gm
Let’s update the easy things.
$podhelper.setdescription("This is a new description")
$podhelper.setDisplayName("This is a new name")
$podservice.update($services1, $podhelper)
$services1.pod.pod_list()
As a result we have updated the name and description of the pod. The other thing we can do is assign the pod to another site. Thankfully I already have two of those created.
Like I said in my previous post about Pod Federations this is a separate post that will show how to handle Sites within a Pod Federation. There are only a couple of API calls that do not include assigning a pod to a site. This is done trough the podservice which I will post about in a next blog post.
Let’s take a look at the site service to see what it actually has in api call’s
$services1.site | gm
So we have Site_create, Site_delete, site_get, site_list and site_update. To Make it myself easy I will use the order of List, create, get, update and delete.
[sta_anchor id=”list” /]
Site_list
With site_list a list of all available site’s will be created, currently I have only one so let’s show that one.
$services1.site.site_list()
Note a lot of information is shown so let’s take a look at the contents of base and pods.
($services1.site.site_list()).base
($services1.site.site_list()).pods
so again not a lot of information since it only contains a name, description and the pod id’s of the member pods.
[sta_anchor id=”create” /]
Site_Create
Since we already saw in the methods under the siteservice that the create needs a bit more information then just a name let’s take a look again at what is required.
$services1.site.site_create
An object is needed of the type vmware.hv.sitebase, we will need to take a look in the API explorer to see what this object should contain. Under Site_create we can click on sitebase.
The sitebase object has 2 properties of which only DisplayName is required. I have tried various ways to keep the description empty but haven’t succeeded so far and with it it the create also doesn’t work so how optional is it?
Let’s create the sitebase object
$sitebase=new-object vmware.hv.sitebase
$sitebase.displayname="blogpostdemosite"
$sitebase.description="This is a blog demo site"
$sitebase
The $sitebase is not required but shows what the object contains. Now we have enough to create the new site.
$services1.site.site_create($sitebase)
[sta_anchor id=”get” /]
Site_Get
In the overview we have seen that a site_get needs a bit more information.
$services1.site.site_get
We already know how to get this site id by using site_list, normally you would only use the site_get with an id received from another service like the pod service. For the example I will use the demo site I create in the site_create part of this post.
This is again one of those wtf moments, they both do exactly the same! I will use the sitebasehelper for now will update both the Displayname and description. For this I will need to use the getbasehelper 1 step deeper
$sitebasehelper.getbasehelper() | gm
$sitebasehelper.getbasehelper().setDisplayname("thissitecanberemoved")
$sitebasehelper.getbasehelper().setDescription("yes it can really be removed")
and apply the update, since neither will generate a response I won’t put any screenshots in.
$siteservice.update($services1, $sitebasehelper)
Now let’s see the result for a site_get for this site now
[sta_anchor id=”delete” /]
Site_Delete
We can take a look at it but to delete a site we only need the siteid so let’s remove that site we gave an update.
$services1.site.Site_Delete($demosite.id)
again no visual feedback but if we do a sitelist there’s only one left.
One of the new cmdlets for the vmware.hv.helper that I am currently working on is initiating the Cloud Pod Architecture (CPA) and more actions related to this. This blog post will show the basics about initiating, and joining a CPA using the API’s. Doing things with site’s within the CPA will be covered in a later blogpost.
If we look at the services available in the Horizon API’s you’ll see that podfederation is one of them, let’s take a look at that and what method’s are available.
$services1.PodFederation | gm
So we can Eject, Get, Initialize, Join, Unintialize, Unjoin and update a podfederation. If we look at the brackets behind the methods than (un)initializing and unjoin don’t need any extra info so let’s get ahead and initialize the podfederation. To show you there’s nothing there yet I made a screenshot of the admin interface.
Not a lot of information but there isn’t a lot more anyway in the podfederation itself.
[sta_anchor id=”join” /]
Join a federation
I have another pod that I want to join to this federation since we’ve already seen that this needs some more input let’s check what it exactly needs.
$Services1.PodFederation.PodFederation_join
So we need a remotepod address, presumable one of the connection servers in that pod will be enough, a username where domain\username will do just like in the admin console and a password of the type vmware.hv.securestring. The last one was new for me but thankfully it was described in one of the examples in the api explorer (https://code.vmware.com/apis/75/view and click on Data Object Types).
And again if you are fast enough this is also visible in the admin console
And now a get will also show that it has been enabled
[sta_anchor id=”unjoin” /]
Unjoining a Podfederation
If you are braking down a pod because of whatever reason the best way to do this is to unjoin the pod from the federation. As we saw before there’s no extra information need so you just need to connect to a connection server in that pod and do an unjoin.
$services1.PodFederation.PodFederation_Unjoin()
this is really fast so over several tries I did not succeed in making a screenshot of the admin console.
[sta_anchor id=”eject” unsan=”Eject” /]
Ejecting a pod
This is the only podfederation function not available through the admin console as far as I could see. Ejecting a pod for is for me a last option if a datacenter burned down, everything is gone and you want to get rid of the pod. I did it in my lab against an alive pod and had to uninitialize the (now unlinked) podfederation from that pod to be able to rejoin it to the correct pod. This method also requires some input so let’s see what that is.
$services1.PodFederation.PodFederation_Eject
So we need the podid of the pod to eject, this information can be get trough the pod service
$services1.pod.Pod_List()
I want to eject the pod from pod2cbr1
$pod=$services1.pod.Pod_List() | where {$_.displayname -like "*pod2cbr1*"}
and with $pod I can check if I have the correct one
No feedback, nothing but if we check the pod list it’s gone.
I will show how to remove the remnants in the uninitialize chapter.
[sta_anchor id=”update” /]
Updating a Pod Federation
This one sounds bigger then it is since there’s only one thing that we can update in a federation. To do this it is better to use the helper service then to use the podfederation_update method since that can get complicated very fast sometimes. To use the helper service we will need to create some variables first
After some trial and error I know we need to getdatahelper method to continue
This only show the updates that are currently in the queue to be applied with a get method it’s possible to see what can be set.
$podservicehelper.getDatahelper() | gm
What we need to look for is a set so the only options here are setdisplayname that needs a string value and setupdates that needs a load of information and that probably might also be a way to do it but I will use the setdisplayname.
$podservicehelper.getDatahelper().setdisplayname("Whatever name you like")
This will give no feedback and nothing will be changed yet, what needs to be done is to apply this update in the helper service to the service.
$podservice.update($services1, $podservicehelper)
and if you now do a get on the podfederation it will show the changed name.
[sta_anchor id=”Unintialize” /]
Uninitializing a Podfederation
To show the pod uninitialization step I will use the pod that I have ejected from the podfederation pod2cbr1. It is clear that it is a bit wonky if we look at the pod list from that connection server.
So it knows about the pod federation but doesn’t see itself in it anymore.
In this blogpost I showed how to assign a certain vdi machine to a user. This has been made easier since in the vmware.hv.helper module. These days we can use this:
This week I got the logical question from Brandon Smith in the comments about removing the assignment. First I need to re-assign the desktop (I have been building a VMUG presentation about PowerCLI & Horizon view so things got messed up)
the result:
Now what need to be done is setting the base.user to $null. I am going to do this by connecting to the machine service and utilize the machinehelper to update the userdata.
We now need to connect to the machinehelper by doing a read on the machineservice. $machineservice.read will give us the info we need to be able to do this.
From this it becomes clear that we will need the services service and the machineid we want to edit. First let’s put the machine id into a variable.
Since I know the user property is under the base we will need to get the base first and then set the user. This done by doing getbasehelper() on the machineinfohelper and then do .setuser(user) on that but let’s see what’s under the getbasehelper first.
$machineinfohelper.getbasehelper() | gm
A lot of information but as said the one we need is setuser. To assign a desktop we will need to set this to a userorgroupid value (and that is what the vmware.hv.helper cmdlet does). To clear it we will need to set it to $null.
$machineinfohelper.getbasehelper().setuser($null)
At this point no changes have been made yet! We will need to apply this update first.
The App Volumes Backup Utility is one of the few ways to backup those writable volumes. Friends don’t let friends use them but if you do please make sure you have backups.
Version 2.1
Added missing pre and post backup prep files
[sta_anchor id=”xvcmu” /]
Cross vCenter Workload Migration Utility
This is the graphical tool to move vm’s between vCenter servers. If you prefer a command line way please use the tool below.
Version 1.1.0, March 30, 2018
Added a detailed task info view for migration tasks
Fixed an issue with site name containing “DOT” characters
Display VM resource (CPU, Mem, Disk) info
Add a button to clear selected inventory data
[sta_anchor id=”xvccli” /]
Cross vCenter VM Mobility – CLI
This is the CLI way to move those vm’s between linked or not linked vCenter servers. If you prefer something visual then please use the tool above.
Version 1.6
Added support for bulk-relocate / bulk-clone which helps the user to migrate / clone multiple VMs specifying various destination locations in a single command.
Added support to choose destination resource pool
[sta_anchor id=”osot” /]
VMware OS Optimization Tool
Some use scripts, some use other tools but for me the OSOT is the preferred method to optimize my golden images.
March 30, 2018
[Template] Issue fix – DELETEVALUE actions do not do anything
[Tool] Issue fix – Switching to another tab loses all unsaved changes
[Tool] Enhancement – Simplify user interaction in Template Editor. Now editing template no longer requires repeated Update button click. Mac style editing is applied (Automatically save changes along with edit)
[sta_anchor id=”hcibench” /]
HCIBench
What is there to say about the HCIBench benchmarking tool for Hyperconverged Infrasturctures
Version 1.6.6.
Spectre & Meldown patch on both HCIBench VM and Client VM
Added client VM prefix field, allow running multiple HCIBench instances against single cluster
Attach testing log along with testing results
Enabled live vSAN Observer when running testing, using https://HCIBench_IP:8010
Updated the drop read/write cache script
Added more message info during the testing
Bug fixes
[sta_anchor id=”vchtml5″ /]
vSphere HTML5 Web Client
A couple of updates for the vSphere html5 client, more and more features are being added so it will end on par with the flash client.
Fling 3.36 – Build 8111348
New Features
Customize additional hardware devices/options during VM creation or cloning:
Host USB device
SCSI controller
USB controller
SATA controller
CPU > CPUID Mask > Advanced
VM Options > VMRC options
VM Options > VMware Tools > Power Operations
VM Options > Power Management > Wake up on LAN
VM Options > Advanced Configuration Parameters
VM Options > Fibre Channel NPIV
Warn when about to perform an operation on VM template(s) managed by a solution
Bug Fixes
SSO authentication error during accessing the vSphere Client from the fling appliance is resolved
Fling 3.35 – Build 7914771
Improvements
UI improvements on Quick search including
Search dropdown design is changed to show the top 10 results
View all results page design is modified to show grouping in the object navigator and the results in the right pane
UI improvements in grouping of hard disks in Edit Settings and VM Summary. If there are more than 4 harddisks for a VM, you will see them grouped in Edit settings. This enhancements will improve the performance of the VM Edit Settings.
[sta_anchor id=”#esxiclnt” /]
ESXi Embedded Host Client
This should eb installed on your ESXi hosts by default by now but ESXi embedded host client is getting updates trough this channel.
Version 1.29.0 build 8122819 (Fling 20) – March 28, 2018
General
Reset selection on vm deletion
Fix issue with datastore wizard on very large datastores
Update available rdm disk list in vm wizard
Correct miscalculation of datastore total in wizard
Better support for NSX networks
Fix clicking issues on full-screen and new tab console screen
Prevent password maangers from autofilling optional field on login page.
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here:
Cookie Policy