[VMWare] Device uses a controller that is not supported

Today I tried to deploy a Virtual Appliance from Bitnami on my ESXi server using ovftool:

ovftool.exe bitnami-xxx.vmx vi://192.168.0.100

But each time I had an error:

Device ‘VirtualDisk’ uses a controller that is not supported. This is a general limitation of the virtual machine’s virtual hardware version on the selected host.

What was funny, it was perfectly fine if I converted the virtual machine to OVA format and started it using… VirtualBox.

I googled a bit and found out that some people had that similar problems and what they did was to upgrade virtual hardware from version 4 to 7. It wasn’t a solution for me because I already had version 7 – so maybe the problem was that I had “too new” virtual hardware? I opened bitnami-xxx.vmx file with a text editor and there I had:

virtualHW.version = "4"

I changed it to “7” and voila – it worked!

[PowerShell snippet] Resolving hostname

Recently I’ve started to embrace PowerShell’s great possibilities, and as a result of that, I’ll post some of my “toys”.

On Unix-like operating system I’m using host command to resolve hostnames into IP’s and the other way. On Windows, there’s a nslookup tool, which works just like the Unix equivalent, but to get accustomed to PowerShell, I’ve decided to write a function, which uses internal command to do NS lookups.

Generally, to resolve a hostname you can use this one-liner:

[System.Net.Dns]::GetHostAddresses("devplant.net")

You can shorten it by declaring a short function.

function resolve( [string] $in ){
   [System.Net.Dns]::GetHostAddresses($in)
}

(Defining functions remember not to collide with pre-existing variable names)

But this is only one-way command – to resolve IP address into a hostname, you have to use other command:

[System.Net.Dns]::GetHostbyAddress("72.21.210.250")

To combine both functionalities, you can extend our function, using regular expression to do a naive recognition of IP addresses.

function resolve( [string] $in ){
	if ($in -match "(\d{1,3}\.){3}(\d{1,3})") {
		[System.Net.Dns]::GetHostbyAddress($in)
	} else {
		[System.Net.Dns]::GetHostAddresses($in)
	}
}

Now here’s how you can use it:

PS C:\Users\leafnode> resolve devplant.net

IPAddressToString : 91.192.224.142
Address           : 2397093979
AddressFamily     : InterNetwork
ScopeId           :
IsIPv6Multicast   : False
IsIPv6LinkLocal   : False
IsIPv6SiteLocal   : False

PS C:\Users\leafnode> resolve 72.21.210.250

HostName                Aliases           AddressList
--------                -------           -----------
210-250.amazon.com      {}                {72.21.210.250}

PS C:\Users\leafnode>

Fix for extensions incompatible with Firefox 3.5 (and any other)

Make compatibleYou want to try Firefox 3.5 but your favourite extensions are not compatible with the new version? There is a possible solution for this problem.

As in case of extension interface nothing much changed between Firefox 3.0.* and 3.5, it is possible that extension compatible with older version will work without any changes – except the maxVersion setting, which prevents Firefox from installing apparently incompatible extension. Manually, you’d have to download XPI file, decompress, edit settings, re-compress, and install from file. Quite cumbersome, but…

Extension MR Tech Toolkit allows you to tweak some of the extensions’ settings, including maxVersion, without any hassle. Just right-click on an incompatible extension, select “Make compatible” from the menu, and that’s it! After Firefox restarts, if extension really is compatible, it will be working fine.