# Check and load vSphere PowerCLI snap-in $snapin_result = get-pssnapin -registered -Name VMware.VimAutomation.Core if ($snapin_result) { Add-PsSnapin VMware.VimAutomation.Core } else { [System.Windows.Forms.MessageBox]::Show("Missing VMware.VimAutomation.Core snap-in, which contains cmdlets for managing vSphere.`n`nPlease download and install vSphere PowerCLI from VMware site first." ," vSphere PowerCLI Required", 'OK', 'Error') Exit } #Function to import vm's. Is called when the import button is pressed Function import_vms() { #Ask to start (or not) the vm import. $result = [System.Windows.Forms.MessageBox]::Show('Do you want to add '+$vm.SelectedItems+' ?', 'Warning', 'YesNo', 'Warning') # If result is Yes if ($result -eq 'Yes') { $status_text.Text = "VM import started" #Edit VMs before importing If ($reconfig.Checked) { $status_text.Text = "VM reconfigure started" foreach($vm_to_add in $vm.SelectedItems) { $importvmvmx = $vm_to_add.SubItems[2].Text $importvmvmxsplit = $importvmvmx.split("\") $importvmvmxfile = $importvmvmxsplit[5] #download vmx file New-Item -ItemType Directory -Force -Path c:\temp copy-datastoreitem $importvmvmx c:\temp #edit vmx $file = 'c:\temp\'+$importvmvmxfile $filecontent = Get-Content $file $newfilecontent = $filecontent | Foreach-Object { $_ -replace '^uuid.action.+$', 'uuid.action = "keep"' ` -replace '^ethernet0.addressType.+$', 'ethernet0.addressType = "static"' } #add uuid If (!($newfilecontent | Select-String -pattern "uuid.action")) { $newfilecontent += 'uuid.action = "keep"' } #add static mac If (!($newfilecontent | Select-String -pattern '^ethernet0.address =')) { #read current mac $mac = $filecontent | Where {$_ -match '^ethernet0.generatedAddress.+$'} $macaddr = $mac.split('"') $macaddress = $macaddr[1] $newfilecontent += 'ethernet0.address = "'+$macaddress+'"' } #save modified vmx $newfilecontent | Set-Content $file #upload vmx copy-datastoreitem c:\temp\$importvmvmxfile $importvmvmx } $status_text.Text = "VM reconfigure finished" } #ADD VM foreach($vm_to_add in $vm.SelectedItems) { $importvmname = $prefix.Text+$vm_to_add.SubItems[0].Text $importvmlun = $vm_to_add.SubItems[1].Text $status_text.Text = $importvmname + " importing" New-VM -Name $importvmname -VMFilePath $importvmlun -VMHost $esxserver.SelectedItem -Location $folder.SelectedItem -RunAsync $status_text.Text = $importvmname + " imported" } $status_text.Text = "VM import Finished" #Set VLAN (Network) If ($reconfig_network.Checked) { $status_text.Text = "Starting VLAN config" Start-Sleep -s 5 $vlan = $networkname.SelectedItem foreach($vm_to_add in $vm.SelectedItems) { $importvmname = $prefix.Text+$vm_to_add.SubItems[0].Text $status_text.Text = $importvmname + " vlan config" Get-Cluster $cluster.SelectedItem | Get-VM $importvmname | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $vlan -Confirm:$false } $status_text.Text = "VLAN config finished" } #POWERON VM If ($poweron.Checked) { $status_text.Text = "Starting VM's" Start-Sleep -s 5 foreach($vm_to_add in $vm.SelectedItems) { $importvmname = $prefix.Text+$vm_to_add.SubItems[0].Text $status_text.Text = $importvmname + " starting" Get-Cluster $cluster.SelectedItem | Get-VM $importvmname | Start-VM -RunAsync } $status_text.Text = "VM's started" } $status_text.Text = "VM import ready" } else { $status_text.Text = "VM import not started" } } #End Function # Funtion to login into vCenter Function do_login() { $Form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor $status_text.Text = "Connecting to vCenter" $login_result = connect-viserver -server $vcenter.Text -user $username.Text -password $password.Text -WarningAction SilentlyContinue $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow # check the login result if ($login_result) { $status_text.Text = "Connected" $username.BackColor='lightgreen' $password.BackColor='lightgreen' $status_text.Text = "Retrieving Clusters" $Form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor Get-Cluster | ForEach-Object {[void] $cluster.Items.Add($_)} if ($cluster.Items.Count -gt 0) {$status_text.Text = "Clusters retrieved"} else {$status_text.Text = "Failed to retrieve Clusters"} $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow } else { $status_text.Text = "Connection Failed" $username.BackColor='red' $password.BackColor='red' } } #End Function #Function called when cluster select menu is changed Function cluster_IndexChanged() { $add.Enabled = $False $retrieve.Enabled = $False $reconfig_network.Enabled = $false $networkname.Enabled = $false $reconfig_network.Checked = $false $networkname.Text = "" $networkname.Items.Clear() $folder.Enabled = $false $reconfig_folder.Checked = $false $folder.Text = "" $folder.Items.Clear() $reconfig_folder.Enabled = $false $Form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor $status_text.Text = "Retrieving ESXhosts" $esxserver.Text = "" $esxserver.Items.Clear() $lun.Items.Clear() $lun.Text = "" $vm.Items.Clear() get-cluster $cluster.SelectedItem | Get-VMHost | ForEach-Object {[void] $esxserver.Items.Add($_)} if ($esxserver.Items.Count -gt 0) {$status_text.Text = "ESXhosts retrieved"} else {$status_text.Text = "Failed to retrieve ESXhosts"} $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow } #End Function #Function called when ESXserver select menu is changed Function esxserver_IndexChanged() { $add.Enabled = $False $reconfig_network.Enabled = $true $networkname.Enabled = $false $reconfig_network.Checked = $false $networkname.Text = "" $networkname.Items.Clear() $reconfig_folder.Enabled = $true $folder.Enabled = $false $reconfig_folder.Checked = $false $folder.Text = "" $folder.Items.Clear() $Form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor $status_text.Text = "Retrieving Datastores" $vm.Items.Clear() $lun.Items.Clear() $lun.Text = "" Get-Cluster $cluster.SelectedItem | Get-VMHost | select -First 1 | Get-Datastore | ForEach-Object {[void] $lun.Items.Add($_)} if ($lun.Items.Count -gt 0) {$status_text.Text = "Datastores retrieved"} else {$status_text.Text = "Failed to retrieve Datastores"} $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow $retrieve.Enabled = $True } #End Function #Function called when network checkbox is clicked Function reconfig_network() { If ($reconfig_network.Checked) { $networkname.Text = "" $networkname.Items.Clear() $networkname.Enabled = $true Get-VirtualPortgroup -VMHost $esxserver.SelectedItem | Sort-Object Name | ForEach-Object {[void] $networkname.Items.Add($_.Name)} $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow } else { $networkname.Text = "" $networkname.Items.Clear() $networkname.Enabled = $False } } #End Function #Function called when VMfolder checkbox is clicked Function reconfig_folder() { If ($reconfig_folder.Checked) { $folder.Text = "" $folder.Items.Clear() $folder.Enabled = $true get-folder -location (Get-Datacenter -VMHost $esxserver.SelectedItem) -Type "VM" | Sort-Object Name | ForEach-Object {[void] $folder.Items.Add($_.Name)} } else { $folder.Text = "" $folder.Items.Clear() $folder.Enabled = $False } } #End Function #Function called when reconfi vmname checkbox is clicked Function reconfig_name() { If ($reconfig_name.Checked) { $prefix.Enabled = $true } else{ $prefix.Clear() $prefix.Enabled = $False } } #End Function #Function to retrieve vm's Function retrieve_vms() { $add.Enabled = $False $vm.Items.Clear() $Form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor $status_text.Text = "Retrieving VM's" foreach($lun_to_scan in $lun.SelectedItems) { $ds = Get-Cluster $cluster.SelectedItem | Get-VMHost | select -First 1 | Get-Datastore $lun_to_scan | %{Get-View $_.Id} $dsBrowser = Get-View $ds.browser $SearchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec $SearchSpec.matchpattern = "*.vmx" $DatastorePath = "[" + $ds.Summary.Name + "]" $SearchResult = $dsBrowser.SearchDatastoreSubFolders($DatastorePath, $SearchSpec) | where {$_.FolderPath -notmatch ".snapshot"} | %{$_.FolderPath + ($_.File | select Path).Path} ##$ds = (Get-Datastore $lun_to_scan).DatastoreBrowserPath ##$SearchResult = (Get-ChildItem -Recurse -Path $ds -Include *.vmx).FullName foreach($VMXFile in $SearchResult) { $vmdetails = ((($VMXFile.split("]")).split("[")).split(" ")).split("/") $vmlun = $vmdetails[1] $vmlunfolder = $vmdetails[3] $vmvmxfile = $vmdetails[4] $vmvmxfilesplit = $vmvmxfile.split(".") $vmname = $vmvmxfilesplit[0] $lunbrowserpath = (get-datastore $vmlun).datastorebrowserpath $vmstore = $lunbrowserpath+"\"+$vmlunfolder+"\"+$vmvmxfile $ListViewItem = New-Object System.Windows.Forms.ListViewItem($vmname) $ListViewItem.Subitems.Add($VMXFile) | Out-Null $ListViewItem.Subitems.Add($vmstore) | Out-Null $vm.Items.Add($ListViewItem) | Out-Null } } if ($vm.Items.Count -gt 0) {$status_text.Text = "VM's retrieved"} else {$status_text.Text = "Failed to retrieve VM's"} $Form.Cursor = [System.Windows.Forms.Cursors]::Arrow } #End Function # Building the Form Function Generate-Form { Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # Main Form $Form = New-Object System.Windows.Forms.Form $Form.Text = "Building your own VMware SRM" $Form.Size = New-Object System.Drawing.Size(415,800) $Form.StartPosition = "CenterScreen" $Form.FormBorderStyle = 'Fixed3D' $Form.MinimizeBox = $False $Form.MaximizeBox = $False $Form.WindowState = "Normal" $Form.Topmost = $True #set icon for form using Base64 $base64IconString = "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" $iconimageBytes = [Convert]::FromBase64String($base64IconString) $ims = New-Object IO.MemoryStream($iconimageBytes, 0, $iconimageBytes.Length) $ims.Write($iconimageBytes, 0, $iconimageBytes.Length); $logo = [System.Drawing.Image]::FromStream($ims, $true) $Form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ims).GetHIcon()) $pictureBox = new-object Windows.Forms.PictureBox $pictureBox.size = New-Object System.Drawing.Size(40,40) $pictureBox.sizemode = "StretchImage" $pictureBox.Location = New-Object System.Drawing.Size(340,30) $pictureBox.Image = $logo $form.Controls.Add($pictureBox) $groupBox = New-Object System.Windows.Forms.GroupBox #create the group box $groupBox.Location = New-Object System.Drawing.Size(15,15) #location of the group box (px) in relation to the primary window's edges (length, height) $groupBox.size = New-Object System.Drawing.Size(375,100) #the size in px of the group box (length, height) $groupBox.text = " vCenter Server Login " #labeling the box $Form.Controls.Add($groupBox) #activate the group box $Label_Username = New-Object System.Windows.Forms.Label $Label_Username.Location = New-Object System.Drawing.Size(20,50) $Label_Username.Size = New-Object System.Drawing.Size(140,20) $Label_Username.Text = "DOMAIN\UserName" $groupbox.Controls.Add($Label_Username) $Label_Password = New-Object System.Windows.Forms.Label $Label_Password.Location = New-Object System.Drawing.Size(165,50) $Label_Password.Size = New-Object System.Drawing.Size(140,20) $Label_Password.Text = "Password" $groupbox.Controls.Add($Label_Password) # vCenter Server #$server = Get-ItemProperty -Path "HKCU:\Software\VMware\VMware Infrastructure Client\Preferences" -Name "RecentConnections" $vcenter = New-Object System.Windows.Forms.ComboBox $vcenter.Location = New-Object System.Drawing.Size(20,20) $vcenter.Size = New-Object System.Drawing.Size(300,20) $vcenter.DropDownHeight = 200 #$vcenter.Text = $server.RecentConnections #ForEach($Item in $server.RecentConnections.Split(",")){ #[void] $vcenter.Items.Add($Item) #} #$vcenter.SelectedIndex = 0 $groupbox.Controls.Add($vcenter) # Username & password $username = New-Object System.Windows.Forms.TextBox $username.Location = New-Object System.Drawing.Size(20,70) $username.Size = New-Object System.Drawing.Size(140,20) $groupbox.Controls.Add($username) $password = New-Object System.Windows.Forms.MaskedTextBox $password.PasswordChar = '*' $password.Location = New-Object System.Drawing.Size(165,70) $password.Size = New-Object System.Drawing.Size(140,20) $groupbox.Controls.Add($password) # Login Button $login = New-Object System.Windows.Forms.Button $login.Location = New-Object System.Drawing.Size(310,67) $login.Size = New-Object System.Drawing.Size(50,23) $login.Text = "Login" $groupbox.Controls.Add($login) $login.Add_Click({do_login}) $Label_cluster = New-Object System.Windows.Forms.Label $Label_cluster.Location = New-Object System.Drawing.Size(20,125) $Label_cluster.Size = New-Object System.Drawing.Size(110,20) $Label_cluster.Text = "Target Cluster" $Form.Controls.Add($Label_cluster) $cluster = New-Object System.Windows.Forms.ComboBox #creating the dropdown list $cluster.Location = New-Object System.Drawing.Size(150,125) #location of the drop down (px) in relation to the primary window's edges (length, height) $cluster.Size = New-Object System.Drawing.Size(225,20) #the size in px of the drop down box (length, height) $cluster.DropDownHeight = 200 #the height of the pop out selection box $Form.Controls.Add($cluster) #activating the drop box inside the primary window $Label_esxserver = New-Object System.Windows.Forms.Label $Label_esxserver.Location = New-Object System.Drawing.Size(20,155) $Label_esxserver.Size = New-Object System.Drawing.Size(110,20) $Label_esxserver.Text = "Target ESXhost" $Form.Controls.Add($Label_esxserver) $esxserver = New-Object System.Windows.Forms.ComboBox $esxserver.Location = New-Object System.Drawing.Size(150,155) $esxserver.Size = New-Object System.Drawing.Size(225,20) $esxserver.DropDownHeight = 200 $Form.Controls.Add($esxserver) $Label_lun = New-Object System.Windows.Forms.Label $Label_lun.Location = New-Object System.Drawing.Size(20,180) $Label_lun.Size = New-Object System.Drawing.Size(110,20) $Label_lun.Text = "Select Datastore(s)" $Form.Controls.Add($Label_lun) $lun = New-Object System.Windows.Forms.ListBox $lun.Location = New-Object System.Drawing.Size(20,200) $lun.Size = New-Object System.Drawing.Size(360,120) $lun.SelectionMode = "MultiExtended" $Form.Controls.Add($lun) $retrieve = New-Object System.Windows.Forms.Button $retrieve.Location = New-Object System.Drawing.Size(20,325) $retrieve.Size = New-Object System.Drawing.Size(140,23) $retrieve.Text = "Retrieve VM list" $Form.Controls.Add($retrieve) $retrieve.Enabled = $False $retrieve.Add_Click({retrieve_vms}) $cluster.add_SelectedIndexChanged({cluster_IndexChanged}) $esxserver.add_SelectedIndexChanged({esxserver_IndexChanged}) $Label_vm = New-Object System.Windows.Forms.Label $Label_vm.Location = New-Object System.Drawing.Size(20,360) $Label_vm.Size = New-Object System.Drawing.Size(150,20) $Label_vm.Text = "Select Virtual Machine(s)" $Form.Controls.Add($Label_vm) $vm = New-Object System.Windows.Forms.Listview $vm.Location = New-Object System.Drawing.Size(20,380) $vm.Size = New-Object System.Drawing.Size(360,140) $vm.View = 'Details' $vm.FullRowSelect = $true $vm.MultiSelect = $true $vm.Columns.Add("VM", 150) | Out-Null $vm.Columns.Add("LUN") | Out-Null $vm.Columns.Add("VMStore") | Out-Null $Form.Controls.Add($vm) $vm.add_SelectedIndexChanged({$add.Enabled= $True}) $groupBox_options = New-Object System.Windows.Forms.GroupBox #create the group box $groupBox_options.Location = New-Object System.Drawing.Size(15,530) #location of the group box (px) in relation to the primary window's edges (length, height) $groupBox_options.size = New-Object System.Drawing.Size(375,195) #the size in px of the group box (length, height) $groupBox_options.text = " Options " #labeling the box $Form.Controls.Add($groupBox_options) #activate the group box #This creates a checkbox for Reconfigure VM's $reconfig = New-Object System.Windows.Forms.Checkbox $reconfig.Location = New-Object System.Drawing.Size(20,20) $reconfig.Size = New-Object System.Drawing.Size(180,20) $reconfig.Text = "Keep UUID and MAC Address" $reconfig.Checked = $true $groupBox_options.Controls.Add($reconfig) $reconfig_network = New-Object System.Windows.Forms.Checkbox $reconfig_network.Location = New-Object System.Drawing.Size(20,50) $reconfig_network.Size = New-Object System.Drawing.Size(110,20) $reconfig_network.Text = "VM Network" $reconfig_network.Checked = $false $reconfig_network.Enabled = $false $groupBox_options.Controls.Add($reconfig_network) $reconfig_network.Add_Click({reconfig_network}) $networkname = New-Object System.Windows.Forms.ComboBox $networkname.Location = New-Object System.Drawing.Size(130,50) $networkname.Size = New-Object System.Drawing.Size(175,20) $networkname.DropDownHeight = 200 $networkname.Enabled = $False $groupBox_options.Controls.Add($networkname) $reconfig_folder = New-Object System.Windows.Forms.Checkbox $reconfig_folder.Location = New-Object System.Drawing.Size(20,80) $reconfig_folder.Size = New-Object System.Drawing.Size(110,20) $reconfig_folder.Text = "VM Folder" $reconfig_folder.Checked = $false $reconfig_folder.Enabled = $false $groupBox_options.Controls.Add($reconfig_folder) $reconfig_folder.Add_Click({reconfig_folder}) $folder = New-Object System.Windows.Forms.ComboBox $folder.Location = New-Object System.Drawing.Size(130,80) $folder.Size = New-Object System.Drawing.Size(175,20) $folder.DropDownHeight = 200 $folder.Enabled = $False $groupbox_options.Controls.Add($folder) $reconfig_name = New-Object System.Windows.Forms.Checkbox $reconfig_name.Location = New-Object System.Drawing.Size(20,110) $reconfig_name.Size = New-Object System.Drawing.Size(110,20) $reconfig_name.Text = "VMname prefix" $reconfig_name.Checked = $false $groupBox_options.Controls.Add($reconfig_name) $reconfig_name.Add_Click({reconfig_name}) $prefix = New-Object System.Windows.Forms.TextBox $prefix.Location = New-Object System.Drawing.Size(130,110) $prefix.Size = New-Object System.Drawing.Size(175,20) $prefix.Enabled = $False $groupbox_options.Controls.Add($prefix) #This creates a checkbox for Power ON $poweron = New-Object System.Windows.Forms.Checkbox $poweron.Location = New-Object System.Drawing.Size(20,140) $poweron.Size = New-Object System.Drawing.Size(150,20) $poweron.Text = "Power On" $poweron.Checked = $false $groupBox_options.Controls.Add($poweron) $add = New-Object System.Windows.Forms.Button $add.Location = New-Object System.Drawing.Size(20,730) $add.Size = New-Object System.Drawing.Size(140,23) $add.Text = "Add VM's to Inventory" $Form.Controls.Add($add) $add.Enabled = $False $status_text = New-Object System.Windows.Forms.Label $status_text.Location = New-Object System.Drawing.Size(140,725) $status_text.Size = New-Object System.Drawing.Size(230,20) $status_text.TextAlign = "MiddleRight" $status_text.Text = "" $Form.Controls.Add($status_text) $add.Add_Click({import_vms}) #Link Label 1 $LinkLabel1 = New-Object System.Windows.Forms.LinkLabel $LinkLabel1.Location = New-Object System.Drawing.Size(140,745) $LinkLabel1.Size = New-Object System.Drawing.Size(230,20) $LinkLabel1.LinkColor = "BLUE" $LinkLabel1.ActiveLinkColor = "RED" $LinkLabel1.TextAlign = "TopRight" $LinkLabel1.Text = "Tuncay Sahin" $LinkLabel1.add_Click({[system.Diagnostics.Process]::start("http://tuncaysahin.nl")}) $Form.Controls.Add($LinkLabel1) #Show the Form $form.ShowDialog() | Out-Null } #End Function #Call the Form Function Generate-Form