Configure VMs with a Custom Spec

It has been brought to my attention that not everyone knows the power of a VMware custom specification.

The custom spec will allow you to manage a bunch of different things.  It can join your VM to a domain, configure networking, license, and even install or configure software.  And the spec is able to be used over again. And over again.  So very handy. In my own lab I clone the custom spec before I deploy a new server, and tweak the IP address and then my spec is ready to use.  And, if I ever need to install that server again I have a spec to do it with quick and easy.

I have a number of VMware template articles that are very popular - for Win7, Win10, Win2k12, and Win2K16.  In fact I have a Centos Linux template that works very well with custom spec’s too.  In these articles I mention custom spec and what you should add to them but not much more.

I am going to show you how to create and exploit a custom spec in this article  and then attach this article to the template articles and hopefully this helps out everyone.

I should add that I have numerous times called Microsoft for support and they did not once complain about my config or that I used a custom spec.  Of course, the reason for that is behind the scenes sysprep is used.  I think using a custom spec is better as it is easier and once the spec is done much more accessible and reusable.

But lets get started.


You can find Customization Specification Manager on the Home page of the vSphere Web Client, almost in the middle.

This is where you can clone, or delete, or modify custom spec’s.  If you select it you will see something like below.

You can see I have two Windows and two Linux custom spec’s.  Generally I only clone and edit in this area and I create - if I need to create from scratch - while I am deploying a new VM.  But generally I don’t have to create from scratch as I can clone a Windows or Linux spec that is closest to what I need.

If you select a spec you will see additional options.

The arrow is pointing at the duplicate button but you likely recognize the delete, or edit, and there is also import / export. Be aware, if you export and import you should re-enter the passwords after import.

Deploy a VM from template

But what we are going to do is deploy a new VM and create from scratch a new custom spec so you see what goes into it.  I will also suggest some things along the way.  We are going to do a Win10 VM, but the process would be the same for Win2K16, or mostly similar for Linux.

So lets start by clicking on our Windows 10 template.

We can select New VM from This Template when we right + click. We now start a wizard that first asks for a VM name and location.

You can see above the name and folder I chose.

Next we chose cluster (always best to chose cluster and not host).

After that we chose the datastore.

The next screen is Clone Options and we do need to make some selections there.

By selecting Customize the operating system we will create a custom spec.

Creating a custom spec

On the next screen we will see the custom spec’s that fit the OS we are deploying.  So we only see two as they are the only Windows ones I have.

We can see by the arrow the option to create a new one. When we select it, the deploy wizard is minimized and put in the work in progress area and a new wizard starts.

You can see I have already named it and added a description.  It is good to put useful info in the description so you know more about the custom spec when you look at it in the future.

Next up we need to add the registration info.

Next is the computer name.  To make our custom spec very portable I always select the Use the VM name option.  This means I can use the spec with any VM that I deploy and the spec will use for a VM name what I select while deploying.

The next screen is for entering the Windows License - AKA the PID.  You also can make a decision for servers in this screen.  I am leaving it blank as I will license later.

Our next screen is setting the admin password.  I also enable the automatically log on once as you will see later for a good reason.

Next we select our timezone.

But on the next screen things get interesting.  It is where you can have things execute, for example I know customers that install software here like Office or other apps. We are going to add some Windows config things.

This is why we are going to let the custom spec log in once - to execute these two things.  The first disables power config, and the next put the boot timeout at 5 seconds.  Both don’t stick in the policy set on the template for some reason. If you want to execute scripts here make sure you path them out, and of course the scripts need to be in the template so you can execute them on the clone. Sort of scripts on the VM call out the big scripts on a network share somewhere is often what I see.

The next screen is network.

If you specify an IP address here the custom spec becomes only useful for the VM it is used to instantiate.  But in my case my desktop is going to be DHCP so the default is good here.  You can configure multiple network adapters if needed.

On the next screen we will enter the info so this new VM can join the network.

Note the format of domain and user name?  Make sure you use the same format!

On the next screen we see the option to generate a new SID and it is by default enabled.

We hit the Next button to move to the summary screen, or we can hit Finish. If you hit next you will see a summary.

Now we hit Finish.

Finish the deploy

We will be back at the place where we started but now we will see our new custom spec.

We select our new custom spec and hit Next.

We see our choices, and the spec that will be used.  So it all looks good for us.  BTW, if it wasn’t, you could back and select the right spec, or use the edit button to edit the spec to work for you.

We can watch the clone process.

Even when the clone is done, and the VM boots, it is not ready.  It will normally boot twice.  The second one for the customization. So lets take a break and let it finish.

BTW, while some of the customization runs, you can get a clue of it from the VMware Tools part of the Summary page where it says Executing scripts.

Test Time

Once the VM is deployed, and some amount of time is gone by we do some test checks to make sure it worked.  Especially if this is your first time.

The first is do we see the proper FQDN name in the Web Client?

And we do.  Plus, we see the VM is still logged on, which means that log on once config item worked.

If we did not see it, did you put the right administrator password in the custom spec? If you are not sure, then just edit the custom spec (via the applet in the Home page) and then deploy another VM.

The second test is did the VM join the domain correctly?

And it did.

If there is any issues we can check out a log that is created as part of the customization.  It is called guestcust.log and is found in c:\windows\temp\vmware-imc. Below is a sample snippet of it.


  • 3/26/18 - added the screenshot so you can see the executing scripts thing.  Just to show that the image customization is going on.


So I hope that this helps you understand how useful the guest customization spec is, and how to use it.  Remember the next time I deploy a Windows VM I will see the spec we created today and can use it.  So won’t have to build it, or modify it but just use it so very easy and quick.

BTW, if you every month, or every second month update your template, meaning things like VMware Tools, and patches there will not be much that is required once this VM is deployed.

As always, I love questions and comments so don’t hesitate to reach out.


=== END ===




6 thoughts on “Configure VMs with a Custom Spec

  1. Great article, again. I’m working with the DOD with vSphere 6.5 deployment and View 7.4. Trying to educate them on the benefits of Quickprep vs Sysprep. I’ve shared the VMware documentation but it’s hard to get the customer to overcome what they are used to which is Sysprep even though VMware developed Quickprep specifically for Linked-Clones deployment.

  2. thanks for the post, it very clear. I would like to know how to add one of installation application script to Run Once, can you advise on this how to? Thanks

    1. Hi Anthony,

      When you step through the customization wizard and hit the Commands to Run Once option , enter the command on the Enter a new command line and hit Add. I am using the HTML5 client in 6.7 U1 to do this. But it is similar in the other client.

      Does this help or not. I can get you a screenshot if that helps.


  3. Hi Michael,

    I created a customization file and then created a “New VM from This Template” from our Windows Server 2016 template. However, I get Operating System Not Found on boot. Any ideas? I will continue to research in the meantime.


    1. Hi Carla, this sounds like an interesting problem. If you convert our template to a VM will it boot? If so then anything you deploy from it should boot. If that doesn’t help, or if the template boots fine, then I think you need to call VMware support and see what they have to say. Please share with me what you learn!

      Sorry not more help,

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.