The Lowercase w

Configuring my Dell PowerEdge R920 for dual SD Cards instead of Internal HDs

Posted by Ben Liebowitz

We recently setup a Dell PowerEdge R920 that was in storage to add to our VDI Environment for additional resources.  This server differs from the other R920s in our environment as it has dual SD Cards internally instead of Hard Disks. 

I had to configure the SD Cards in a mirror so we had fault tolerance, so this is the procedure I followed…

1. Power on the server.  The server will undergo a memory test.
2016-12-21 10_25_11-Remote Desktop Manager [CTCGSSAPP12]

2.  Once the memory test is over, the Dell logo will appear, with 4 options in the top right corner and the system will begin to POST.  Press F2 to enter the system setup.
2016-12-21 10_26_20-Remote Desktop Manager [CTCGSSAPP12]

3.  Once you press F2, the system will continue to POST, and you’ll see ENTERING SYSTEM SETUP in the top right corner.
2016-12-21 10_26_30-Remote Desktop Manager [CTCGSSAPP12]

4.  After completing POST, the SYSTEM SETUP MAIN MENU will load.  Choose SYSTEM BIOS.
2016-12-21 10_27_24-Remote Desktop Manager [CTCGSSAPP12]

5.  Then choose MEMORY SETTINGS.
2016-12-21 10_27_51-Remote Desktop Manager [CTCGSSAPP12]

2016-12-21 10_28_40-Remote Desktop Manager [CTCGSSAPP12]

7.  Click FINISH. 
2016-12-21 10_27_51-Remote Desktop Manager [CTCGSSAPP12]

8.  Click EXIT in the top right corner.  Then click YES to confirm.
2016-12-21 10_27_24-Remote Desktop Manager [CTCGSSAPP12]

9.  When the system reboots, press F11 during POST.
2016-12-21 10_26_20-Remote Desktop Manager [CTCGSSAPP12]

10. You’ll see ENTERING BIOS BOOT MANAGER in the top right corner.
2016-12-22 09_27_55-Remote Desktop Manager [CTCGSSAPP12]

11.  When the boot manager loads, choose BIOS BOOT MENU.
2016-12-22 09_30_40-Remote Desktop Manager [CTCGSSAPP12]

12.  Select the installation method you’re using.  In my case, I have a mounted ISO via iDRAC so I’m choosing Virtual CD. 
2016-12-22 09_31_09-Remote Desktop Manager [CTCGSSAPP12]

13.  Select the ESXi Installer.  In my case, I’m installing ESXi 5.5 U2 to match the rest of the hosts in my environment. 
2016-12-22 09_31_22-Remote Desktop Manager [CTCGSSAPP12]

14.  The ESXi Installer will load.
2016-12-22 09_34_03-Remote Desktop Manager [CTCGSSAPP12]

15.  Press ENTER to continue with the installation. 
2016-12-22 09_39_05-Remote Desktop Manager [CTCGSSAPP12]

16.  Press F11 to accept the EULA. 
2016-12-22 09_39_13-Remote Desktop Manager [CTCGSSAPP12]

17.  You’ll see your Dual SD cards ready to accept the vSphere ESXi Installation.  2016-12-22 09_39_41-Remote Desktop Manager [CTCGSSAPP12]

18.  Proceed with your install as you would if installing on disk media. 



Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


Windows 2012 R2: Static IP displays as DHCP IP

Posted by Ben Liebowitz

I ran across this issue this week with a bunch of new servers I built using a new Windows 2012 R2 Image I built and captured using Symantec Altiris.  There must have been some sort of corruption in the image that caused this issue. 

The issue displays like this…  You set a static IP on your server (in this case, they were physical Dell Rack Mount servers).  After clicking OK, you go back into the NIC properties and into IPv4 Properties and it displays as if using DHCP. 

Then, if you do an IPCONFIG, you can see DHCP is disabled…

To fix this…

