VMworld EU Hackaton join me to have some View vCheck fun!

So for a long time I have been looking forward to the VMworld EU Hackaton. The announcement has now been made and it will take place on Monday evening the 11th from 6pm to officially 10pm but my guess is that it might run a little longer 😉 It will be held at the Valkiria Hub Space and you can join as a member of mine or another team or as spectator, just schedule the right session in the schedule builder.

My Team

So I have signed up to lead a team to improve and expand the Horizon View vCheck I have been building. Since this probably also wil involve the Horizon View Community module I wouldn’t be too surprised if improvements will be made to that as well.

Who am I looking for?

For my team i don’t care how much experience you have with PowerCLI or Horizon view but it might be handy if you at least have some idea when we talk about it. Just bring your laptop and if we end up having learned something by the end of the night it has been a success for me!

Do I need something installed on my laptop?

Yes, make sure PowerCLI (at least 6.5) has been installed and your favorite script editor. I will prepare the connection brokers, composers and other vm’s on my laptop.

Anything else?

Just have fun!

Vembu part 2: Update to 3.8 and actually making backups

Intro

So last time I gave an introduction to Vembu version 3.7. Last week 3.8 was released so I will talk about the upgrade and actually running some backups in this post. My backups have been running for some weeks already (when the lab is powered on that is) so I’ll also try to recover some data from before the upgrade. The release notes for the 3.8 release are at the bottom of this post.

Upgrading

First download the update from Vembu and then install the update. Except for an uninstall or update option and maybe one or two uac questions it’s a matter of next next finish. After logging back on to the web console the first thing I noticed is a bit of a different color scheme that I like better then the old one. Is this something I care about in a backup product? No but I like it anyway.

Setting up backups

So after we enter the console it’s time to go to the backup menu > VMware vSphere (isn’t the new Vembu logo lovely?)

Click on add VMware vSphere Server, enter all required data and hit save

Vembu will add the vCenter server or ESXi host and bring you back to the list of servers. Now hit the backup button on the right of the server you want to create a schedule for.

Select the servers you want to backup and if needed exclude disks

The next page gives to option to use Application aware Settings. These are expensive words for VSS so if you have included Linux vm’s you might want to ignore failures for this or create a different backup job for them. If you want to truncate logs from this job that can also be doen from here. The VMware Guest Credentials are required for this to work.

The next page gives the option to create the actual schedule. What I like most is the ease of setting up an extra  regular Full backup schedule with it’s own retention rule.

The last page gives the option to set the retention policy. Basic counts in daily incrementals while under advanced a combination of weekly and monthly can be made.

.

The last tab let’s you review the settings before committing them.

Restoring

For restoring there’s a boatload of options available. It would be stupid and really boring to explain them all in here but if you have done some restores in the past their name will be self explanatory.

First you pick from what backup job to recover the data. Note that you also see the sql backups even though they are managed from the sql box itself.

One thing that shows Vembu is more SMB is the fact that no restores are possible if a backup is running.

So if there are no active jobs you can pick whatever recover poison you like. There’s a lot of options to use from here.

For this walktrough I will pick the File Level recovery since that probably will be the most used one. Now select the required point in time , virtual machine,vmdk and the file or folder to recover.

I was only able to select the local disks from the backup server to restore to.

The last page again lets you review what to restore and hit restore now for the obvious reason.

I also tried the Disk Image Mount and this mounted the disk from my file server in seconds to my backup server.

Reporting

This belongs under the improvements of v3.8 but reporting has improved quite a lot. Under Reports > Backup Status Report there is still the default view that only shows the status of the different jobs.

Onder VM Status Report though there is now a good usable list of all the vm’s and their own backup status, schedule and size.

And clicking the more button gives you an even better view of that vm with it’s history.

Conclusion

For me Vembu is a very useful backup product that just does what it has to do without any hassle. It backups my data and if I want to get anything back that also works without any problems. While it might not be an Enterprise product for SMB it does the trick and then some more with the plugins they have.

Version 3.8 changelog

New features
Disk Image Backup from BDR Server

Disk Image Backups can now be configured and managed via Vembu BDR Server. Relying on
proxy agents is no longer required, unless it’s a distributed deployment which require individual
proxy agent installation.

FLR from GUI (Backup & Replication)

File Level Recovery(FLR) is now available for both backup and replication jobs where user can
choose specific files and folders from VMware/Hyper-V/Disk Image backups and VMware
replication, to be restored in a quick fashion.

Seed load backup data to OffsiteDR

Storing copy of backup data for DR requirements is now an easy task to be accomplished by
seed loading backup server data to desired offsite data center. This save loads of time and
bandwidth from being consumed.

Auto Authorization

Enabling Auto authorization in Vembu BDR allows proxy agents to get registered to backup
server using unique registration key generated by respective BDR server.

Encryption Settings

Users can now provide additional security to their disk based backup jobs by assigning custom-
password to backup server, such that all their backup data will be encrypted and can be
restored/accessed only by providing the custom-password.

Storage Pooling

Storage Pools are used to aggregate the space available from different volumes and utilise
them as a storage for specific backups. The hybrid volume manager of Vembu BDR Server
supports scalable and extendable backup storage for different storage media such as Local
drives, NAS(NFS and CIFS) and SAN(iSCSI and FC). Vembu BDR provides storage pooling
option for both backup level and group level.

MSI Installer : For all Clients

