Last week Mark Brookfield asked the question if it is possible to configure the event database in code. My answer was that I thought it should be possible until Stephen Jesse pointed me to the the vmware.hv.helper where there is the set-hveventdatabase cmdlet for this. When looking at the code I noticed something familiar:
.NOTES Author : Wouter Kursten Author email : email@example.com Version : 1.0 ===Tested Against Environment==== Horizon View Server Version : 7.4 PowerCLI Version : PowerCLI 10 PowerShell Version : 5.0
So that’s why I knew it was possible! A good reason to create a quick blogpost though. Mark made a nice script for himself with variables and all those fancy things but I just want to quickly show how you can do it.
$hvedbpw=read-host -AsSecureString $temppw=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($hvedbpw) $PlainevdbPassword=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($temppw) $dbupassword=New-Object VMware.Hv.SecureString $enc=[system.Text.Encoding]::UTF8 $dbupassword.Utf8String=$enc.GetBytes($PlainevdbPassword) $eventservice=new-object vmware.hv.eventdatabaseservice $eventservicehelper=$eventservice.getEventDatabaseInfoHelper() $eventsettings=new-object VMware.Hv.EventDatabaseEventSettings $eventdatabase=new-object VMware.Hv.EventDatabaseSettings $eventsettings.ShowEventsForTime="TWO_WEEKS" $eventsettings.ClassifyEventsAsNewForDays=2 $eventdatabase.Server="labsql01.magneet.lab" $eventdatabase.type="SQLSERVER" $eventdatabase.port=1433 $eventdatabase.name="pod1_events" $eventdatabase.username="sa_view" $eventdatabase.password=$dbupassword $eventservicehelper.setDatabase($eventdatabase) $eventservicehelper.setsettings($eventsettings) $eventservice.update($hvservice,$eventservicehelper)
The first three line make it possible to not use a plaintext password. If you don’t care about that you can remove those and declare something for $plainevdbpassword.
For the $eventsettings.ShowEventsForTime for time there are several options (same as in the gui) these are:
To show how this works I will first clear the current database.
Yes this is one of those exceptions where a service_get doesn’t need an id.
Now I run the script with a new _get to show the results.
If you are interested in the details: