VMware Daily Health Check HTML Report PowerShell

I have been working on a daily check report for our VMware environment so that we don’t have to manually check each morning.

The report uses PowerCli to generate information and then output the results to a HTML file.

The report requires a few that either the old PowerCLI snapin is available or preferably the PowerCLi PowerShell module.

The script can either be run directly by a users with rights to query vCenter or by setting up a scheduled task.

The following prerequisite will be needed for the script to run.

  • PowerShell V4 or V 5
  • PowerCLI 6.0 or later version
  • vCenter 6.0 or later version

There will also need to be a mail server or relay server available for the report to be emailed.

This has been tested on PowerCLI version 6.0 and above. The version on the server I will be running from is 12.3.0 which is the latest release at this time.

The report checks

  • vCenter connection
  • VMware tools check
  • Snapshot older than the specified snapshots days
  • Host Alarms
  • VM Alarms
  • vCenter Alerts over the last 12 hours
  • Datastore under specified % free space

There are mandatory parameter that are required for the script to run and send the report.

  • VCServer = vCenter Server address
  • SMTPServer = Mail server address
  • Toaddress = destination email
  • Fromaddress = sending address
  • Report Export = folder report will be exported to

There are some variables at the start of the script that can be set to customize the report to only show the required snapshots days and datastore % free. In my case I wanted 3 days and below 20% free on datastores.

I have embedded the html CSS format in the script so it can be update to change the color, font size or font type.

Example of how to run the script is below

.\VMwareDailReportv1.ps1 -VCServer vcenter.domain.local  -SMTPServer mail.doamin.local -FromAddress VMwareReport@domain.local -toAddress Administrator@domain.local -ReportExport D:\Scripts\VMware\Daily_Report

Once completed the report should be emailed to the specified to address.

Below is an example of the report export.

The full script can be downloaded from.

Scripts/VMwareDailyReport.ps1 at master · TheSleepyAdmin/Scripts (github.com)

To create a scheduled task to run the report each morning go to scheduled task on the server or client that has PowerCLI installed.

Create a new task

Set the schedule.

Next we need to set PowerShell as the program to start and set the argument to similar to the below, updating the parameters and script location

-ExecutionPolicy Bypass -NoProfile -File D:\Scripts\VMware\Daily_Report\VMwareDailReportv1.ps1 -VCServer vcenter.domain.local -SMTPServer mail.doamin.local -FromAddress VMwareReport@domain.local -toAddress Administrator@domain.local -ReportExport D:\Scripts\VMware\Daily_Report

I don’t change anything on conditions tab and only update that stop task if running longer than an hour in the settings tab.

Once completed run the task to confirm all is working.

I will probable added to the script but this is just the initial version and thought it might be helpful to anyone who want to try automate some of there manual checks.

Windows 10 20H2 Feature Update Error 0XC190012E

During our recent Windows 10 feature update deployment from 1809 to 20H2, we ran in to an issue on some clients where they reported back error 0XC190012E to ConfigMgr.

The error code its self is just a generic code and I couldn’t find it in either

Windows update error code list

Windows Update error code list by component – Windows Deployment | Microsoft Docs

or the Windows 10 upgrade errors doc

Get help with Windows 10 upgrade and installation errors (microsoft.com)

We first checked the temporary location that feature update deploys to c:\$Windows.~BT, to check if there was any issue in the compatibility xml file or in the setup logs under sources\panther, but there was no folders other than sources.

Since there was no files I though this might be a space issue so ran some remote WMI commands to check the disk space available. I used the below PowerShell using Get-WMIObject.

Get-WmiObject Win32_logicaldisk -ComputerName RemoteComputerName | Select-Object @{Name="Drive";E={$_.DeviceID}},
@{Name="Free Space(GB)";E={[math]::Round($_.freespace/1gb)}},
@{Name="%Free Space";E={"{0:N2}" -f (($_.freespace/$_.size)*100)}}

In this case it wasn’t disk space a there was over 100GB free.

There wasn’t much online about the error other than the usually run scf /scannow, diskcheck and run the update troubleshooter but none of these worked.

Then found this post on the Microsoft forms that pointed to an issue with the setupconfig.ini

Generic 0xc190012e trying to upgrade Windows 10 1909 to 20H2 – Microsoft Community


We aren’t using any custom setting in the setupconfig.ini so there was no issue for me to remove this.

Once I removed the file and kicked off the feature update again it now completes without issue.

I don’t know how the setupconfig.ini file was created on only a few devices but it was a quick fix once we found the issue was the config file.

Install and Configure vRealize Operations Manager 8.2 Part 8 Configure Windows Server Monitoring

In the previous seven post’s we went through installing and configuring the vROps virtual appliance, connecting to vCenter server, configuring Window Active directory as an identity source, create custom alerts and notifications, creating dashboards, upgrading the appliance to the latest version and requesting / configuring a custom SSL cert.

Part 1: Install and Configure vRealize Operations Manager 8.2 Part 1 – TheSleepyAdmins

Part 2: Install and Configure vRealize Operations Manager 8.2 Part 2 Connect to vCenter – TheSleepyAdmins

