Introduction
Finally, I found some spare time to upgrade webCommander from 2.0 to 4.0. To make this work, I first had to replace my Windows 2008 R2 to Windows 2012 R2 to upgrade PowerShell to 4.0. PowerShell could be upgraded without OS replacement but it was a good opportunity to try 2012 R2 out.
With webCommander 4.0 release, Jerry (@9whirls) has written an excellent automatic installation script (can be found here) that downloads all pre-requisites from the internet, installs IIS…etc. Since my VM was in private network that didn’t have access to outside network, I first tried it by configuring proxy connection within IE setting.
However, got an error message when I ran the script that is attached below.
Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (407) Proxy Authentication Required." At C:\Users\administrator\Desktop\setup.ps1:66 char:2 + $webClient.downloadfile($packageUrl, "C:\WebCommander\$packageName") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : WebException
Throughout this blog post, I will aid people who’s trying to install webCommander 4.0 but the VM is in a private network that doesn’t have access to internet.
Script Modification
As the script was already using WebClient object, all I had to create was a new WebProxy object to parse the proxy IP address and credentials. In the parameter field, I added in:
- IP Address or hostname of the proxy server. Bear in mind, it requires the appropriate port to be specified in the end. Example is attached below.
- Username/password that has the access to the proxy server.
The change needs to be made are in bold and italic below.
Parameter
Param ( $packageUrl = 'https://github.com/vmware/webcommander/archive/master.zip', $authentication = 'Windows', $adminPassword = '', # administrator password of the windows machine where webcommander is located $defaultPassword = '', # default password used to communicate with vSphere, VM and remote machine $proxyAddress = '', # IP or hostname of the proxy server. Include the port number in the end. For example, 'proxytest.test.com:3128' $proxyUserName = '', $proxyUserPassword = '' )
Once 3 parameters were added in, used one if/else statement to ensure parameters for proxy configuration were entered in. After that, all I had to do was:
- Define one WebProxy object with proxy server address in the parameter field.
- Define a PSCredential object also from the parameter above.
- Use above defined two objects information for the WebClient object.
Again, modification required are in bold and italic below.
WebClient + WebProxy
if ($proxyAddress -and $proxyUserName -and $proxyUserPassword) { $webClient = New-Object System.Net.WebClient $webProxy = New-Object System.Net.WebProxy($proxyAddress, $true) $proxyCredential = New-Object System.Management.Automation.PSCredential($proxyUserName, (ConvertTo-SecureString $proxyUserPassword -AsPlainText -Force)) $webProxy.Credentials = $proxyCredential $webClient.Proxy = $webProxy } else { $webClient = new-object system.net.webclient }
Once the modification was made, ran the script and wallah, it worked!
Navigated to webCommand URL and was successful.
Wrap-Up
In near future, I will commit the change above so that whoever requires proxy to install webCommander wouldn’t need to make a change above.
Hope this blogs helped and always welcome to ping me for any issues or suggestions.