1. Open Regedit
2. Navigate to HKLM – System – CurrentControlSet – Control – Network
3. Backup the entire NETWORK key by right clicking, choosing EXPORT, and saving network.reg somewhere locally.
4. Delete the CONFIG key
5. Reboot.
6. When the server comes back up, go back into Network Connections and verify the network info is readable.

I couldn’t find a specific KB to fix this, but found a post on by Bob Boener that described a similar issue and what he did to fix it.  His solution worked for me, so I documented each step for my team and thought I’d share it here.

Hope this helps someone. Smile 

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


VMworld 2016 Scheduling Tip

Posted by Ben Liebowitz

Are you going to VMworld 2016 US in Las Vegas?  I am!  And one thing that annoys me is that you cannot manually add anything to the schedule builder.  Also, this year they removed the old schedule builder and integrated it into the Content Catalog, removing some features the old Schedule Builder had, like exporting to PDF, etc.

A fellow VMUG Leader, Eric Lee from the KC VMUG, gave me the idea to export the Schedule from the Content Catalog as an .ICS file and then import that file into Microsoft Outlook, creating a new Calendar.  From there, I was able to add the things into the calendar that I wanted, and exported it to PDF!

Here’s how:

1. Log into the VMworld Content Catalog.

2.  Click the calendar icon

3.  From there, you can click EXPORT

4.  I choose .ics, but choose the format you wish to export to. Save the file locally on your computer.

5.  In Microsoft Outlook, click FILE – OPEN & EXPORT, and then OPEN CALENDAR.

6.  Browse to the location of the file you exported in step 4.  Select it and click OPEN

7.  The calendar will import into Outlook as UNTITLED.  Right click and go to PROPERTIES.

8.  From here you can click the top line and rename the calendar and click OK.

9.  Now, you can feel free to add whatever events you want to the calendar, like I added Opening Acts, the VMworld Welcome Reception, the VMUG Member Party, vExpert Reception, my VMUG Lounge shift, etc.

10.  Now, you can print to XPS or PDF.  If you don’t have a PRINT TO PDF reader installed, doPDF is a good one and it’s free.


HINT:  If you're traveling from another time zone, temporarily change your time zone in Windows to Pacific Time before you add items to the calendar and save to PDF/Print.  This way, the times in your document match the times local to the event. :)


You can do the same with the Google Calendar.

1.  In the Google Calendar, click the Gear icon and go to SETTINGS.

2. Click the Calendars tab.

