Restart VMware Tools on all Windows VM’s


After reading the post on about the VMware Tools status “not running” and in particular the part about the preferred work around:

I find that restarting the VMware Tools Service in the guest OS always gets by the problem, but loggin into every single VM that reports the wrong status for it’s VMware Tools could be a bit of a drag. So I choose to do this remotely rather that logging on to each VM.

From any Windows workstation/server, open a command pompt and run:

sc \\{vm-name-or-ip-address} stop "VMTools"
sc \\{vm-name-or-ip-address} start "VMTools"

I thought that can be done via Powershell and the VI Toolkit. So I created the following script that will restart the VMware Tools service on every running Windows VM.

$vCenter = Read-Host "Enter the vCenter servername"

Connect-VIServer $vCenter

$Service = "VMtools"
$VMs = Get-VM | Where-Object {
        $_.PowerState -eq "PoweredON" `
        -and `
        $_.Guest.OSFullName -match "Windows"
foreach($VM in $VMs)
    Write-Host "-------------------------------------------"
    Write-Host "Restarting the VMware Tools Service on" $VM
        $Svc = Get-WmiObject -Computer $VM win32_service `
        -filter "name='$Service'"
            $Result = $Svc.StopService()
            sleep 5
            $Result = $Svc.StartService()
    Write-Host "Done.. "
    Write-Host "-------------------------------------------"

Disconnect-VIServer -Confirm:$false

This script generates the following output:


Other useful blog posts or kb articles on this subject:

Source for the restart service part in my script:

VI Toolkit: Patch an ESX host with VUM


This script will automate the following steps:

  • Enter Maintenance mode
  • Attach baselines
  • Scan Host and check Compliance
  • Remediate  Host
  • Detach baselines
  • Exit Maintenance mode

This is my first “trial & error” script with the VMware.VumAutomation snapin. If you have any tips, please leave a comment.

You can download the script here:

VI-Toolkit: Enable PXE boot for all VM’s in a particular folder

The following script enables PXE boot for al the VM’s in a particular folder. After running this script, the VM’s are set to boot only from PXE, so all other options are disabled. The original part of the script is created by LucD and posted on de VMTN forums. See the source for more information.


$VC = Connect-VIServer (Read-Host "Enter vCenter server") 

$folder = (Read-Host "Enter folder name") 

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.extraConfig += New-Object VMware.Vim.OptionValue
$spec.extraConfig[0].key = "bios.bootDeviceClasses"
$spec.extraConfig[0].value = "allow:net"

    $vms = Get-Folder -Name $folder | Get-VM
        foreach ($vm in $vms){
            (get-view ($vm).ID).ReconfigVM_Task($spec)}

Disconnect-VIServer -Confirm:$False

The script in action:image

If you want to return to the default settings, you can run the next script:


$VC = Connect-VIServer (Read-Host "Enter vCenter server") 

$folder = (Read-Host "Enter folder name") 

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.extraConfig += New-Object VMware.Vim.OptionValue
$spec.extraConfig[0].key = "bios.bootDeviceClasses"
$spec.extraConfig[0].value = "allow:hd,cd,fd"

    $vms = Get-Folder -Name $folder | Get-VM
        foreach ($vm in $vms){
            (get-view ($vm).ID).ReconfigVM_Task($spec)}

Disconnect-VIServer -Confirm:$False

Source: LucD @

VI Toolkit: Check VMware Configuration with Powershell


Hugo heeft het weer geflikt. Deze keer heeft hij een script gemaakt die alle ESX Servers vergelijkt en daar een mooi rapportje van maakt.

This Powershell script generates an overview of any items that are not available to every ESX server in a VMware cluster. These items might prevent your vm’s being vmotioned by DRS or restarted by HA. Pretty serious business, I’d say!

The items involved are:
1. datastores
2. LUNs (important when using Raw Device Mappings)
3. port groups

The output is a nicely formatted HTML page showing not only which items are misconfigured, but also where the are available and where they are absent.

Hieronder zie je een screenshot van de output:image

Het script kun je hier vinden:

VMware: Service Console Memory

Als je ESX 3.x standaard installeerd krijgt het Service Console 272 MB geheugen.


Via fdisk –l  kun je de partitie informatie opvragen. Zoals je ziet heeft deze ESX server een Swap partitie van 1600MB. 


Standaard is de Swap partitie 544MB (2*272mb van het Service Console).  Mocht de swap partitie inderdaad “maar” 544mb groot zijn, dan kun je het geheugen van het Service Console niet verhogen. Hoe je dit verder kan oplossen lees je hier:

Je kunt het gehugen van het Service Console op twee manieren aanpassen, via de de VIC of via de commandline.

Via de VIC

klik op properties.


Voer daarna de juiste waarde in (800MB is de max):



Vanaf het Service Console

Via het onderstaande commando kun je opvragen hoeveel geheugen er voor het Service Console geconfigureerd is.

[root@esxserver root]# cat /etc/vmware/esx.conf | grep -i "memSize"
/boot/memSize = "272"

Als je dit wilt ophogen naar 800MB kun je dat doen via het commando:

vmware-vim-cmd hostsvc/memoryinfo 838860800 (

Daarna even kijken of de settings is doorgevoerd.

[root@esxserver root]# cat /etc/vmware/esx.conf | grep -i "memSize"
/boot/memSize = "800"


Via de VI Toolkit:

$consoleMemMb = 800
Get-VMHost | Get-View | %{(Get-View -Id $_.ConfigManager.MemoryManager).ReconfigureServiceConsoleReservation($consoleMemMb*1mb)}
Thanks to LucD:

De bovenstaande code past de setting aan op al je ESX servers in je VirtualCenter.


En in de VIC kun je zien dat de settings is aangepast en een herstart nodig is.


VMware: Set VMware TimeSync option with the VI Toolkit

Ik was vandaag even met Gabrie van Zanten ( aan het brainstormen over het aanpassen van de Time synchronization optie, binnen de VMware Tools via de VI Toolkit.


Dit is uiteindelijk gelukt (met een beetje hulp van Niket en LucD

Je kunt het script op twee manieren gebruiken:

Het aan of uitzetten van deze optie op alle VM’s kan via het onderstaande script.

$vCenter = ”

Connect-VIServer $vCenter


$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.SyncTimeWithHost = $True (or $False if you want to disable it)

Get-VM | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)} # For al VMs

Disconnect-VIServer -Confirm:$False


Wil je dit op een specifieke VM uitvoeren dan gebruik je de volgende Get-VM regel:

Get-VM -Name $vmname | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)} # VM with name vmname.

Je moet alleen dan wel de variable $vmname aanmaken.

Via het volgende commando kun je de actie controleren.

Get-VM | Get-View | %{Write-Host $_.Name $_.Config.Tools.syncTimeWithHost}

Script: Set-VMVideoAccLevel

Hugo Peeters van heeft een powershell script gemaakt voor het instellen van de video hardware acceleration level. Zoals je weet staat dit bij een standaard installatie van Windows Server 2003 (en ook andere versies) standaard op none.


Via het script van Hugo kun je in een keer deze setting aanpassen op alle VM’s (Windows 2003 servers en deze moeten wel aan staan). Zie de onderstaande quote van Hugo:

I have created a simple, fire-and-forget script that sets the Hardware Video Acceleration Level for all your (Windows Server 2003 and Powered On) VM’s to Full. This way you can always enjoy smooth mouse movements when working in the console!

Het script kun je hier downloaden:

VI Toolkit: Set VMware Tools Upgrade Policy


Tijdens het googlen naar informatie over de VI Toolkit kwam ik het onderstaande script tegen.

Connect-VIServer <VirtualCenterServer>
#  NAME: set-VMautoUpdate.ps1
#  AUTHOR: angoletti1 / LucD


$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"

Get-VM | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)}


Via dit script kun je in één keer alle VM’s aanpassen.


VI Toolkit: Create an Overview Of All cmdlets


Het volgende commando genereerd een html file met daarina een overzicht van alle VI cmdlets.

Get-Command -PSSnapin VMware.VimAutomation.Core | ConvertTo-Html –Property CommandType,Name,Definition -title "VIToolkit" > D:\vitoolkit_cmdlets.html

Voer deze code wel  uit als een oneliner!


Het volgende overzicht wordt gegenereerd:


Nu heb je in een oogopslag een overzicht van alle cmdlets.

VI-Toolkit: Start VM’s within a Resource Pool script.

Ik ben sinds kort bezig met het bestuderen van Powershell en dan vooral met de VI-Toolkit. In mijn lab omgeving thuis maak ik bepaalde omgevingen binnen een resource pool. Ik heb bijvoorbeeld een Server 2003 lab waarin een klein Windows 2003 domain draait. Omdat ik nogal wat verschillende labs heb, maak ik voor elk lab een aparte Recource Pool aan. Om het starten van zo’n lab te versimpelen heb ik het onderstaande script gemaakt.


In het eerste blok van het script wordt er verbinding gemaakt met de VC Server. Via de cmd-let

Connect-VIServer de variable $hostname word gevuld d.m.v. een vraag. Dit geld ook voor de variable $rp.

Nadat de variabelen zijn gevuld en er verbinding is gemaakt met de VC Server wordt het laatste blok uitgevoerd. 


Als je dit script uitvoert vraagt hij om de volgende input:

What host do you want to connect to?: w2003vc (voer hier de naam van je virtualcenter server in).

Enter Resource Pool: srv2003 (voer hier de naam van de resource pool in).

Vervolgens worden alle VM’s die in de resource pool srv2003 zitten opgestart.


In VirtualCenter zie je ook het e.e.a. starten:


Om dit script te kunnen gebruiken als Shutdown script verander je de volgende regel:

{Start-VM | $vm} in {Shutdown-VMGuest | $vm} (Deze optie werkt alleen als de VMware Tools actief zijn. Je kunt ook Stop-VM gebruiken om de VM uit te zetten).