Users will now get the client agents installer as .msi format also.The installer will check for the
following packages based on the OS types (32 bit or 64 bit) and it will install the following (if not
installed previously),

  • Visual C++ 2008 redistributable packages x86
  • Visual C++ 2008 redistributable packages x64
  • Visual C++ 2013 redistributable packages x64
  • Visual C++ 2015 redistributable packages x86
Enhancements in v3.8
Enable or Disable retention for VMBackup / ImageBackup

User can enable or disable retention policy for the backups based on their requirements.
Disabling retention allows user to maintain all the backups without any merging of the
incremental timestamps. This option is used when the backup size is low.

Disk level download option for VMware & Hyper-V plugins

Users can download backup data in multiple disk file formats such as: VHD, VMDK, VHDX,
VMDK-Flat and RAW.

Similarly, if user need to download individual disks in a virtual machine, he can perform disk
level download by selecting the disks.

From a group of virtual machines in a host backup, multiple disks can be downloaded with same
disk file format.

Disk Management Mount(Hyper-V)

This option lets you instantly attach backup data to disk management as a VHD/VHDX file and
proceed with the restore process. The VHD/VHDX file is created by virtually mounting the
backup data on the vembu virtual drive. Users can access backup data via disks attached on disk
management.

Once done with requirement, unmount backup data. This will resume backup job, so that
incrementals will run as scheduled.

List VMs in an alphabetical order

Virtual Machines that are present in the host will be listed in an alphabetical order based on the
ASCII table values, thereby making it simpler for the user to search and configure the backup. In
the Review Configuration page, the Virtual machines that are chosen for backup is listed in the
selected order.

Note: Virtual Machines will be listed in the following hierarchical order <special characters>,
<numeric characters>, <Uppercase letters>, <lowercase letters>.

Search option for VMs in backup config page & restore list page

This option allows user to search the Virtual machines that are available in the ESXi host. Also,
the user can search VMs/ host/cluster from a vCenter server. By specifying the required VM
name in the search option you can select the VMs that are to be backed up from a ESXi
host/vCenter Server.

VM level reports in OffsiteDR Server

This page lists all replicated jobs configured from backup server to the offsite server where you
can see a report option alongside every replicated job

New menu for consolidated VM level report in BackupServer & OffsiteDR
VM level report gives the user the centralized report page of all VMs that are configured for
backup. It allows user to view the detailed backup reports of virtual machines configured from
both ESXi or Hyper-V Host.

Full featured free edition

Post 30 days trial version, user can either opt to purchase the product or continue using the free
edition.
In Free edition user has two options to proceed with backup configurations : Full featured free
edition or Limited Edition.

Admin\Read Only Access privileges at both Backup Server and Group Level

 

Email Settings in Backup Agents
Email Report for OffsiteDR
Backup Verification Email Report (Backup Server &amp; OffsiteDR)
Backup Level Report in Backup Status Report (Backup Server)

New and updated VMware flings for july 2017

Intro

I decided to make this almost monthly post a bit wider and just post updates and new releases of all flings in that month. There are four flings that have been updated at least once this month.

New Flings

There has been one new release this month:

DRS Lens

During the development fase at some point DRS Lens was named DRS Goggle so if you talk to me irl it might be possible that I call it that way. What this Flings does is give you insight in DRS activity. In several dashboards it will help the user visualize why DRS did or maybe didn’t move those vm’s you are so attached to.

As VMware vSphere DRS has become more widely adopted now, more and more users are interested in knowing how it works. They need more insights into DRS activity and actions. They want to know the value that DRS provides to their clusters. DRS Lens is an attempt to provide a UI-based solution to help understand DRS better.

DRS Lens provides a simple, yet powerful interface to highlight the value proposition of vSphere DRS. Providing answers to simple questions about DRS will help quell many of the common concerns that users may have. DRS Lens provides different dashboards in the form of tabs for each cluster being monitored.

Changelog

Version 1.1

  • Added login compatibility to 5.5 vCenter
  • Fixed VC certificate parsing bug found with some 5.5 vCenters

Updated flings

These Flings have received one or more updates during this month.

Horizon Toolbox 2

The Horizon toolbox 2 has been updated to version 7.2 and since Horizon 7.2 itself now contains a Remote Assistance feature in the helpdesk part this has been removed from the fling. This is stil one of my favorite flings that has functionality that should be in Horizon itself!

Changelog

2017 Jul 17

New Features

  • Support Horizon 7.2. Horizon Toolbox uses the same version as the latest supported Horizon.
  • Support end users’ actions auditing (agent side), including USB storage, Client Drive Redirection and Clipboard.
  • Support vSphere Console Access to all Parent Images.

Bug Fixes

  • Fix one bug which caused the number of concurrent sessions not accurate.
  • Fix one bug which caused missed domains in login page.

Removed Features

  • Remote Assistance is part of Horizon 7.2 production (in Help Desk). So we have removed this feature from Horizon Toolbox.

vSphere html5 web client

The updates for this really great fling don’t get a date but a build number. I could find that 3.16 was released early July so I decided to take that one as the oldest for the changelog of the vSphere html5 web client.

Changelog

Fling 3.18 – Build 6163115

Improvements

  • Upgrade distributed switch wizard now supports the upgrade of LACP to Enhanced mode and the upgrade of Network I/O Control to version 3.
  • View settings of link aggregation groups on a distributed switch

Fling 3.17 – Build 6088028

New Features

  • Create VM Storage Policy (limited)
    • Migrate Host Networking to a Distributed Switch
    • Configure default gateway address on VMkernel adapters (ESX 6.5 only)
    • Network I/O Control v3 – configure shares, reservation and limit for the different types of system traffic
    • Customize hardware options when cloning VM or deploying VM from template
    • Create VVol Storage Policies

Improvements

  • Warn when about to edit the settings or perform snapshot operations on VM managed by a solution
  • Warning message when uploading files bigger than the datastore free space

Known Issues

  • Import Item into Content Library is not working.

Bug Fixes

  • Fixed the bug on import workflow in content library

Fling 3.16 – Build 5956761

New Features

  • Create VM Storage Policy (limited)
    • Create vSAN Policy (without Tags)
    • Create Policy with Tags and Common rules
  • Distributed Switch
    • Manage physical network adapters at the host level
    • LACP support – view the link aggregation groups created on a distributed switch
    • Upgrade distributed switch wizard
  • SR-IOV support – enable/disable SR-IOV on physical network adapters that support it
  • Content Library
    • Tags, notes, subscription/Publication portlet
    • Edit settings on the content library
    • Delete Content Library
    • Synchronize Library

Improvements

  • Select TCP/IP stack while creating new VMkernel network adapter

Known Issues

  • Import Item into Content Library is not working.

HCIBench

HCIBench is a tool developed for benchmarking the hyper-converged infrastructure. It not only works for VSAN but for all kinds of hyper-converged solutions. Again this tool has no build date but version but the Internet Waybackmachine found for me that 1.6.1 was released back in february.

Changelog

Version 1.6.2

  • Integrated with vSAN Performance Diagnostic of vSphere_6.5U1/vSAN_6.6.1.
  • Added DHCP Service validation.
  • Added Vdbench workload profile validation.
  • Removed the root password expiration policy.
  • Changed results display to show full file names.
  • Changed easy-run calculation from host basis to disk-group basis.

Vembu Backup & Disaster Recovery – Introduction

Introduction

So a while back Vembu asked me if I would like them to sponsor this blog. After some thought I decided to do so but for me that also meant I wanted to test their product. It implemented their product but was really busy with other project so I wasn’t able to write something about it until now.

Please remind me what is Vembu?

Vembu BDR is a suite of products aimed at the medium Enterprise and SMB markets. It offers on and off-premises backups, replication but for example also backups of your saas applications like Office 365 and Google G-suite (former Google apps).

Installation

The primary way of installing Vembu is by deploying a Windows server where you install the software. It is also possible to install it on a Linux host but that might require some more work. For me the most promising way to start was using the Linux appliance they offer when you ask for it. This basically is a Ubuntu LTS installation that comes with the software preinstalled. It has 8 vcpu’s configured and 16GB of ram which was a bit rich for me plus I ran into some problems with it later on (It couldn’t quiesce my backup snapshots because I couldn’t add AD credentials, this works perfectly with the windows installation). While you might spare a Windows license when using the Linux installation it seems like Vembu prefer the Windows installation themselves. The installation on Windows actually is really a straight forward next next finish installation, nothing fancy about it.

The Interface

The backup server offers a shortcut to the software on the desktop but assuming that firewalls are no issue you can connect to the server on port 6061 from any other system. This has to be doen using https though because using http will result in a 400 bad request error. The used certificate is of the self signed variety but on their knowledge base Vembu offers a simple guide to use a proper certificate.

Once you login with your credentials this is the dashboard that is shown, clean and simple.

Backup & replication

The menus under backup and replication might be a bit confusing, The vSphere or Hyper-V at top aren’t to see all jobs related to that but are to setup new backup or replication jobs. The List all jobs or List jobs buttons will show all configured jobs.

Actually it doesn’t show all configured backup jobs, it actually shows all backup jobs that run on this system. If you have physical or virtual machines using the agent then those jobs are only visible on the machine it runs on. For me this is proof that Vembu might not be a an enterprise product because for one or two it might be doable to manage them this way but for more I would prefer to have one GUI handling them all.

This shows the list of jobs while the one job I have us running

Clicking the green triangle shows the status for the running job

Recovery

What ? You expected anything else for this menu item then to do recover files and things?

Reports

Under reports you can find some very basic reports about jobs. Don’t expect to find any information on what failed exactly or anything

 

It is also possible to schedule email status reports besides the mail send when a job is finished.

It might also be wise to create a filter for information you actually would like to receive.

Management

Under management several settings and other things can be found. Like what storage to use for backups (NFS/CIFS/SMB), email server and cloud targets.

 

Pulling Horizon View events with PowerCLI in a nicer way

Update: There is a new way to pull the event information without having to enter the sql password please see this post about it.

 

So in one of the first posts I did about Powercli 6.5 was a bit about pulling events from the Horizon View events database. This off course was not the crude way to pull the events. Another was was using the event dumper fling but that one is a bit to slow for my taste. I decided to create a script that leveraged and had the speed of PowerCli but actually gave some options and that dumped the results in a .csv file since reading them from the command line will be too much at some point.

What I ended up with is a 71 line script where 18 are informational, 8 blanks, 1 that pulls the information and the rest for the menus and error handling. I decided on not giving any real errors when things don’t work but just red text. A lot is done with try <> catch and a if elseif else.

There is no need to load any modules but the scripts assumes at least PowerCLI 6.5 with the vmware.hv.helper module loaded.

I have created a github repo for these smaller scripts over here.

#-------------------------------------------------
# Get the Horizon view event for the last x time and export to a csv
#
# Requires PowerCLI 6.5 or higher
# Requires vmware.hv.helper module
# Module can be found at https://github.com/vmware/PowerCLI-Example-Scripts
#
# Version 1.0
# 16-06-2017
# Created by: Wouter Kursten
#
#-------------------------------------------------