2016-08-22 15_46_09-Google Calendar - Settings
4. Name it VMworld 2016 (or whatever you'd like).  You can also designate what time zone this calendar should be for, which is nice!

5.  Go back to SETTINGS and the Calendar tab again.

7. Browse to the ICS file, select the New calendar to import to.  Click IMPORT

8.  You should now see the VMworld 2016 calendar in your MY CALENDARS list.

Hope you find this helpful, like I did.


Ben Liebowitz, VCP, vExpert
NJ VMUG Leader



One of my favorite tools – Remote Desktop Manager by Devolutions

Posted by Ben Liebowitz

One of the tools I’ve been using for many years now is called Remote Desktop Manager by Devolutions.  Based on the name, you’d think it’s just another RDP tool, but it’s much MUCH more!

There are 2 versions of the product.  There is a FREE version, which gives you limited functionality, and an ENTERPRISE version for full functionality.  There is also a RDM Server as well, but I have no experience with that. The free version lets you setup RDP connections, as well as Microsoft Assistance, Apple Remote Desktop, Citrix ICA/Web, Web URLs, TeamViewer, PCAnywhere, RAdmin, Dameware Mini Remote Control, etc.  Where the enterprise version stands above is features like the Credentials Repository, being able to import from other tools/sources/csv  and lots more.  You can view the full feature comparison here:

Some of the features that I use on a regular basis are:

  • “Keep tab on disconnect”
    • This enables the tab to stay open when you reboot the machine you’re working on, allowing you to quickly reconnect.
  • Continuous Ping
    • This does a ping –t to the machine.  Also handy when working on a remote machine when rebooting multiple times to know when it’s back online.
  • Integrated Password Generator
    • This is great when creating/changing service account passwords.  I just have to open the tool, select  the password length, if you want Uppercase, Lowercase, Digits, Underscore, Brackets, Special Characters, Spaces, etc.  When you click generate you get multiple passwords to choose from, you can copy one or more of them to the clipboard to paste into the password change field or into your password management tool.
      • One thing to watch out for that I ran into was passwords which include QUOTATION MARKS!  We had a tool have an issue with the password and once we changed the quote character it worked again.  Smile
  • Credential Manager
    • I love being able to list each of my DOMAIN\username accounts in one place with their passwords and then assign them to each RDP entry, URL, SSH session, etc.
  • Open (with Parameters)
    • This opens the credential manager before connecting and is handy if you want to connect using alternate credentials other than the one already setup.


If you use this tool, please leave a comment and let me know YOUR favorite feature(s)!

Go checkout the tool today!


Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


I NEED YOUR HELP – VMworld & GoFundMe Edition!

Posted by Ben Liebowitz


Last year was my first time attending VMworld.  As someone who’s whole career is currently centered around VMware products, this conference is THE conference to attend.  I received a free conference pass to VMworld in Las Vegas this year, however I am looking for assistance covering the Travel Expenses (Airfare, Hotel, Transportation).  I'll cover meal costs myself.

I am a Systems Engineer for a global news organization.  I’ve had my VCP since 2011 and was elected vExpert by VMware in 2015 and again in 2016.  I was also elected PernixPro.  I’m also a leader of the VMware User Group for New Jersey.  I've spent a lot of my time giving back to the VMware community and now I need your help!

As this is too much to lay out on my own, I’m looking for help funding my trip!  I started a GoFundMe page and my goal is $1000 to cover Hotel, Airfare, and other expenses.  I’m also offering if I receive a donate of $200 or more, I will put your company’s logo on a shirt/backpack/messenger bag that I will wear/carry throughout the event!  Below is an example of what I envision the them to look like... :)


Sample Backpack


Thank you for your time and I hope to see you at VMworld in August!

Here is the link to my GoFundMe page!

Thanks in advance,

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader



Mission: VMUG Virtual Event – May 17, 2016

Posted by Ben Liebowitz

VMUG Virtual Event 3.0

As a VMUG Leader, I felt like I needed to post a blog entry on the upcoming VMUG Virtual event on May 17th, 2016.  The VMUG Virtual Events are always packed with information from VMware and vendors as well.

VMware is presenting on topics like:  VSAN 6.2, vRA & NSX Technical Deepdive, AirWatch, Taking Virtualization to the next level, EUC, & "You Built a Software Defined Datacenter - Horray! Now What?"

Some vendors presenting are: Veeam Software, Nimble Storage, SimpliVity, Zerto, Trend Micro, EMC, Riverbed Technology, Tintri, Hitachi Data Systems, and PernixData.

Sneak a Peek at Space Station VMUG!

The countdown is on for Mission: VMUG Virtual Event! Your opportunity to dock with Space Station VMUG and connect with peers and industry leaders is fast approaching. Instead of meeting in a physical location, join us on our virtual spacecraft to:

✓ Gain valuable knowledge
✓ Network with experts
✓ Visit with partners


Whether you are interested in NSX, vSphere or Virtualization, the Mission: VMUG Virtual Event Agenda has you covered. This year's VMware breakout sessions promise to deliver the necessary knowledge to enhance your skills and benefit your business.

Accept Your Mission Now! View the Agenda!

Connect with Fellow Explorers and Win!

Join us on May 17th, and you'll be eligible to win the Galactic Guru prize, an Amazon Echo! To learn more about all the exciting prizes at Mission: VMUG Virtual Event click here - the stars could align for you!

