Monday, May 16, 2016

VMWare Tools and Drivers in Task Sequence

Overview


I have many virtual systems in my environment. Most running the VMWare Hypervisor in ESXi, Workstation, Horizon View etc. I've mandated as my firm's EUC (End User Computing) Architect that it all sources back to OSD in ConfigMgr. To make this easier I packaged up the VMWare Tools as well as handle drivers (VMXNET3 anyone?).

Life is easier now as VMWare has de-coupled the Tools from Workstation or ESXi and can be downloaded directly. They have released several already since doing so and are on 10.0.8 as of this writing.


Application

After grabbing the ISO from VMWare, extract it and upgrade/install a VM with it. Once that is done setup an application within ConfigMgr however your policy is. For me we use supercedence so older ones are present as well.

With two deployment types. One for 32-Bit and one for 64-Bit.
64-Bit
 setup64.exe /s /v/qn ADDLOCAL=ALL REBOOT=ReallySuppress  
32-Bit
 setup.exe /s /v/qn ADDLOCAL=ALL REBOOT=ReallySuppress   
For the detection method just use the MSI GUID.  You can find this via many methods such as in the VM via the registry at HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. This also is what becomes the Uninstall program. For 10.0.8 it is
 {F4B2C3ED-A9F2-4B8B-92C8-2688CCF15D02}  
which would make the uninstall program for both 32-Bit and 64-Bit
 MsiExec.exe /x {F4B2C3ED-A9F2-4B8B-92C8-2688CCF15D02} /qn /norestart  
On the requirements tab you can use something like a custom  'Computer Model' = VMWare Virtual Platform' and built-in Operating System equals whats applicable such as 'All Windows 7 (64-Bit)'.


You can advertise this to all systems in your fleet as available or required as well as use in an OSD Task Sequence. Whatever you want.


I wish there was a way within the VM to determine which platform its one. Workstation, View, ESXi. This would make targeting apps to a collection easier. It may make sense to update Workstation with the latest, but keep the ESXi ones on what's provided with it for example.



Drivers

So how do we get the drivers into SCCM? Real easy actually. Go to your VM and look in 
%PROGRAMFILES%\Common Files\VMware\Drivers. Take the contents of this folder and put them into a driver package, or however, you do drivers. Then add as a step to an OSD. Like any other driver package, do a WMI query for the model (VMWare Virtual Platform) or manufacturer (VMWare, Inc.). I talked about how I handle drivers here.

For the driver package note that the contents of this folder are different for W7 (Server 2008 R2) and down vs Windows 8 (Server 2012) and up. One driver, the mouse driver is different. I have two packages as I have not fully vetted a merged one. PNPID and version should handle it in one package but I have not tested in all instances yet. With DP's deduping it's not a big deal actually.


Bonus

I will try to keep track of the GUIDs for all the versions and post them here as they come out. If you have older ones please pass them on and I will include them. Note I am only doing the 64-Bit ones below after about 10.2.0 when they split.

 12.3.0 -  {AF174E64-22CF-4386-A9EC-73F285739998}
 12.2.0 -  {A14655C8-5589-4CF6-BCDE-DFFB9A9BF17C}
 12.1.5 -  {65A35679-0C08-4C9A-9AC3-46417F198653}
 12.1.0 -  {A3631D35-CFA5-45F6-A65E-DAFA81C4CBE6}
 12.0.6 -  {CB7FFC88-0CB2-48DD-9D7A-089D216607F8}
 12.0.5 -  {B6018ED0-EF9F-4432-A755-9029562DD15E}
 12.0.0 -  {AC968A64-CCC0-4916-A426-BA05F38AC28B}
 11.3.5 -  {1FF5D624-5515-4343-837A-E54C101573E6}
 11.3.0 -  {4FE02FF2-2194-4E1D-8B04-F934655966F9}
 11.2.6 -  {E6E6404B-1F59-4EAB-A1B9-EA1A33B71159}
 11.2.0 -  {61ABD5FF-2D98-4C4A-9E36-187C882317CB}
 11.1.0 -  {4FE2D79D-BB1C-4F45-BDBC-192D37C3AE40}
 11.0.6 -  {D533345C-7F8D-4807-AE80-E06CE2045B0E}
 11.0.5 -  {25932044-BBC8-444F-ACF4-7E508054FA12}
 11.0.1 -  {742FCBAF-EE5D-48B2-9E95-DA0513B79570}
 11.0.0 -  {7B09CBED-1199-4BA3-9948-A28DB7C9C396}
 10.3.10 - {01767101-A688-4A95-9C83-6DED9EB6735D}
 10.3.5 -  {F32C4E7B-2BF8-4788-8408-824C6896E1BB}
 10.3.0 -  {1D92E489-0CFA-4F37-AC54-BD5EB372A2D4}
 10.2.5 -  {6D158FDD-2E20-4C54-A271-4D2CE2C39905}
 10.2.1 -  {092CAFE8-7A43-4C32-82C6-A5547F93417F}
 10.2.0 -  {766355C9-1851-4890-9C1F-9F043A43AFCE}
 10.1.15 - {7CFC363A-72CE-409C-97C2-E497A1D831FC}
 10.1.10 - {EEAD1455-1743-4746-8AEA-C1956133B736}
 10.1.7 -  {45147181-CF69-4C8C-81CB-0FC96F170758}
 10.1.5 -  {30B36D27-24D7-4C18-996D-9A23B9235707}
 10.1.0 -  {507F5BFC-6DFE-43CF-A552-DABE868FCDFE}
 10.0.12 - {FC5F4DCF-B54A-435E-8B0D-737BB373ED69} (XP/Server 2003 Only)
 10.0.9 -  {7595A850-FE4D-4273-84FA-9CC1068AFF7A}
 10.0.8 -  {F4B2C3ED-A9F2-4B8B-92C8-2688CCF15D02} 
 10.0.6 -  {ECD203D2-312B-4EC7-9D55-778A81C6BDE9}
 10.0.5 -  {0C69DF99-B17A-4490-910B-64811AEA2F48}  


-Kevin

Virtual Systems Collection

I have many collections around different system types as I am sure you do. Specifcally for platforms I have many such as:
  • All Workstations
  • All Servers
  • All Systems
  • All Desktops
  • All Mobile Devices
This simple query will identify the virtual systems. By using the relevant above collection as the limiting collection you can see whats virtual.
  • All Workstations
  • All Workstations - Virtual
  • All Servers
  • All Servers - Virtual
  • All Systems
  • All Systems - Virutal
  • All Desktops
  • All Desktops - Virtual
  • All Mobile Devices
  • All Mobile Devices - Virtual
Even change the query to a not equal (!= or use 'False') in order to collect all physical systems on their own.

 select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.IsVirtualMachine = "True"