Part 3: Install and Configure vRealize Operations Manager 8.2 Part 3 AD Authentication – TheSleepyAdmins

Part 4: Install and Configure vRealize Operations Manager 8.2 Part 4 Create Alerts and Notifications – TheSleepyAdmins

Part 5: Install and Configure vRealize Operations Manager 8.2 Part 5 Create a Dashboard – TheSleepyAdmins

Part 6: Install and Configure vRealize Operations Manager 8.2 Part 6 Upgrading vROps – TheSleepyAdmins

Part 7: Install and Configure vRealize Operations Manager 8.2 Part 7 Configure Custom Certificate – TheSleepyAdmins

In this post we will be going through installing the Windows agent and configuring the management pack to alert on Windows server OS level alerts like performance, services and application. This can be useful for monitoring physical servers running Windows.

Below is a link to the VMware document on vROps agent deployment I used for reference.

End Point Operations Management Agent Installation and Deployment (vmware.com)

Below is the list of support Operating system for vROps agent.

Operating SystemProcessor ArchitectureJVM
RedHat Enterprise Linux (RHEL) 5.x, 6.x, 7.xx86_64, x86_32Oracle Java SE8
CentOS 5.x, 6.x, 7.xx86_64, x86_32Oracle Java SE8
SUSE Enterprise Linux (SLES) 11.x, 12.xx86_64Oracle Java SE8
Windows 2008 Server, 2008 Server R2x86_64, x86_32Oracle Java SE8
Windows 2012 Server, 2012 Server R2x86_64Oracle Java SE8
Windows Server 2016x86_64Oracle Java SE8
Solaris 10, 11x86_64, SPARCOracle Java SE7
AIX 6.1, 7.1Power PCIBM Java SE7
VMware Photon Linux 1. 0x86_64Open JDK 1.8.0_72-BLFS
Oracle Linux versions 5, 6, 7x86_64, x86_32Open JDK Runtime Environment 1.7

First we need to enabled the management pack for Operating Systems / Remote Services Monitoring.

After the management pack is enabled we need to download the agent, the 8.2 version works for both 8.2 and 8.3 and is available to download on the same page as the vROps appliance.

Download vRealize Operations – My VMware

Once we have the agent, we can deploy to the servers that need to be monitored.

Copy the file to the server and run installer.

Add in the vROps server when prompted to

Next the installer will look for the thumbprint for the cert that is used for vROps. Logon to https://vrops/admin and click on the cert icon on the top right to view the current cert details.

Enter the user name and password that will be used to connect to vROps.

Set the install location the default is to install in c:\ep-agent this can be change if required.

The agent should now start to install.

We can run ep-agent.bat query from the install folder ep-agent\bin to confirm the agent has installed correctly.

Once completed we can check vROps to confirm the agent is reporting back, to view the agent in vROps logon to the web client > Administration > End Point Operations.

To view details for the server go to Environment > Operating Systems > Operating System World > Windows and select the server to view.

Once the server is added we can now monitor disk, CPU, memory and other metrics.

We can also monitor services.

To add a service to be monitored,

Go to server and click on action > monitor os object > monitor windows service

Give the monitor a name, select the object type and add in the service name (this needs to be the actual name and not the display name)

This image has an empty alt attribute; its file name is image-22.png

Set the collection interval. Click ok to to create the monitor.

Click on Environment and we can view the service monitor we just added.

If we stop the service the next time the collection runs the service should show a critical alert.

We can add addtional metrics if needed. In this example we might want to see the logical disk space % free.

First we either need to modify the existing policy or create a new policy.

In this example we will be adding a new policy and inherting from the default policy.

Go to Policies and click add, give the policy a name and select where it will be inherit from. Then click create policy.

Go to the policies and click on the policy we just created and go to edit policy.

We will be adding a metric so we will select metrics and properties and enable the required metrics.

% free is under EP Ops Adapter > Windows >Fileserver Logical Disk > Utilization and % Free space (%).

Set the policy state to enabled.

Next we can apply the policy to either the object or if there are a lot of device it would be easier to create and apply to a custom group.

Now we can go to the server and confirm the policy is applied.

After a few minutes we can check the server object we can see the new metric and the data start to be shown.

Now that we have the metric showing next we can create an alert.

First we will need to create a symptom definition. Go to symptom definitions and click add.

Select the metric that will be used and give the symptom a name and set the threshold.

We can search to for the symptom to confirm it exist.

Next we need to create the alert. Go to alert definitions and click add.

Give the Alert a name and select Windows as the base object type.

Next we need to add the symptom we created.

Add a recommendation if any are applicable or create a recommendation (this is not required but can be usefully)

We need to add to a policy in this case it’s the Windows_Server_Agent and create a notification if this is required.

This image has an empty alt attribute; its file name is image-48.png

We can search for the alert to confirm it has been created and to view the details.

Now when the server goes below 10% free disk space the server will alert.

Below is what the email notification will look like, we have configured email notification in a previous post so we wont go back over it here.

There are many metrics and alerts that can be configure this is just an example of one type. We can also create multiple alerts so that we get warning alerts at maybe 20% before getting a critical alert.