# Load the required VMware modules (for PowerShell only)

Write-Host "Loading VMware PowerCLI Modules" -ForegroundColor Green
try	{
	get-module -listavailable vm* | import-module -erroraction stop
	}
catch	{
	write-host "No Powercli 6.5 or higher found" -ForegroundColor Red
		}
$version=get-powercliversion -WarningAction silentlyContinue
if ($version.build -lt 4624819)	{
	write-host "Horizon View api's require Powercli 6.5 or higher to function, please upgrade PowerCLI" -ForegroundColor Red
	exit
	}
elseif (get-module vmware.hv.helper  ) {
	write-host "VMware.hv.helper found"
	}
else {
	write-host "Please download and install the VMware.hv.helper module from https://github.com/vmware/PowerCLI-Example-Scripts" -ForegroundColor Red
	exit
	}

#Ask for connection information

$hvservername=Read-host "Welke Connection broker?"
$domain=read-host "Please enter your active directory domain?"
$username=Read-host "Please enter your useraccount"
$password=Read-host -assecurestring "Please enter your password"

#Connect to View Connection broker
write-host "Connecting to the connection broker" -ForegroundColor Green
try {
$hvserver=connect-hvserver $hvservername -domain $domain -username $username -password $password -WarningAction silentlyContinue -erroraction stop
}
catch {
	Write-host "Can't connect to the Connection server please check the credentials." -ForegroundColor Red
	exit
	}

#connect to the Event Database

$dbpassword=Read-host -assecurestring "Please enter the password of the account configured in Horizon View to access the event database."
write-host "Connecting to the database" -ForegroundColor Green
try {
	$eventdb=connect-hvevent -dbpassword $dbpassword -erroraction stop
	}
catch {
	Write-host "Can't connect to the Database server please check the password." -ForegroundColor Red
	exit
	}

#Retreive information

write-host "Please provide the following information use % as wildcard." -ForegroundColor Green
$searchuser=Read-Host "Please enter the accountname you need information on?"
$module=Read-Host "What module do you want the logs for? (Agent,Broker,Client,Tunnel,Framework,Client)"
$sevfilter=Read-Host "What is the severity level you need information on?(Audit_fail, Audit_Success,Info,Warning,Error)"
$message=Read-host "Looking for any specific text in the message?"
$maxage=Read-Host "How far do you want to look back in event history? (Day,week,month,all)"
$filelocation=Read-host "Please provide filename and location for the exported csv file"

#Export to file

$lastevent=get-hvevent -hvdbserver $eventdb -timeperiod $maxage -SeverityFilter $sevfilter -userfilter $searchuser -modulefilter $module -messagefilter $message

try {
	$lastevent.events  | export-csv $filelocation -erroraction stop
	}
catch{
	write-host "Unable to create the file, please check name and location" -ForegroundColor Red
	exit
	}
Write-host "Events have been successfully exported." -ForegroundColor Green

And how does this look in the end??

Updated flings for Horizon View in May

Yes I am a bit late but there are only two Horizon View related flings that received an update last month. First is the OS Optimization tool and second is the Ubuntu OVA for Horizon. The OSOT even already received an update in June but that’s for next month.

Ubuntu OVA for Horizon

Changelog:

v1.1.0

  • MATE Only Release
  • Increased vRAM to 128 MB instead of Automatic
  • Removed Audio Device
  • Updated default network device to VMXNET3
  • Updated repository for open-vm-tools to Ubuntu repo
  • Added Horizon 7.1 Agent Dependencies
  • Updated Dependency packages for Ubuntu 16.04 on Horizon 7.1
  • Agent installer script updated with Horizon 7.1 links
  • Updated Media Codec packages for Ubuntu 16.04
  • Updated MATE packages to Xenial
  • More reliable domain join
  • Password update optional
  • Timezone update optional
  • Option to change hostname
  • Desktop addons optional
  • Added retry attempts for failed wgets of smb and krb5 configuration files
  • Renamed ‘horizon-linux-installer.sh’ to ‘linux-agent-installer.sh

VMware OS Optimization Tool

Changelog

May 16, 2017

  • OSOT binary is now digital-signed, to make sure the integrity of distribution
  • Template update: Windows 10 – Item “Use small icons on taskbar” is unselected by default.

Building a Horizon View vCheck (part 3)

So it’s time for part 3 already of building checks for Horizon View. I got some remarks after last post and thus I need to say that the checks have been created for View 7 because some commands might not work against a 6.* installation. three new plugins this time or actually two since one was already in the original uploads on github but I didn’t mention it on here yet.

11 Linked Clone Desktop Pool Information.ps166

Just like the full clone pool information but tailored for linked pools.

# Start of Settings
# End of Settings