Stay tuned on Twitter to #MissionVE for update dispatches
from VMUG HQ Mission Control.

Add Mission to Calendar


See you on the VMUG Space Station & try to avoid that black hole!! :)

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader



What do you do when a path to a NFS Datastore goes down?

Posted by Ben Liebowitz

My QA environment uses Isilon as it’s backend storage platform.  The Isilon share is one large storage volume that is setup with different paths (IPs) to the storage.  This environment has 6 datastores (6 paths).  The other day, we had one of those paths go down, taking down approx 75 VMs with it.

I debated attempting to remove the down datastore and then add it back with the same name (with a different IP) but didn’t know what that would do to the VMs, if they’d come back cleanly or not, etc.  In the end, I decided to go down a different path…

While my storage engineer troubleshot the issue on their side, I decided to spin up another datastore, using a different IP.  I then modified my script to migrate VMs between vCenters to pull a list of VMs on that specific datastore, power the VMs off, remove them from inventory on the down datastore, then re-add them back on the newly created one and power them back on.  I left the “update-tools” line in there too as many of the VMs were out of date on the tools version.  A few extra minutes of downtime in a QA environment won’t hurt anything.  Smile

You'll notice a section of the script where it pauses...  I did this so I could then edit the migrate.csv and change the datastore name.  This was easier than taking the time to modify the code to hardcode the new datastore name.  However, if you want to modify line 109 with the actual datastore name and the pause can be removed.  The modified line is here:

$vmxfile = "[NEW_DATASTORE_NAME] $($vmName)/$($vmName).vmx"

