﻿# encoding: utf-8
# api: powershell
# title: vmrc remote connector
# description: Connects with VMRC to an ESX Farm. Now with option to allow multiple connections to one vm
# version: 0.1
# type: script
# author: Patrick
# license: CC0
# x-poshcode-id: 1527
# x-archived: 2016-05-20T09:58:30
# x-published: 2010-12-13T23:45:00
#
#
#region Global var
$script:viserver = "esx.local"
$script:vmrc = "C:\Program Files\VMwareVMRC\vmware-vmrc.exe"
$script:vm = ""
$script:vmt = ""
$script:vmcon = ""
$script:selectvm = ""
$script:multiple = $FALSE #Set to TRUE for multiple VMRC Instances
#endregion

$vmcon = Connect-VIServer -Server $script:viserver -Protocol https -Credential (Get-Credential)
if (!$vmcon) {
	Write-Output "No Connection!"
	break
}

$script:vmt = Get-VM 

function GenerateForm {

#region Import the Assembles
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btnConnect = New-Object System.Windows.Forms.Button
$txtEntity = New-Object System.Windows.Forms.TextBox
$chkIP = New-Object System.Windows.Forms.CheckBox
$comboBox1 = New-Object System.Windows.Forms.ComboBox
#endregion Generated Form Objects

$btnConnect_OnClick= 
{

#region Check User Inputs
if (!$txtEntity.Text -eq "" -and !$comboBox1.Text -eq "") 
{
	Write-Host "Bitte nur eine Option anwählen!"
	break
} 
#endregion

if ($txtEntity.Text -eq "") {
	$script:selectvm = $comboBox1.Text
} else { 
	$script:selectvm = $txtEntity.Text
}

if ($chkIP.Checked) { 
		$script:chk = "FALSE"

		foreach ($script:vm in $script:vmt) {
			$vmg = Get-VMGuest $script:vm
			
			if ($vmg.IPAddress -eq $script:selectvm) {
				$script:chk = ""
				break
			} 
		}
	}
	
If (!$script:selectvm -eq "" -and !$chkIP.Checked)  {
		$script:vm = Get-VM $script:selectvm
	
		if($script:vm.Count) {
			Write-Output "Define only one host!"
			break
		} else {
			if (!$script:vm.id) { 
				Write-Output "No VM found"
				$script:chk = "FALSE";
				break
			}

		}
	}
	
	if (!$script:chk) {
		if (!$script:vm -eq "") {
			if (!($script:gvm = Get-View $script:vm.id) -eq "") {
					if (($multiple) -or (!($multiple) -and $script:gvm.Runtime.NumMksConnections -lt 1)) {
						$vmrcargs = '-h ' + $script:vm.Host + ' -m "' + $script:gvm.Config.Files.VmPathName + '"'
						[Diagnostics.Process]::Start($script:vmrc, $vmrcargs)
					}
 			}
		}
	}
}

#----------------------------------------------
#region Generated Form Code
$form1.Text = 'VMware Remote Connector'
$form1.Name = 'form1'
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 193
$System_Drawing_Size.Width = 281
$form1.ClientSize = $System_Drawing_Size
$form1.FormBorderStyle = 1

$btnConnect.TabIndex = 2
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnConnect.Size = $System_Drawing_Size
$btnConnect.Name = 'btnConnect'
$btnConnect.UseVisualStyleBackColor = $True

$btnConnect.Text = 'Verbinden'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 97
$System_Drawing_Point.Y = 115
$btnConnect.Location = $System_Drawing_Point

$btnConnect.DataBindings.DefaultDataSourceUpdateMode = 0
$btnConnect.add_Click($btnConnect_OnClick)

$form1.Controls.Add($btnConnect)

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 17
$txtEntity.Location = $System_Drawing_Point
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 261
$txtEntity.Size = $System_Drawing_Size
$txtEntity.DataBindings.DefaultDataSourceUpdateMode = 0
$txtEntity.Name = 'txtEntity'
$txtEntity.TabIndex = 1

$form1.Controls.Add($txtEntity)

$chkIP.TabIndex = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 19
$System_Drawing_Size.Width = 160
$chkIP.Size = $System_Drawing_Size
$chkIP.Name = 'chkIP'
$chkIP.UseVisualStyleBackColor = $True

$chkIP.Text = 'IP Adresse'
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 43
$chkIP.Location = $System_Drawing_Point

$chkIP.DataBindings.DefaultDataSourceUpdateMode = 0

$form1.Controls.Add($chkIP)

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 73
$comboBox1.Location = $System_Drawing_Point
$comboBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$comboBox1.FormattingEnabled = $True
$comboBox1.Name = 'comboBox1'
$comboBox1.TabIndex = 0
#Get all VM
foreach ($cvm in $script:vmt) {
	$comboBox1.Items.Add($cvm.Name) | Out-Null
}
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 261
$comboBox1.Size = $System_Drawing_Size

$form1.Controls.Add($comboBox1)

#endregion Generated Form Code

#Show the Form
$form1.ShowDialog()| Out-Null

}

GenerateForm