[email protected]()
foreach ($pool in $pools){
$poolname=$pool.base.name
if ($pool.type -like "*automated*" -AND $pool.source -like "*VIEW_COMPOSER*"){
$desktops=get-hvmachinesummary -pool $poolname
$automatedpoolstatus+=New-Object PSObject -Property @{"Name" = $Poolname;
								"Pool_Image" = $pool.automateddesktopdata.VirtualCenternamesdata.parentvmpath;
								"Pool_Snapshot" = $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath;
								"Desktop_Count" = ($desktops).count;
								"Available" = ($desktops | where {$_.base.basicstate -eq "AVAILABLE"}).count;
								"Connected" = ($desktops | where {$_.base.basicstate -eq "CONNECTED"}).count;
								"Disconnected" = ($desktops | where {$_.base.basicstate -eq "DISCONNECTED"}).count;
								"Maintenance" = ($desktops | where {$_.base.basicstate -eq "MAINTENANCE"}).count;
								"Provisioning" = ($desktops | where {$_.base.basicstate -eq "PROVISIONING"}).count;
								"Customizing" = ($desktops | where {$_.base.basicstate -eq "CUSTOMIZING"}).count;
								"Already_Used" = ($desktops | where {$_.base.basicstate -eq "ALREADY_USED"}).count;
								"Agent_Unreachable" = ($desktops | where {$_.base.basicstate -eq "AGENT_UNREACHABLE"}).count;
								"Error" = ($desktops | where {$_.base.basicstate -eq "ERROR"}).count;
								"Deleting" = ($desktops | where {$_.base.basicstate -eq "DELETING"}).count;
								"Provisioning_Error" = ($desktops | where {$_.base.basicstate -eq "PROVISIONING_ERROR"}).count;
}
}
}
$automatedpoolstatus | select Name,Pool_Image,Pool_Snapshot,Desktop_Count,Available,Connected,Disconnected,Maintenance,Provisioning,Customizing,Already_Used,Agent_Unreachable,Error,Deleting,Provisioning_Error
$Title = "Linked Clone Desktop Pool Status"
$Header = "Linked Clone Desktop Pool Status"
$Comments = "These are the pools that have floating linked clones. Not all but the most common status's are counted."
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

13 Dedicated Full Clones Assignment.ps1

This plugin is targeted at the dedicated full clones (and I just realize that one can also have dedicated linked clones so will need to build one for that as well). It gives information about which desktop is assigned to which account but also with information about the host it is running on if this information is available (not in my case).

# Start of Settings
# End of Settings

[email protected]()
foreach ($pool in $pools){
$poolname=$pool.base.name
if ($pool.type -like "*automated*" -AND $pool.source -like "*VIRTUAL_CENTER*"){
	$desktops=get-hvmachinesummary -pool $poolname
	foreach ($desktop in $desktops){
	if ($desktop.namesdata.username){
		$username=$desktop.namesdata.username
		}
	else{
		$username="Unassigned"
		}
$fulldesktopassignment+=New-Object PSObject -Property @{"Pool_Name" = $Poolname;
								"Desktop_Name" = $desktop.base.name;
								"Desktop_State" = $desktop.base.basicstate;
								"Desktop_Assigned_to" = $username;
								"Desktop_OperatingSystem" = $desktop.base.Operatingsystem;
								"Agent_version" = $desktop.base.agentversion;
								"Host" = $desktop.managedmachinesdata.hostname;
								"Datastore" = $desktop.ManagedMachineNamesData.datastorepaths | out-string;
}
}
}
}
$fulldesktopassignment | select Pool_Name,Desktop_Name,Desktop_State,Desktop_Assigned_to,Desktop_OperatingSystem,Agent_version,Host,Datastore
$Title = "Dedicated Desktop Pool Assignment"
$Header = "Dedicated Desktop Pool Assignment"
$Comments = "These are the dedicated desktops with their current user assignment"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

04 License Status.ps1

This plugin gives licensing information including expiration date and what techniques are allowed under this license.

# Start of Settings
# End of Settings

[email protected]()

$license=($services1).license.license_get()
$licensestatus+=New-Object PSObject -Property @{"Licensed" = $license.Licensed;
								"LicenseKey" = $license.LicenseKey;
								"ExpirationTime" = $license.ExpirationTime;
								"ViewComposerEnabled" = $license.ViewComposerEnabled;
								"DesktopLaunchingEnabled" = $license.DesktopLaunchingEnabled;
								"ApplicationLaunchingEnabled" = $license.ApplicationLaunchingEnabled;
								"InstantCloneEnabled" = $license.InstantCloneEnabled;
								"UsageModel" = $license.UsageModel;
}								

$licensestatus | select Licensed,LicenseKey,ExpirationTime,ViewComposerEnabled,DesktopLaunchingEnabled,ApplicationLaunchingEnabled,InstantCloneEnabled,UsageModel

$Title = "License Status"
$Header = "License Status"
$Comments = "This is the license status information"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

Welcome to my first sponsor: Vembu

I am proud to announce the first sponsor of Retouw.nl: Vembu. Vembu is the creator of the Backup & DR suite with the same name. Besides that they also have a CRM suite in their portfolio. I have created a new partner page for them.

About Vembu

Vembu is a leading provider of a portfolio of software products and cloud services to small and medium businesses for more than a decade. Vembu’s vision is to make software and cloud services very affordable for the hundreds of thousands of small and medium businesses worldwide.

Vembu’s flagship offering is the BDR Suite of products meant for on-premise, offsite, cloud backup and disaster recovery across diverse IT environments including physical, virtual, applications and endpoints. Vembu CRM Suite consists of products that addresses the needs of all customer facing teams including support, sales, marketing & social media engagement.

Since 2002, Vembu’s industry-recognized data protection solutions have delivered tangible value to more than 60,000 businesses worldwide through a network of 4000+ partners (MSPs/VARs & Resellers).

The different products under Vembu BDR Suite are categorized on the basis of environments:

For Virtualized environments like VMware vSphere and Microsoft Hyper-V:

Vembu VMBackup, part of Vembu BDR Suite provides reliable, efficient, agentless VMware vSphere and Microsoft Hyper-V backups for small and medium businesses with enterprise level features at affordable pricing. With Round-the- clock Business Availability as its sole aim, Vembu VMBackup provides faster recovery options which ensures that the business continuity is not disrupted. With VM Replication for High Availability, Vembu CBT Driver for high performance incremental backups, VSS aware technology for application consistency, Automated Backup Verification, VembuHIVE File System, a File System of File Systems for efficient backup storage, Multiple migration options, Flexible & Configurable Retention Policies, Vembu VMBackup is tailor made for all Backup & DR requirements of a complete virtual Datacenter. Also, to empower small businesses to have business continuity, Vembu provides 50% discount on Vembu VMBackup for small businesses having up to 6 CPU-Sockets

For Windows IT environments:

Vembu ImageBackup, part of Vembu BDR Suite is a complete backup and disaster recovery solution for Windows IT environments. It provides an option to do entire system level backup or specific file level backup in Windows Servers and workstations. It also ensures RTO less than 15 minutes by delivering reliable recovery options like Bare Metal Recovery, Quick VM Recovery, Instant File Recovery, Partition level Recovery etc. Furthermore, Desktops/Laptops Backup is completely free.

For Applications, File Servers, Endpoints:

Vembu NetworkBackup, part of Vembu BDR Suite is designed for small medium businesses to protect business data across file servers, application servers, workstations and other endpoints. With NetworkBackup businesses can backup all their systems to a central location which is easier to manage.

Vembu OnlineBackup, part of Vembu BDR Suite provides File Server, MS Exchange, MS SQL, MS SharePoint & MS Outlook Backups directly to Vembu’s secure cloud using enterprise-grade AES 256-bit encryption with granular restores.

For SaaS applications like Microsoft Office365 and G Suite:

Vembu SaaSBackup, part of Vembu BDR Suite is designed for backing up the Mails, Drives, Calendar and Contacts of Office 365 and Google Apps. Vembu SaaSBackup’s core system will manage all backup and restore operations as per the user request. The backup data will be sent to the Vembu Cloud storage over secured network.

Free version

Vembu also offers a free version that has many great features. The paid version has even more very usable features that you can see in the comparison.

Building a Horizon View vCheck (part 2)

So last time I created some simple scripts for the Horizon View vCheck. This time I wanted to add some information about the Composer, Connection, security servers and the event database. So all in all I added four scripts that might seem to do the same but since the api’s treat the types of servers differently I decided to make separate scripts as well.

Please pull the scripts from Github since by the time you read this post things might have changed.

05 Connection Servers Status.ps1

This plugin pulls some information about the connection servers, if the status is ok and gives a warning if the Certificate will expire within 30 days. This period is something I need to change in the future to a setting so it will be customizable.

# Start of Settings
# End of Settings

$date=get-date
$datemaxexp=(get-date).adddays(30)
[email protected]()
$conservers=$services1.connectionserverhealth.connectionserverhealth_list()
foreach ($conserver in $conservers) {
if ($conserver.CertificateHealth.ExpirationTime -lt $date){
$expiring="Already Expired"
}
elseif ($conserver.CertificateHealth.ExpirationTime -lt $datemaxexp){
$expiring="Expiring in 30 days"
}
else {
$expiring="False"
}

$conserverstatus+=New-Object PSObject -Property @{"Name" = $conserver.name;
								"Status" = $conserver.Status;
								"Version" = $conserver.Version;
								"Build" = $conserver.Build
								"Certificate_Status" = $conserver.CertificateHealth.Valid;
								"Certificate_Expiration_Time" = $conserver.CertificateHealth.ExpirationTime;
								"Certificate_Expiring" = $expiring;
								"Certificate_Invalidation_Reason" = $conserver.CertificateHealth.InValidReason;
								
}
}
$conserverstatus | select name,Status,Version,Build,Certificate_Status,Certificate_Expiring,Certificate_Expiration_Time,Certificate_Invalidation_Reason 

$Title = "Connection Servers Status"
$Header = "Connection Servers Status"
$Comments = "These are the used Connection Servers"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

06 Security Servers Status.ps1

Almost the same as the connection servers but this time it checks for the security servers. I don’t run the appliance yet so will need to check on those somewhere as well.

# Start of Settings
# End of Settings

$date=get-date
$datemaxexp=(get-date).adddays(30)
[email protected]()
$secservers=$services1.securityserverhealth.securityserverhealth_list()
foreach ($secserver in $secservers) {
if ($secserver.CertificateHealth.ExpirationTime -lt $date){
$expiring="Already Expired"
}
elseif ($secserver.CertificateHealth.ExpirationTime -lt $datemaxexp){
$expiring="Expiring in 30 days"
}
else {
$expiring="False"
}

$secserverstatus+=New-Object PSObject -Property @{"Name" = $secserver.name;
								"Status" = $secserver.Status;
								"Version" = $secserver.Version;
								"Build" = $secserver.Build
								"Certificate_Status" = $secserver.CertificateHealth.Valid;
								"Certificate_Expiration_Time" = $secserver.CertificateHealth.ExpirationTime;
								"Certificate_Expiring" = $expiring;
								"Certificate_Invalidation_Reason" = $secserver.CertificateHealth.InValidReason;
								
}
}
$secserverstatus | select name,Status,Version,Build,Certificate_Status,Certificate_Expiring,Certificate_Expiration_Time,Certificate_Invalidation_Reason 

$Title = "Security Servers Status"
$Header = "Security Servers Status"
$Comments = "These are the used Security Servers"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

07 Composer Servers Status.ps1