Again, props to Luc Dekens (@LucD22 / for the folder path functions!

Next step is to use DNS entries instead of IPs.  This way, if this happens again, it's just a matter of changing the DNS record and waiting for replication. :)

# Script to migrate VMs from down Isilon datastore to the new one
# Created by BLiebowitz on 4/21/2016

# Set Variables
$vcenter = "vcenter_server"
$esxhost = ""
$datastore_old = "Datastore03"
$datastore_new = "Datastore04"

# Load PowerCLI Module
if ( !(Get-Module -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) ) {
. “C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1”

# Connect to vCenter
connect-viserver $vcenter

#Build the BlueFolderPath function
New-VIProperty -Name 'FullPath' -ObjectType 'VirtualMachine' -Value {

$current = Get-View $vm.ExtensionData.Parent
$path = ""
do {
$parent = $current
if($parent.Name -ne "vm"){$path =  $parent.Name + "/" + $path}
$current = Get-View $current.Parent
} while ($current.Parent -ne $null)
} -Force | Out-Null

#Build the Get-folderbypath function
function Get-FolderByPath {
.SYNOPSIS  Retrieve folders by giving a path
.DESCRIPTION The function will retrieve a folder by it's
path. The path can contain any type of leave (folder or
.NOTES  Author:  Luc Dekens
The path to the folder.
This is a required parameter.
.PARAMETER Separator
The character that is used to separate the leaves in the
path. The default is '/'
PS> Get-FolderByPath -Path "Folder1/Datacenter/Folder2"
PS> Get-FolderByPath -Path "Folder1>Folder2" -Separator '>'

[parameter(Mandatory = $true)]
[char]${Separator} = '/'

if((Get-PowerCLIConfiguration).DefaultVIServerMode -eq "Multiple"){
$vcs = $defaultVIServers
$vcs = $defaultVIServers[0]

foreach($vc in $vcs){
foreach($strPath in $Path){
$root = Get-Folder -Name Datacenters -Server $vc
$strPath.TrimStart($Separator).Split($Separator) | %{
$root = Get-Inventory -Name $_ -Location $root -Server $vc -NoRecursion
if((Get-Inventory -Location $root -NoRecursion | Select -ExpandProperty Name) -contains "vm"){
$root = Get-Inventory -Name "vm" -Location $root -Server $vc -NoRecursion
$root | where {$_ -is [VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]}|%{
Get-Folder -Name $_.Name -Location $root.Parent -Server $vc

# export list of VMs to Migrate to CSV
Get-Datastore -Name $datastore_old | Get-VM |
Select Name, @{N="Datastore";E={Get-Datastore -VM $_ | Select -ExpandProperty Name}},
@{N="Network";E={Get-VirtualPortgroup -VM $_ | Select -ExpandProperty Name}},
@{N="Parent";E={$_.FullPath}} |
Export-Csv "c:\migrate.csv" -NoTypeinformation -UseCulture

# Shutdown VMs (cleanly)
foreach ($row in (Import-csv c:\migrate.csv))
shutdown-vmguest -vm $row.Name -Confirm:$false
start-sleep -s 60
stop-vm -vm $row.Name -Confirm:$false

# Pause script while CSV is edited to change Old Datastore name to New Datastore name.
<span style="color: #454545;">$HOST.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”) | OUT-NULL</span><br style="color: #454545;" /><span style="color: #454545;">$HOST.UI.RawUI.Flushinputbuffer()</span>

## Add backto inventory
foreach ($row in (Import-Csv c:\Migrate.csv)) {
$vmName = $row.Name
$vmxfile = "[$($row.Datastore)] $($vmName)/$($vmName).vmx"
$vmNewVM = New-VM -VMFilePath $vmxfile -VMhost $esxhost

# Move VM to existing folder locaiton
Move-VM -VM $vmName -Destination (get-folderbypath $row.Parent)

# Poweron VMs
Start-VM -VM $vmName -Confirm:$false | wait-tools
Get-VMQuestion -VM $vmName | Set-VMQuestion –Option "I moved it" -confirm:$false

# Wait for VM to boot before updating VMware Tools
start-sleep -s 60

# Update VMware Tools
update-tools $vmName

} ## end foreach


Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


Adding a PowerShell Windows Update Script to my VMware Customizations

Posted by Ben Liebowitz

In my environments, we typically convert the templates to Virtual Machines once a quarter so we can install Windows Updates.  This means, there could be a number of patches to install if you’re 2+ months out from the last time they were updated.  So I decided to use a PowerShell script that my coworker wrote to do Windows Updates and run it during the Run Once phase of the vCenter Customizations.

Typically, I have my customizations set to automatically login once.  I did this so I could deploy a VM and walk away.  When I came back, I could tell it was done when the VM was up and logged into Windows.  So I wanted a way to be able to tell things were done and the VM was ready after deploying the Windows Updates.  I decided that a TXT file being displayed on screen would be a great way to know things were done!

First, I modified the customization by changing the number of times to logon automatically to 2 on the ADMINISTRATOR PASSWORD tab and putting C:\SW\install_update.bat on the RUN ONCE tab.  I should also note that my templates are all configured to start on our build VLAN which runs DHCP.  This allows us to build and configure the VM and then change it to the destination VLAN when ready.


Next, I had to convert my template to a VM and boot it up, so I could copy the required files to a location on the C drive.  I created a folder called c:\SW and copied the files there.  There are 4 files I needed to copy.

1. install_update.bat – This is the file that the customization executes.
2. install_updates.ps1 – This is the PowerShell script that runs Windows Update.
3.  runonce.reg – This adds the txt file to launch at the end of the 2nd reboot.
4.  image.txt – This is the TXT file that displays when the VM has rebooted the 2nd time and is finished.

This is the process that happens when you deploy a VM after I made the changes.

Once you power up the VM, it boots and prepares to run sysprep.

Once it runs sysprep, the system reboots, sysprep will run and will reboot again.
image  image

As configured, Windows will Auto Login as the local administrator and the install_updates.bat file will run.  You’ll see the regedit command run first to add the display of the text file to the RUNONCE key in the registry.  Then the Windows update PowerShell Script will execute.  It will reboot upon completion, even if there are no pending updates.

image image

After the VM reboots, it will Auto Login for a 2nd time. After logging in, the TXT file staying the VM is finished deploying will be displayed.
image image

Once you see the TXT file, you can close Notepad and continue to perform the post-build configuration (like adding users, installing AV, etc.)

Here are the contents of each of the files:


REM Run Once
regedit /s c:\SW\runonce.reg

REM Run Windows Update
powershell.exe -ExecutionPolicy Bypass -File "c:\sw\Install_updates.ps1" -patch 1


$patch = 1
function write-log
{    param([string]$data)
$date = get-date -format "ddMMMyyyy @ hh:mm:ss tt"
write-host "$date $data"
Out-File -InputObject "$date $data" -FilePath $LoggingFile -Append
function Get-StatusValue($value)
{ switch -exact ($value)
{ 0   {"NotStarted"}
1   {"InProgress"}
2   {"Succeeded"}
3   {"SucceededWithErrors"}
4   {"Failed"}
5   {"Aborted"}}}
function patchserver
{    Param([string]$Option)
$needsReboot = $false
$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
write-log " - Searching for Updates"
switch ($Option)
{ 0 { $SearchResult = $UpdateSearcher.Search("IsHidden=0 and IsInstalled=0")}
1 { $SearchResult = $UpdateSearcher.Search("IsAssigned=1 and IsHidden=0 and IsInstalled=0")}
default { $SearchResult = $UpdateSearcher.Search("IsHidden=0 and IsInstalled=0")}}
write-log " - Found [$($SearchResult.Updates.count)] Updates to Download and install"
foreach($Update in $SearchResult.Updates)
$UpdatesCollection = New-Object -ComObject Microsoft.Update.UpdateColl
if ( $Update.EulaAccepted -eq 0 ) { $Update.AcceptEula() }
$UpdatesCollection.Add($Update) | out-null
write-log " + Downloading [$i of $($SearchResult.Updates.count)] $($Update.Title)"
$UpdatesDownloader = $UpdateSession.CreateUpdateDownloader()
$UpdatesDownloader.Updates = $UpdatesCollection
$DownloadResult = $UpdatesDownloader.Download()
$Message = "   - Download {0}" -f (Get-StatusValue $DownloadResult.ResultCode)
write-log $message
write-log "   - Installing Update"
$UpdatesInstaller = $UpdateSession.CreateUpdateInstaller()
$UpdatesInstaller.Updates = $UpdatesCollection
$InstallResult = $UpdatesInstaller.Install()
$Message = "   - Install {0}" -f (Get-StatusValue $DownloadResult.ResultCode)
write-log $message
New-Item -Path C:\Logs -ItemType "directory" -Force > $null
$LoggingFile = "C:\Logs\Updates_" + (Get-Date -f "MMddyyyy_hh-mm-ss_tt") + ".txt"
del $LoggingFile -Confirm:$false -ErrorAction SilentlyContinue
$CurrentTime = Get-Date
write-log "STARTING: $CurrentTime"
switch ($patch)
0 {
write-log "########################"
1 {
write-log "################################"
write-log "###  INSTALLING ALL UPDATES  ###"
write-log "################################"
patchserver 0
Restart-Computer -Force
2 {
write-log "############################"
write-log "###  INSTALLING UPDATES  ###"
write-log "############################"

patchserver 1
Restart-Computer -Force
default {
write-log "Must specify an valid option -- exiting"
return -1


Windows Registry Editor Version 5.00

"Image"="notepad c:\\SW\\image.txt"




UPDATE 3/22/16:

Another way to display that the image is done is to display a popup box...

Delete image.tx, modify the runonce.reg (below), and add image.ps1 (also below)...


Windows Registry Editor Version 5.00

"Image"="powershell.exe -ExecutioinPolicy Bypass -File \"c:\\sw\\image.ps1\""


[System.Windows.Forms.MessageBox]::Show("TEMPLATE DEPLOYMENT COMPLETE.")

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


My Experience Upgrading vCenter to 5.5 Update 3b

Posted by Ben Liebowitz

I recently upgraded my vCenter from 5.5 Update 2, to 5.5 Update 3b.  As this is a fairly straightforward process, I didn’t expect anything to go wrong.  I proceeded through all the main components and once completed, attempted to connect to vCenter…  I found I couldn’t connect.  Further investigation found that the service would not start!

Attempting to start the VMware Virtual Center service gave me:


We also found that when we attempted to start VPXD manually from a command prompt, that we received this error:

“The procedure entry point ?CustomizerGuestType@GuestOSType@GuestCust@@..... could not be located in the dynamic link library C:\Program Files\VMware\Infrastructure\VirtualCenter Server\vpxd.exe”

Further investigation brought us to the following KB Article.

If you have not yet upgraded to vCenter 5.5 Update 3b, I recommend performing the steps below to prevent this issue from affecting you.

  1. From the vCenter Server machine, navigate to C:\Windows\Installer\$PatchCache$\Managed\05550F1E83248734780F0115742A159D\5.5.0.
    Note: The above path is the default path and may vary depending on the installation.
  2. Move the deployPkg.dll file from this location to a backup location.
  3. Run the vCenter Server 5.5 Update 3 upgrade.

If you’ve already upgraded, you have two options.

1. Revert to the previous state by reverting the snapshot you took before upgrading & restoring the DB to the backup you took.  Then performing the steps above to prevent the issue from occurring.


  1. From the vCenter Server machine, navigate to C:\Program Files\VMware\Infrastructure\VirtualCenter Server\
    Note: The above path is the default path and may vary depending on the installation.
  2. Move the deployPkg.dll file from this location to a backup location.
  3. Download the file that is attached to the article.
  4. Extract the deployPkg.dll into the C:\Program Files\VMware\Infrastructure\VirtualCenter Server\ directory on the vCenter Server.
  5. Start the VMware vCenter Server service and VMware vCenter Management Web Services. For more information, seeStopping, starting, or restarting VMware vCenter Server services (1003895).
  6. Uninstall Profile-Driven Storage Service by running this command from an elevated command prompt:
    msiexec.exe /x {7BC9E9D9-3DF6-4040-B4A1-B6A3A8AE75BA} SKIPVCCHECK=1 SUPPRESS_CONFIRM_UNINSTALL="1" /qr
  7. Install the 5.5 Update 3 version of the Profile-Driven Storage Service by running this command from an elevated command prompt:
    msiexec.exe /L*V "%temp%\sps_vminst.log" /I "vCenter_installation_media_drive :\vCenter-Server\Profile-Driven Storage\VMware vSphere Profile-Driven Storage.msi" INSTALLDIR="vCenter_installation_media_drive :\Program Files\VMware\Infrastructure\" COMPUTER_FQDN= TOMCAT_MAX_MEMORY_OPTION="S" VC_KEYSTORE_TYPE=PKCS12 VC_KEYSTORE_PASSWORD=testpassword VC_SSL_DIR="vCenter_installation_media_drive:\ProgramData\VMware\VMware VirtualCenter\SSL\" VC_SPS_EXTENSION_DIR="C:\Program Files\VMware\Infrastructure\VirtualCenter Server\extensions\com.vmware.vim.sps\" IS_URL="" ARPSYSTEMCOMPONENT=1 SKIPVCCHECK=1 /qr

I hope this post helps someone avoid having the problems I did.

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader


Patching VMware ESXi Hosts via PowerCLI!

Posted by Ben Liebowitz

This year, I’m trying something new…  Anything that I have to do more than 2-3 times, I’m going to attempt to automate it!

In keeping with this mantra, I recently had a task come across my plate to patch the 20+ ESXi Hosts in one of my production environments.  Along with installing the latest Host Updates, I also wanted to upgrade Dell’s Open Manage Server Administrator to the latest version.

In the past, these updates would have taken me a while as I’d install Host Updates, let the host reboot, come back to it some time later after realizing it was back, install the host extension, then wait for it to come back up, then remove it from Maintenance Mode.  In all, I was doing maybe 2 hosts a day.

In my environment, I have multiple vCenter servers one for QA, one for VDI, one for Production US, one for Production UK, and one for my Lab Environment.  So, at the start of my script, it lists these vCenter servers and I have to choose which one I want to connect to.  Once I choose the number and hit enter, it then connects to that vCenter and lists the hosts that belong to that vCenter.




Once I select the host I want to patch, it initiates a VUM Scan on the host, to make sure it brings the host to the most current level.


It then places the host into Maintenance Mode.



Then, vCenter vMotions the VMs off.  As you are probably aware, this part may take some time depending on how many VMs you have on your host.  A License level to be able to use vMotion is required for the automatic vMotions to occur.  Once in MM, the host patches are installed and the host is rebooted.



Once back online, the host extension is installed/upgraded and the host is rebooted again.



Once back online, the host is removed from Maintenance Mode.



Finally, a popup box is displayed to let me know it’s done.


Once I put all those tasks into a single script, I’m able to do both patch baselines (critical & non-critical updates) as well as the host extension (OMSA 8.2) and get the host back online in about 30-45 minutes.  This may change depending on how long it takes your server(s) to POST.  My Dell R920s can take a bit of time to do the memory test as they have 256gb of memory installed.  I've been able to get anywhere from 4-6 hosts patched a day using this script!


# PowerCLI Script to Patch Hosts
# Created by BLiebowitz on 3/4/2016

# Select which vCenter you want to connect to
Write-host "Select which vCenter to connect to:"
Write-Host ""
Write-Host "1. vc01"
Write-Host "2. vc02"
Write-Host "3. vc03"
Write-Host "4. vc04"
Write-Host "5. vc05"

$Ivcenter = read-host “Select a vCenter Server. Enter Number “

if ($Ivcenter –eq 1) {
$vcenter = "vc01"
} elseif ($Ivcenter -eq 2) {
$vcenter = "vc02"
} elseif ($Ivcenter -eq 3) {
$vcenter = "vc03"
} elseif ($Ivcenter -eq 4) {
$vcenter = "vc04"
} else {
$vcenter = "vc05"

write-host ""
Write-Host "You Picked: "$vcenter
write-host ""
start-sleep -s 3

# connect to selected vCenter
connect-viserver $vcenter

# List hosts to select
write-host ""
Write-host "Choose which vSphere host to Deploy Patches to:"
write-host "(it may take a few seconds to build the list)"
write-host ""
$IHOST = Get-VMhost | Select Name | Sort-object Name
$i = 1
$IHOST | %{Write-Host $i":" $_.Name; $i++}
$DSHost = Read-host "Enter the number for the host to Patch."
$SHOST = $IHOST[$DSHost -1].Name
write-host "you have selected" $SHOST"."

# Scan selected host
Scan-inventory -entity $SHOST

# Place selected host into Maintenance mode
write-host "Placing host in Maintenance Mode"
Get-VMHost -Name $SHOST | set-vmhost -State Maintenance

# Remediate selected host for Host Patches
write-host "Deploying VMware Host Critical & Non Critical Patches"
get-baseline -name *critical* | remediate-inventory -entity $SHOST -confirm:$false

# Remediate selected host for OMSA 8.2
write-host "Deploying OMSA 8.2"
get-baseline -name "OMSA 8.2" | remediate-inventory -entity $SHOST -confirm:$false

# Remove selected host from Maintenance mode
write-host "Removing host from Maintenance Mode"
Get-VMHost -Name $SHOST | set-vmhost -State Connected

# Display Popup when finished.
[System.Windows.Forms.MessageBox]::Show("The Patching for " + $SHOST + " is now complete..")

Hope you find this useful!

Ben Liebowitz, VCP, vExpert
NJ VMUG Leader

Go to top ↑