Strangely enough the composer server doesn’t have a status in the api’s. I would have expected at least something for it being available or not. Because of this I only added information and the vCenter server it is connecting to. Another weird thing (might be me offcourse) is that the vcentername actually gives a plural output even though composer and vCenter have a 1on1 relation,

# Start of Settings
# End of Settings

[email protected]()
$comservers=$services1.viewcomposerhealth.viewcomposerhealth_list()
foreach ($comserver in $comservers) {
$vcenters=$comserver.data.virtualcenters

foreach ($vcenter in $vcenters){
if ($vcenternames){
$vcenternames+=","
$vcenternames+=($services1.virtualcenterhealth.virtualcenterhealth_get($vcenter)).data.name
}
else{
$vcenternames+=($services1.virtualcenterhealth.virtualcenterhealth_get($vcenter)).data.name
}
}
$comserverstatus+=New-Object PSObject -Property @{"Name" = $comserver.ServerName;
								"Version" = $comserver.Data.Version;
								"Build" = $comserver.Data.Build;
								"vCenter_Server"= $vcenternames
								
}
}
$comserverstatus | select name,Version,Build,vcenter_server

$Title = "Composer Servers Status"
$Header = "Composer Servers Status"
$Comments = "These are the used Composer Servers"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

08 Event Database Status.ps1

For the event database I decided to give as much information as possible from the api’s. Maybe in the future it could pull some information from the sql server itself but I think that should be covered by a sql check.

# Start of Settings
# End of Settings


[email protected]()
$eventdb=$services1.EventDatabaseHealth.EventDatabaseHealth_get()
if ($eventdb.configured -eq $True){
$eventdbstatus+=New-Object PSObject -Property @{"Servername" = $eventdb.data.Servername;
								"Port" = $eventdb.data.Port;
								"Status" = $eventdb.data.State;
								"Username" = $eventdb.data.Username;
								"DatabaseName" = $eventdb.data.DatabaseName
								"TablePrefix" = $eventdb.data.TablePrefix;
								"State" = $eventdb.data.State;
								"Error" = $eventdb.data.Error;
}
}
$eventdbstatus | select Servername,Port,Status,Username,DatabaseName,TablePrefix,State,Error 

$Title = "Event Database Status"
$Header = "Event Database Status"
$Comments = "These are the settings for the Event Database"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

The result

Building a Horizon View vCheck with those nice api’s (part 1 of ??)

Intro

Ever since I saw Alan Renouf’s vCheck script first in action years ago it has been one of the tools I have been promoting to use for daily checks. The fact that you can disable and enable plugins makes it a flexible adjustable solution that helped me preventing companies having big problems or proving that I have been warning them about things for weeks or months. Also I have whipped many colleague or customer around the ears with questions why they didn’t remove those snapshot they created 3 days before

Getting started

Fast forward until a couple of months ago when I saw those release note’s for PowerCli 6.5 with more options to talk to the Horizon View api’s. This immediately gave me the idea to build a set of vCheck scripts for Horizon View. One of the first things to do was finding out how the vCheck framework actually works. This turned out to be a matter of outputting the info you would like in the output as if it is on the command line. Also adding a section that contains a description helps in building the output:

$Title = "Composer Servers Status"
$Header = "Composer Servers Status"
$Comments = "These are the used Composer Servers"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

The 2nd thing to do is deciding on what checks needed to be build. After checking on the vExpert slack and with some co-workers and friends I came up with a shortlist:

  • Dashboard error status (Sean Massey)
  • Desktops with error (non-standard) status (Myself,Sean Massey)
  • Compare the Snapshots that have been set to the ones actually used on desktops to see if recompose might not have run (Brian Suhr, myself)
  • relation between Composer and vCenter (Kevin Leclaire)
  • last use time for dedicated desktops (Kees Baggeman)
  • Event Database status
  • Connection,composer,security server status
  • Information and status about the various desktop pool types
  • RDS farm status

Getting things done

Before actually building any checks a connecton has to be made this is done in the Connection plugin:

$Title = "Connection settings for View"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$Header = "Connection Settings"
$Comments = "Connection Plugin for connecting to View"
$Display = "None"
$PluginCategory = "View"

# Start of Settings
# Please Specify the address of one of the connection servers or the address for the general View environment
$Server = "Servername"
# Maximum number of samples to gather for events
$MaxSampleVIEvent = 100000
# Please give the user account to connect to Connection Server
$hvcsUser= "username"															
# Please give the domain for the user to connect to Connection Server
$hvcsDomain = "domain"														

# End of Settings



# Credential file for the user to connect to the Connection Server
$hvcsPassword = get-content .\hvcs_Credentials.txt | convertto-securestring		
# Credential file for the User configured n View to connect to the Database
$hvedbpassword=get-content .\hvedb_Credentials.txt | convertto-securestring   	

# Loading 
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- Connect to Horizon Connection Server API Service ---
$hvServer1 = Connect-HVServer -Server $server -User $hvcsUser -Password $hvcsPassword -Domain $hvcsDomain

# --- Get Services for interacting with the View API Service ---
$Services1= $hvServer1.ExtensionData

# --- Connect to the view events database ---
#$eventdb=connect-hvevent -dbpassword $hvedbpassword

# --- Get Desktop pools
$pools=(get-hvpool)

As you might notice the vmware.hv.helper plugin is required to do this.

The first real check I decided to build was to see if the desktops are actually build on the same snapshot as configured on pool level. With this you are able to see if a recompose ran into trouble. Let me highlight some of the code:

if ($pool.type -like "*automated*" -AND $pool.source -like "*VIEW_COMPOSER*"){

There are a couple of pooltypes and one of them is automated, since we’re looking for linked clones we also need to make sure the pool source is VIEW_COMPOSER if this says VIRTUAL_CENTER you’re looking at full clones.

$wrongsnaps=$poolmachines | where {$_.managedmachinedata.viewcomposerdata.baseimagesnapshotpath -notlike  $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath -OR $_.managedmachinedata.viewcomposerdata.baseimagesnapshotpath -notlike $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath}

I could have shortened this one by defining a couple of variables but this gives an impression of how deep you might have to go to get the required data. WHat I do is check if the snapshot has the same name AND if the selected source VM has the same name if either of the two is different the vm wil be entered on the output.

$wrongsnapdesktops+= New-Object PSObject -Property @{"VM Name" = $wrongsnap.base.name;
								"VM Snapshot" = $wrongsnap.managedmachinedata.viewcomposerdata.baseimagesnapshotpath;
								"VM GI" = $wrongsnap.managedmachinedata.viewcomposerdata.baseimagepath;
								"Pool Snapshot" = $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath;
								"Pool GI" = $pool.automateddesktopdata.VirtualCenternamesdata.parentvmpath;

Last of the real code is about displaying the actual info for the desktop.

This all results in the following plugin, be aware that this might be a bit slow to run since it needs go go trough all desktops. For my customer it takes about 3 minutes on 1350 desktops.

# Start of Settings
# End of Settings


[email protected]()
foreach ($pool in $pools){
$poolname=$pool.base.name
if ($pool.type -like "*automated*" -AND $pool.source -like "*VIEW_COMPOSER*"){

$poolmachines=get-hvmachine ($pool.base.name)
$wrongsnaps=$poolmachines | where {$_.managedmachinedata.viewcomposerdata.baseimagesnapshotpath -notlike  $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath -OR $_.managedmachinedata.viewcomposerdata.baseimagesnapshotpath -notlike $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath}
foreach ($wrongsnap in $wrongsnaps){
$wrongsnapdesktops+= New-Object PSObject -Property @{"VM Name" = $wrongsnap.base.name;
								"VM Snapshot" = $wrongsnap.managedmachinedata.viewcomposerdata.baseimagesnapshotpath;
								"VM GI" = $wrongsnap.managedmachinedata.viewcomposerdata.baseimagepath;
								"Pool Snapshot" = $pool.automateddesktopdata.VirtualCenternamesdata.snapshotpath;
								"Pool GI" = $pool.automateddesktopdata.VirtualCenternamesdata.parentvmpath;
}
}
}
}
$wrongsnapdesktops

$Title = "VDI Desktops based on wrong snapshot"
$Header = "VDI Desktops based on wrong snapshot"
$Comments = "These desktops have not been recomposed with the correct Golden Image Snapshot"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

And this is how it looks:

Another script I already made is a simple one to get the status of all full clone pools. Not really fancy but it gets information about what template is used as the base and several counts for the various status of desktops:

# Start of Settings
# End of Settings

[email protected]()
foreach ($pool in $pools){
$poolname=$pool.base.name
if ($pool.type -like "*automated*" -AND $pool.source -like "*VIRTUAL_CENTER*"){
$desktops=get-hvmachinesummary -pool $poolname
$fullpoolstatus+=New-Object PSObject -Property @{"Name" = $Poolname;
								"Template" = $pool.AutomatedDesktopData.VirtualCenterNamesData.TemplatePath;
								"Desktop_Count" = ($desktops).count;
								"Desktops_Unassigned" = ($desktops | where {$_.base.User -eq $null}).count;
								"Available" = ($desktops | where {$_.base.basicstate -eq "AVAILABLE"}).count;
								"Connected" = ($desktops | where {$_.base.basicstate -eq "CONNECTED"}).count;
								"Disconnected" = ($desktops | where {$_.base.basicstate -eq "DISCONNECTED"}).count;
								"Maintenance" = ($desktops | where {$_.base.basicstate -eq "MAINTENANCE"}).count;
								"Provisioning" = ($desktops | where {$_.base.basicstate -eq "PROVISIONING"}).count;
								"Customizing" = ($desktops | where {$_.base.basicstate -eq "CUSTOMIZING"}).count;
								"Already_Used" = ($desktops | where {$_.base.basicstate -eq "ALREADY_USED"}).count;
								"Agent_Unreachable" = ($desktops | where {$_.base.basicstate -eq "AGENT_UNREACHABLE"}).count;
								"Error" = ($desktops | where {$_.base.basicstate -eq "ERROR"}).count;
								"Deleting" = ($desktops | where {$_.base.basicstate -eq "DELETING"}).count;
								"Provisioning_Error" = ($desktops | where {$_.base.basicstate -eq "PROVISIONING_ERROR"}).count;
}
}
}
$fullpoolstatus | select Name,Template,Desktop_Count,Desktops_Unassigned,Available,Connected,Disconnected,Maintenance,Provisioning,Customizing,Already_Used,Agent_Unreachable,Error,Deleting,Provisioning_Error
$Title = "Full Clone Desktop Pool Status"
$Header = "Full Clone Desktop Pool Status"
$Comments = "These are all pools with full clones and their most common counters"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

and again this is how it can look:

Github

After Alan Renouf saw me posting screenshots on Twitter he offered to setup a github project for this. Last week this was done and I have already done my first few commits. Hopefully more people will jump on the bandwagon so we can make this check as awesome as the original is.