20
Requisitos para usar VMware PowerCLI y VIX API con C# C Sharp En este tutorial explicaremos paso a paso cómo usar VMware vSphere PowerCLI para acceder a servidores VMware ESXi y VMware vCenter Server Un equipo cliente con sistema operativo Microsoft Windows 7, Windows 8 con acceso a la misma red que los servidores de virtualización ESXi: Instalar Windows 8 en equipo nuevo. Instalar Microsoft Windows 7 Ultimate. Instalar Microsoft Windows 7 Ultimate virtualizado en VMware Server 2.0.1. Instalar y probar Windows 8 Enterprise virtualizado sobre VMware. Instalar Windows 8, virtualizar con VMware Workstation. Servidor de virtualización VMware ESXi o bien grupo de servidores de virtualización en clúster con VMware vCenter Server: Instalar VMware ESXi 5. Descarga e instalación de VMware vSphere PowerCLI y VIX API En primer lugar descargaremos el software gratuito VMware vSphere PowerCLI, que nos permitirá acceder a un servidor VMware ESXi o un clúster de servidores VMware vCe esta herramienta de la línea de comandos podremos realizar cualquier acción sobre una máquina virtual: encenderla, detenerla, reiniciarla, crear un snapshot, etc. y podrem de las las máquinas virtuales: snapshot, listado de máquinas virtuales, sistema operativo, IP, vRAM y vCPU asignadas, etc. Para descargar VMware PowerCLI accederemos a la web oficial de VMware, necesitaremos ser usuario registrado de VMware (es gratuito). Accederemos a la URL corresp descarga de VMware vShere PowerCLI: https://www.vmware.com/support/developer/PowerCLI · AjpdSoft Acceso PostgreSQL con Lazarus x64 · Ejemplo acceso nativo a SQLite con ADO.Net en C# .Net · AjpdSoft Acceso MySQL Android · AjpdSoft Acceso SQLite C# ADO.NET Lo más descargado · AjpdSoft Registro de OCX y DLL Código Fuente Delphi · AjpdSoft Generador de códigos de barras EAN8 y EAN13 · Borland Database · OutFile Enc.: Comandos PowerShell · WriteEventLog Enc.: Comandos PowerShell · GetEventLog Enc.: Comandos PowerShell · GetFileHash Enc.: Comandos PowerShell · CompareObject Enc.: Comandos PowerShell Lo más visitado · URL Enc.: Informática · Attrib Enc.: Comandos Windows XP/Windows 2000/2003 (consola MSDOS)

Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

Embed Size (px)

Citation preview

Page 1: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 1/20

Nuevo usuario Inicio : Descargas : Trucos VB.Net, PHP, Delphi : Manuales : Código Fuente

· Inicio· Buscar· Contactar· Descargas· Enciclopedia· Estadísticas· Foros· Manuales, Artículos· Nuestra historia· Política de Cookies· Quiénes somos· Recomiéndanos· Temas· Top 10· Trucos Delphi, PHP, Java,Visual Studio· Tu cuenta

Anuncios

C# C Sharp: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C#Tutorial donde mostramos paso a paso cómo administrar y acceder a la información de un servidor de virtualización VMware ESXi o a un clúster de servidores VMware ESXi conVMware vCenter Server. Mostramos cómo realizar tareas habituales (encender, apagar, reiniciar, resetear, snapshot, cambiar nombre, etc) a máquinas virtuales medianteVMware vSphere PowerCLI y una aplicación completa en C# C Sharp para ejemplo de uso de VMware VIX API, con el código fuente incluido: AjpdSoft Gestión VMware ESXi yvCenter.

Videotutorial AjpdSoft Acceso VMware ESXi y vCenter en funcionamiento.Requisitos para usar VMware PowerCLI y VIX API con C# C Sharp.Descarga e instalación de VMware vSphere PowerCLI y VIX API.Cómo usar PowerCLI para obtener datos y cómo realizar tareas en servidor VMware ESXi y vCenter Server.Cómo usar VMware VIX API para desarrollar aplicación Visual Studio .NET C# C Sharp para administrar ESXi y vCenter.Anexo: listado código fuente completo de apliación de ejemplo VIX API en C Sharp.Artículos relacionados.Créditos.

Videotutorial AjpdSoft Acceso VMware ESXi y vCenter en funcionamientoAjpdSoft Gestión VMware ESXi y vCenter, aplicación desarrollada en Visual Studio .NET 2013 (C# CSharp) con código fuente incluido 100% open source totalmente gratuito. AjpdSoft GestiónVMware ESXi y vCenter permite acceder a servidores de virtualización ESXi y clúster de servidores ESXi con VMware vCenter y permite obtener las máquinas virtuales (aplicando sus datos básicos: nombre, poweredstate, tiempo inicio, estado, vRAM, vCPU, vCores, estado Vmware Tools, hostname, IP, sistema operativo, UUID, path, ficheros, alarmas, anotaciones,número de discos, etc. La aplicación también permite (si disponemos de la licencia de VMware ESXi apropiada) realizar acciones sobre las máquinas virtuales: encender, apagar, pausar,snapshot de máquina virtual, apagar, reiniciar el sistema operativo, instalar VMware Tools, montar y desmontar CD VMware Tools, cambiar nombre de máquina virtual, exportar resultados aCSV.

A continuación mostramos un videotutorial sobre el uso y funcionamiento de AjpdSoft Gestión VMware ESXi y vCenter:

Requisitos para usar VMware PowerCLI y VIX API con C# C SharpEn este tutorial explicaremos paso a paso cómo usar VMware vSphere PowerCLI para acceder a servidores VMware ESXi y VMware vCenter Server

Un equipo cliente con sistema operativo Microsoft Windows 7, Windows 8 con acceso a la misma red que los servidores de virtualización ESXi:Instalar Windows 8 en equipo nuevo.Instalar Microsoft Windows 7 Ultimate.Instalar Microsoft Windows 7 Ultimate virtualizado en VMware Server 2.0.1.Instalar y probar Windows 8 Enterprise virtualizado sobre VMware.Instalar Windows 8, virtualizar con VMware Workstation.

Servidor de virtualización VMware ESXi o bien grupo de servidores de virtualización en clúster con VMware vCenter Server:Instalar VMware ESXi 5.

Descarga e instalación de VMware vSphere PowerCLI y VIX APIEn primer lugar descargaremos el software gratuito VMware vSphere PowerCLI, que nos permitirá acceder a un servidor VMware ESXi o un clúster de servidores VMware vCenter Server, conesta herramienta de la línea de comandos podremos realizar cualquier acción sobre una máquina virtual: encenderla, detenerla, reiniciarla, crear un snapshot, etc. y podremos obtener datosde las las máquinas virtuales: snapshot, listado de máquinas virtuales, sistema operativo, IP, vRAM y vCPU asignadas, etc.

Para descargar VMware PowerCLI accederemos a la web oficial de VMware, necesitaremos ser usuario registrado de VMware (es gratuito). Accederemos a la URL correspondiente para ladescarga de VMware vShere PowerCLI:

https://www.vmware.com/support/developer/PowerCLI

· AjpdSoft AccesoPostgreSQL con Lazarusx64

· Ejemplo acceso nativo aSQLite con ADO.Net en C#.Net

· AjpdSoft Acceso MySQLAndroid

· AjpdSoft Acceso SQLiteC# ADO.NET

Lo más descargado· AjpdSoft Registro de OCXy DLL Código FuenteDelphi

· AjpdSoft Generador decódigos de barras EAN8 yEAN13

· Borland Database

· Out­File Enc.: Comandos PowerShell

· Write­EventLog Enc.: Comandos PowerShell

· Get­EventLog Enc.: Comandos PowerShell

· Get­FileHash Enc.: Comandos PowerShell

· Compare­Object Enc.: Comandos PowerShell

Lo más visitado

· URL Enc.: Informática

· Attrib Enc.: Comandos WindowsXP/Windows 2000/2003(consola MS­DOS)

Page 2: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 2/20

Selecciona Idioma de laInterfaz:

Spanish

Orasite.com

Coloca tu web aquí

English

En nuestro caso descargaremos VMware vSphere PowerCLI 5.5.0, pulsaremos en "Download Now":

Leeremos los términos de licencia para VMware vSphere Software Developmen Kit (SDK), si estamos de acuerdo marcaremos "I agree to the terms and conditions outlined in the End UserLicense Agreement" y pulsaremos "Accept":

Descargaremos el fichero "VMware­PowerCLI­5.5.0­1295336.exe":

Una vez descargado el fichero lo ejecutaremos para iniciar la instalación de VMware vSphere Software Development Kit SDK (vSphere PowerCLI y VIX API):

Pulsaremos en "Ejecutar":

Page 3: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 3/20

El asistente para instalar VMware vSphere PowerCLI nos indicará que se requieren los componentes VMware Remote Console Plug­in 5.1 y VMware VIX 1.12.1, pulsaremos "Install" parainstalarlos:

Se iniciará el asistente para instalar VMware Remote Console Plug­in, pulsaremos "Next":

Pulsaremos "Install"

La instalación de VMware Remote Console Plug­in concluirá, pulsaremos "Finish":

Page 4: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 4/20

Se iniciará ahora la instalación de VMware VIX API, pulsaremos "Next":

Leeremos los términos de licencia para VMware Software Development Kit (SDK), para Vmware VIX Application Programming Interface (VIX API), si estamos de acuerdo marcaremos "Iaccept the terms in the license agreement" y pulsaremos "Next":

Indicaremos la carpeta donde se instalará VMware VIX API, pulsaremos "Next":

Pulsaremos "Install":

Page 5: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 5/20

La instalación de VMware VIX API concluirá, pulsaremos "Finish":

A continuación el asistente para instalar VMware vSphere PowerCLI nos indicará que se requiere una política de ejecución "RemoteSigned" para poder usar PowerCLI, posteriormenteindicaremos cómo habilitarla, pulsaremos "Continue":

Con el texto: The PowerShell execution policy of this computer is not set to "RemoteSigned". This prevents execution of PowerShell scripts on your computerand will result in error when VMware vSphere PowerCLI is invoked. It is recommended that you set the execution policy to "RemoteSigned" in order to ve ableto execute scripts. This can be done by invoking the command "Set­ExecutionPolicy RemoteSigned" from a PowerShell prompt. Press Continue to skip andcontinue install or Cancel to exit the installation.

Se iniciará el asistente para instalar VMware vSphere PowerCLI, pulsaremos "Next":

Leeremos los términos de licencia de VMware vSphere PowerCLI, si estamos de acuerdo marcaremos "I accept the terms in the license agreement" y pulsaremos "Next":

Page 6: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 6/20

Se instalará vSphere PowerCLI y vCloud Director PowerCLI, pulsaremos "Next":

Pulsaremos "Install":

Tras la instalación, el asistente nos indicará que ha concluido satisfactoriamente, pulsaremos "Finish":

De esta sencilla forma ya tendremos disponibles las PowerCLI para administrar y consultar sevidores VMware ESXi y VMware vCenter Server:

Page 7: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 7/20

Cómo usar PowerCLI para obtener datos y realizar tareas en servidor VMware ESXi yvCenter ServerUna vez instaladas las VMware vSphere PowerCLI (como indicamos aquí), pulsaremos en el botón Inicio de Windows, en la carpeta "VMware vSphere PowerCLI" ejecutaremos "VMwarevSphere PowerCLI":

En el primer inicio de las shell de la línea de comandos de las PowerCLI nos indicará que debemos activar "RemoteSigned" para poder usarlas:

Con el texto: No se puede cargar el archivo c:/Program Files (x86)/VMware/Infrastructure/vSphere PowerCLI/Scripts/Initialize­PowerCLIEnvironment.ps1porque en el sistema está deshabilitada la ejecución de scripts. Vea "get­help about_signing" para obtener más información. En línea: 1 Carácter 2.CategoryInfo; NotSpecified, PSSecurityException. FullQualifiedErrorId: RuntimeException.

Para activar RemoteSigned ejecutaremos el comando:

set­executionpolicy remotesigned

Nos avisará de que se va a cambiar una directiva de ejecución, introduciremos "s" y pulsaremos INTRO:

Con el texto: Cambio de directiva de ejecución. La directiva de ejecución le ayuda a protegerse de scripts en los que no confía. Si cambia dicha directiva podríaexponerse a los riesgos de seguridad descritos en el tema de la Ayuda about_Execution_Policies. ¿Desea cambiar la directiva de ejecución?

Si la directiva se aplica correctamente se inciará el shel de comandos VMware vSphere PowerCLI:

Esta web utiliza 'cookies' propias y de terceros. Al navegar por nuestra webentendemos que aceptas el uso que hacemos de ellas. Más información. Aceptar

Política de cookies

Page 8: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 8/20

Con el texto:

Welcome to the VMware vSphere PowerCLI. Log in to a vCenter Server or ESX host: Connect­VIServer. To find out what commands are available, type: Get­VICommandTo show searchable help for all PowerCLI commands: Get­PowerCLIHelpOnce you've connected, display all virtual machines: Get­VMIf you need more help, visit the PowerCLI community: Get­PowerCLICommunity

Lo primero que haremos será conectarnos a nuestro servidor VMware ESXi o bien a nuestro clúster de servidores VMware vCenter Server, para ello necesitaremos saber la IP de dicho servidory un usuario y contraseña con permisos suficientes. El parámetro a ejecutar para establecer la conexión será:

Connect­VIServer ­Server 192.168.1.101 ­User root ­Password xxx

Donde:

192.168.1.101: será la IP de nuestro servidor VMware ESXi o la IP del servidor vCenter Server.root: será el usuario con el que nos conectaremos al servidor de virtualización VMware.xxx: será la contraseña del usuario anterior.

Si todo es correcto el shell PowerCLI nos mostrará un mensaje indicando que se ha establecido la conexión con el servidor. Es posible que nos muestre alguna advertencia referente alcertificado de seguridad:

Con el texto:

A partir de ahora podremos ejecutar comandos que serán lanzados contra el servidor ESXi o vCenter al que estemos conectados. Por ejemplo, para obtener todas las máquinas virtuales delservidor (tanto las iniciadas como las apagadas) ejecutaremos el comando:

Get­VM

Nos mostrará el nombre de la máquina virtual, el estado (PowerState), el número de vCPUs asignados y la cantidad de vRAM asiganda:

Podremos hacer filtros, por ejemplo para mostrar sólo las máquinas virtuales encendidas (con PowerState = PoweredOn) ejecutaremos:

Get­VM | where $_.PowerState ­eq "PoweredOn"

Para mostrar solo las máquinas virtuales apagadas:

Get­VM | where $_.PowerState ­eq "PoweredOff"

Además de obtener datos también podremos interactuar con las máquinas virtuales. Por ejemplo, para iniciar una máquina virtual detenida ejecutaremos el comando:

Start­VM ­VM "Ubuntu 10" ­RunAsync

El comando anterior iniciará la máquina virtual con nombre "Ubuntu 10":

Page 9: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 9/20

Nota importante: hay que tener en cuenta que las interacciones con las máquinas virtuales desde PowerCLI requieren de licencia en el servidor VMware ESXi, si tenemoslicencia Free (gratuita) no podremos ejecutar comandos que realicen acciones sobre las máquinas virtuales (iniciarlas, pararlas, detenerlas, crear máquinas virtuales, eliminarmáquinas virtuales, resetearlas, crear snapshot, eliminar snapshot, etc.). En caso de no disponer de la licencia adecuada en el servidor ESXi o vCenter al que estemosconectados, al ejecutar cualquier comando que la requiere mostrará el mensaje:

Fault.RestrictedVersion.summary.CategoryInfo: NotSpecified, RestrictiveVersionFullQualifiedErrorId: Client20_VMServiceImpl_StartVM_ViError,VMware.VimAutomation.ViCore.Cmdlets.Commands.StartVM

Para detener una máquina virtual ejecutaremos el comando:

Stop­VM ­VM "XPDelphi"

Donde "XPDelphi" será el nombre de la máquina virtual a detener. Dependiendo de la acción puede que nos pida confirmación, de ser así introduciremos "s" y pulsaremos INTRO:

Otros ejemplos para obtener datos estadísticos, por ejemplo para obtener métricas de acceso a disco desde una fecha a una fecha, para una máquina virtual (por ejempo "SRVPROYECTOA",ejecutaremos el comando:

Get­Stat ­Entity SRVPROYECTOA ­Start 01/03/2014 ­Finish 01/03/2014 ­Disk

Para métricas de memoria RAM:

Get­Stat ­Entity SRVPROYECTOA ­Start 01/03/2014 ­Finish 01/03/2014 ­Memory

Para métricas de CPU:

Get­Stat ­Entity SRVPROYECTOA ­Start 01/03/2014 ­Finish 01/03/2014 ­Cpu

Para obtener todos los snapshot realizados a una máquina virtual ejecutaremos el comando:

Get­Snapshot ­VM SRVPROYECTOA

Donde "SRVPROYECTOA" será la máquina virtual de la que mostraremos los snapshots realizados:

Si queremos desactivar los mensajes de aviso (warnings) al ejecutar determinados comandos ejecutaremos este otro comando:

Set­PowerCLIConfiguration ­DisplayDeprecationWarnigs 0

Los resultados de la ejecución de comandos que devuelven datos se pueden formatear y personalizar. Por ejemplo, para mostrar los datos de los snapshot de una máquina virtual en forma dedetalle ejecutaremos el comando:

Get­Snapshot ­VM SRVPROYECTOA | Format­List

Para mostrar todos los snapshots de todas las máqunias virtuales del servidor al que estamos conectados, mostrando las columnas vm, name, iscurrent, sizegb:

Get­VM | Get­Snapshot | Format­List vm, name, iscurrent, sizegb

Para mostrar los snapshots de las máquinas virtuales de un Resource Pool determinado ejecutaremos el comando:

Get­VM ­Location "Uniland" | Get­Snapshot | Format­List vm, name, iscurrent, sizegb

Page 10: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 10/20

Donde "Uniland" será el nombre del Resource Pool.

También podremos guardar los resultados en un ficheor de texto. Por ejemplo, para guardar las máquinas virtuales del servidor al que estamos conectados en un fichero de textoejecutaremos:

Get­VM | Out­File c:/vm.txt

Nos guardará los datos en un fichero de texto plano:

Para guardar más datos de las máquinas virtuales (nombre, estado, vCPU, vRAM, espacio aprovisionado, espacio usado, notas, versión):

Get­VM | Format­List name, powerstate, numcpu, memorygb, provisionedspacegb, usedspacegb,notes,version | Out­File c:/mv.txt

Nos habrá guardado algo así en el fichero de salida:

PowerCLI es una herramienta muy potente que nos permitirá realizar cualquier acción sobre un servidor VMware ESXi, sobre un grupo de servidores vCenter Server y sobrecualquiera de sus máquinas virtuales. Otro ejemplo, para eliminar un snapshot especificado de una máquina virtual determinada, sin que pida confirmación, ejecutaremos elsiguiente comando PowerCLI:

Get­VM ­Name SRVCERCO | Get­Snapshot | Where $_.Name ­eq "Antes de Service Pack 2" | Remove­Snapshot ­confirm:$false

El comando anterior eliminará el snapshot con descripción "Antes de Service Pack 2" de la máquina virtual "SRVCERCO":

Cómo usar VMware VIX API para desarrollar aplicación Visual Studio .NET C# C Sharppara administrar ESXi y vCenterVMware nos proporciona, junto con las VMware vSphere PowerCLI las VMware VIX API, que básicamente son los mismos comandos disponibles en las PowerCLI pero para plataformas .NET.Con VMware VIX API podremos desarrollar nuestras propias aplicaciones para gestión y administración de nuestros servidores VMware ESXi y VMware vCenter Servermostraremos una aplicación completa con código fuente disponible (gratuito) como ejemplo de uso de VMware VIX API.

En primer lugar deberemos disponer de Microsoft Visual Studio .NET en alguna de sus versiones. A continuación mostramos alguinos tutoriales sobre cómo instalarlo y crear una aplicación conVisual Studio .NET:

Instalar Visual Studio .Net 2012 Windows 8, primera aplicación CSharp.Instalar Visual Studio 2010 y desarrollar aplicación con acceso a PostgreSQL.

Abriremos Microsoft Visual Studio .NET, en nuestro caso usaremos la versión 2013, y crearemos un nuevo proyecto C# C Sharp (el procedimiento será el mismo para Visual Basic VB.NET). Enlos tutoriales anteriores explicamos cómo crear un nuevo proyecto paso a paso.

Una vez creado el proyecto Visual Studio .Net (C#), agregaremos la referencia correspondiente a VMware VIX API. Para ello pulsaremos en el menú "PROYECTO" ­ "Agregar referencia":

Pulsaremos en "Examinar":

Page 11: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 11/20

Accederemos a la carpeta de instalación de VMware VIX API, por defecto en:

C:/Archivos de programa (x86)/VMware/Infrastructure/vSphere PowerCLI

Y seleccionaremos la librería dll "VMware.Vim.dll", pulsaremos "Agregar":

Accederemos al código de nuestro formulario principal, donde usaremos VIX API, y añadiremos el using siguiente:

using VMware.Vim;

A partir de ahora ya podremos usar VMware VIX API para gestionar y acceder a servidores VMware ESXi y VMware vCenter Server desde nuestra aplicación C# .NET. Como ejemplo hemosdesarrollado una aplicación completa que permite obtener todas las máquinas virtuales (y realizar filtros) y muchos datos como: nombre máquina virtual, estado (PowerState), tiempo deinicio, estado conexión, vRAM, vCPU, cores por socket, estado VMware Tools, hostname, IP, sistema operativo , ruta ficheros MV, ID Guest, Uuid, WWN, anotaciones, número de discos,tamaño, ficheros que componen la MV, alarmas, etc. Esta aplicación también permite realizar acciones sobre máquinas virtuales tales como: iniciar máquina virtual, apagar, pausar, resetear,reiniciar sistema operativo, apagar sistema operativo, actualizar VMware Tools, instalar VMware Tools, desmontar CD VMware Tools, cambiar nombre a máquina virtual, crear snapshot, etc.

Los componentes que usaremos para realizar la aplicación AjpdSoft Gestión VMware ESXi y vCenter:

El enlace para descargar la aplicación completa con el código fuente en Visual C# .NET 2013:

AjpdSoft Gestión VMware ESXi y vCenter.

La aplicación AjpdSoft Gestión VMware ESXi y vCenter en funcionamiento:

Page 12: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 12/20

Anexo: listado código fuente completo de apliación de ejemplo VIX API en C SharpA continuación mostramos el código fuente (source code) completo de la aplicación AjpdSoft Gestión VMware ESXi y vCenter:

Formulario formAjpdSoftVMwareESX.cs:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using VMware.Vim;using System.Collections.Specialized;using System.Configuration;

namespace AjpdSoftAccesoVMwareESX

public partial class formAjpdSoftVMwareESX : Form public VimClient accesoESX = new VimClient();

public formAjpdSoftVMwareESX() InitializeComponent();

public bool ampliarTamanoDiscoVirtual(string nombreVM, int numeroDisco, int nuevoTamanoBytes) NameValueCollection filter = new NameValueCollection(); filter.Add("Summary.vm", nombreVM); VMware.Vim.VirtualMachine vm = (VMware.Vim.VirtualMachine)accesoESX.FindEntityView(typeof(VMware.Vim.VirtualMachine), null, filter, null); try NameValueCollection nvc = new NameValueCollection(); nvc.Add("name", "Datacenter"); VMware.Vim.Datacenter dc = (VMware.Vim.Datacenter)accesoESX.FindEntityView(typeof(VMware.Vim.Datacenter), null, nvc, null); VirtualDiskManager vdm = new VirtualDiskManager(accesoESX, new ManagedObjectReference()); vdm.ExtendVirtualDisk_Task(vm.Layout.Disk[numeroDisco].DiskFile[0].ToString(), dc.MoRef, nuevoTamanoBytes * 1024 * 1024, false); return true; catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return false;

private void btPowerOn_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea encender la máquina virtual " + mvSel + "?", "Encender máquina virtual", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.PowerOnVM(vm.Runtime.Host); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a encender.", "Encender máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

Page 13: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 13/20

private void formAjpdSoftVMwareESX_FormClosed(object sender, FormClosedEventArgs e) GuardarConfiguracion proUtilidades = new GuardarConfiguracion(); proUtilidades.guardarValorConfiguracion("URL Servidor ESX vCenter", txtURLESX.Text); proUtilidades.guardarValorConfiguracion("Usuario", txtUsuarioESX.Text); proUtilidades.guardarValorConfiguracion("Filtrar por", lsFiltrarPor.Text); proUtilidades.guardarValorConfiguracion("Valor filtro", lsValorFiltro.Text);

//guardar contraseña cifrada cifrarAES cifradoAES = new cifrarAES(); proUtilidades.guardarValorConfiguracion("Contraseña", cifradoAES.cifrarTextoAES(txtContrasenaESX.Text, "AjpdSoft_Frase_Encriptado", "AjpdSoft_Frase_Encriptado", "MD5", 22, "1234567891234567", 128)); try //Cerramos la conexión con el servidor ESX accesoESX.Disconnect(); catch

private void btPowerOff_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea apagar la máquina virtual " + mvSel + "?", "Apagar máquina virtual", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.PowerOffVM(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a apagar.", "Apagar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btRenombrarMV_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) if (txtNombreVM.Text == "") MessageBox.Show("Debe indicar el nuevo nombre de la máquina virtual.", "Renombrar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea renombrar la máquina virtual [" + mvSel + "] por [" + txtNombreVM.Text + "]?", "Renombrar máquina virtual", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); vmConfigSpec.Name = txtNombreVM.Text; // Cambiar nombre a MV vm.ReconfigVM_Task(vmConfigSpec); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a renombrar.", "Renombrar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btReiniciarGuest_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea reiniciar el sistema operativo " + "de la máquina virtual [" + mvSel + "]?", "Reiniciar sistema operativo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)

Page 14: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 14/20

ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.RebootGuest(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a reiniciar.", "Reiniciar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btExportarCSV_Click(object sender, EventArgs e) dlGuardar.Filter = "Fichero CSV (*.csv)|*.csv"; dlGuardar.FileName = "Máquinas virtuales ESX"; dlGuardar.Title = "Exportar a CSV"; if (dlGuardar.ShowDialog() == DialogResult.OK) StringBuilder csvMemoria = new StringBuilder(); foreach (ColumnHeader columnasLista in lsMVESX.Columns) csvMemoria.Append(String.Format(""0";", columnasLista.Text)); csvMemoria.AppendLine(); foreach (ListViewItem elementosLista in lsMVESX.Items) foreach (ListViewItem.ListViewSubItem lvs in elementosLista.SubItems) if (lvs.Text.Trim() == string.Empty) csvMemoria.Append(""";"); else csvMemoria.Append(String.Format(""0";", lvs.Text)); csvMemoria.AppendLine(); System.IO.StreamWriter sw = new System.IO.StreamWriter(dlGuardar.FileName, false, System.Text.Encoding.Default); sw.Write(csvMemoria.ToString()); sw.Close();

private void btSuspender_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea suspender la " + "máquina virtual [" + mvSel + "]?", "Suspender MV", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.SuspendVM(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a suspender.", "Reiniciar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btActualizarVMwareTools_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea actualizar las VMware Tools de la " + "máquina virtual [" + mvSel + "]?", "Actualizar VMware Tools", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.UpgradeTools(""); catch (Exception errorC)

Page 15: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 15/20

MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a actualizar las VMware Tools.", "Actualizar VMware Tools", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btInstalarVMwareTools_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea instalar las VMware Tools en la " + "máquina virtual [" + mvSel + "]?", "Instalar VMware Tools", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.MountToolsInstaller(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual para instalar las VMware Tools.", "Instalar VMware Tools", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btApagarSO_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea apagar el sistema operativo " + "de la máquina virtual [" + mvSel + "]?", "Apagar sistema operativo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.ShutdownGuest(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a apagar el sistema operativo.", "Apagar Sistema Operativo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void formAjpdSoftVMwareESX_Load(object sender, EventArgs e) //Establecemos las propiedades del ListView lsMVESX.View = System.Windows.Forms.View.Details; lsMVESX.GridLines = true; lsMVESX.FullRowSelect = true;

//Añadimos las columnas al ListView lsMVESX.Columns.Add("MV", 130); lsMVESX.Columns.Add("PW Estado", 70); lsMVESX.Columns.Add("Tiempo inicio", 110); lsMVESX.Columns.Add("Estado", 70); lsMVESX.Columns.Add("vRAM", 60); lsMVESX.Columns.Add("vCPU", 60); lsMVESX.Columns.Add("Cores x socket", 80); lsMVESX.Columns.Add("Estado Tools", 100); lsMVESX.Columns.Add("Hostname", 80); lsMVESX.Columns.Add("IP", 100); lsMVESX.Columns.Add("SO", 150); lsMVESX.Columns.Add("Path", 150); lsMVESX.Columns.Add("ID Guest", 80); lsMVESX.Columns.Add("Uuid", 80); lsMVESX.Columns.Add("WWN", 80); lsMVESX.Columns.Add("Anotaciones", 80); lsMVESX.Columns.Add("Nº Discos MV", 50); lsMVESX.Columns.Add("Tamaño Discos MV", 50); lsMVESX.Columns.Add("Nº Discos Guest", 50); lsMVESX.Columns.Add("Tamaño Discos Guest", 80); lsMVESX.Columns.Add("Ficheros MV", 80); lsMVESX.Columns.Add("Alarma", 80);

GuardarConfiguracion proUtilidades = new GuardarConfiguracion(); txtURLESX.Text = proUtilidades.leerValorConfiguracion("URL Servidor ESX vCenter"); txtUsuarioESX.Text = proUtilidades.leerValorConfiguracion("Usuario"); lsFiltrarPor.Text = proUtilidades.leerValorConfiguracion("Filtrar por");

Page 16: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 16/20

lsValorFiltro.Text = proUtilidades.leerValorConfiguracion("Valor filtro");

//leer contraseña cifrada cifrarAES cifradoAES = new cifrarAES(); string contrasenaCifrada = ""; contrasenaCifrada = proUtilidades.leerValorConfiguracion("Contraseña"); txtContrasenaESX.Text = cifradoAES.descifrarTextoAES(contrasenaCifrada, "AjpdSoft_Frase_Encriptado", "AjpdSoft_Frase_Encriptado", "MD5", 22, "1234567891234567", 128);

private void lsMVESX_SelectedIndexChanged(object sender, EventArgs e) if (lsMVESX.SelectedItems.Count > 0) txtNombreVM.Text = lsMVESX.SelectedItems[0].Text;

private void btSnapshot_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) if (txtSnapshotNombre.Text == "") MessageBox.Show("Debe indicar el nombre del snapshot que se creará.", "Snapshot máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea crear un snapshot del momento actual para la MV [" + mvSel + "]?", "Snapshot máquina virtual", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.CreateSnapshot(txtSnapshotNombre.Text, txtSnapshotDescripcion.Text, opSnapshotMemoria.Checked, opSnapshotQuiesceFileSystem.Checked); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a renombrar.", "Renombrar máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btDesconectarESXvCenter_Click(object sender, EventArgs e) try accesoESX.Disconnect(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btConectarESXvCenter_Click(object sender, EventArgs e) if (!opLimpiarLista.Checked) lsMVESX.Items.Clear();

try // Conectamos con vSphere ESX ‐ vCenter servicio web accesoESX.Connect(txtURLESX.Text); // Iniciamos sesión en el servidor VMware ESX ‐ vCenter con usuario y contraseña accesoESX.Login(txtUsuarioESX.Text, txtContrasenaESX.Text);

//Filtramos las máquinas virtuales (por el campo y valor que queramos) NameValueCollection filter = new NameValueCollection(); if (opAplicarFiltro.Checked) filter.Add(lsFiltrarPor.Text, lsValorFiltro.Text); IList vmList = accesoESX.FindEntityViews(typeof(VirtualMachine), null, filter, null);

//datos de conexión a VMware ESX ‐ vCenter txtInfoServerESX.Text = accesoESX.ServiceContent.About.FullName + " " + accesoESX.ServiceContent.About.ApiType + " " + accesoESX.ServiceContent.About.LicenseProductName + " " + accesoESX.ServiceContent.About.OsType + " " + accesoESX.ServiceContent.IpPoolManager + " " + accesoESX.ServiceContent.About.Vendor + " " + accesoESX.ServiceUrl + " " + accesoESX.ServiceContent.About.DynamicProperty;

//datos de licencia VMware ESX ‐ vCenter VMware.Vim.LicenseManager licenciaESXvCenter = (VMware.Vim.LicenseManager)accesoESX.GetView(accesoESX.ServiceContent.LicenseManager, null); LicenseManagerLicenseInfo[] licencia = licenciaESXvCenter.Licenses; string tipoLicenciaESX = ""; string claveLicenciaESX = ""; foreach (LicenseManagerLicenseInfo lic in licencia) tipoLicenciaESX = lic.Name.ToString(); claveLicenciaESX = lic.LicenseKey.ToString(); txtLicenciaESX.Text = tipoLicenciaESX + " Key: " + claveLicenciaESX;

//Añadimos los elementos (filas) al ListView string[] elementosFila = new string[22]; ListViewItem elementoListView; string ficherosMV = "";

Page 17: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 17/20

// Recorremos todas las máquinas virtuales del ESX que cumplan el filtro foreach (VirtualMachine vm in vmList) elementosFila[0] = vm.Name; elementosFila[1] = Convert.ToString(vm.Runtime.PowerState); elementosFila[2] = Convert.ToString(vm.Runtime.BootTime); elementosFila[3] = Convert.ToString(vm.Runtime.ConnectionState); elementosFila[4] = Convert.ToString(vm.Config.Hardware.MemoryMB); elementosFila[5] = Convert.ToString(vm.Config.Hardware.NumCPU); elementosFila[6] = Convert.ToString(vm.Config.Hardware.NumCoresPerSocket); elementosFila[7] = Convert.ToString(vm.Guest.ToolsStatus); elementosFila[8] = Convert.ToString(vm.Guest.HostName); elementosFila[9] = Convert.ToString(vm.Guest.IpAddress); elementosFila[10] = Convert.ToString(vm.Guest.GuestFullName); elementosFila[11] = Convert.ToString(vm.Config.Files.VmPathName); elementosFila[12] = Convert.ToString(vm.Config.GuestId); elementosFila[13] = Convert.ToString(vm.Config.Uuid); elementosFila[14] = Convert.ToString(vm.Config.NpivPortWorldWideName); elementosFila[15] = Convert.ToString(vm.Config.Annotation);

if (vm.Layout.Disk != null) elementosFila[16] = Convert.ToString(vm.Layout.Disk.Count());

//Tamaño de los discos duros virtuales de la máquina virtual long tamano = 0; string discosTamano = ""; foreach (VirtualDevice dispositivo in vm.Config.Hardware.Device) if (dispositivo.GetType() == typeof(VirtualDisk)) VirtualDisk disco = new VirtualDisk(); if (discosTamano == "") discosTamano = disco.DiskObjectId + " ‐> " + Convert.ToString(disco.CapacityInKB / 1024 / 1024) + "GB"; else discosTamano = discosTamano + " || " + disco.DiskObjectId + " ‐> " + Convert.ToString(disco.CapacityInKB / 1024 / 1024) + "GB"; tamano = tamano + disco.CapacityInKB / 1024 / 1024; elementosFila[17] = Convert.ToString(tamano) + " " + discosTamano; ficherosMV = "";

//Obtener todos los ficheros que componen la máquina virtual for (int i = 0; i < vm.Layout.Disk.Count(); i++) for (int j = 0; j < vm.Layout.Disk[i].DiskFile.Count(); j++) ficherosMV = ficherosMV + " || " + vm.Layout.Disk[i].DiskFile[j]; elementosFila[20] = ficherosMV; else elementosFila[16] = "‐‐"; elementosFila[17] = "‐‐";

if (vm.Guest.Disk != null) elementosFila[18] = Convert.ToString(vm.Guest.Disk.Count()); long? tamanoDiscos = 0; for (int i = 0; i < vm.Guest.Disk.Count(); i++) tamanoDiscos = tamanoDiscos + vm.Guest.Disk[i].Capacity; elementosFila[19] = Convert.ToString(tamanoDiscos / 1024 / 1024 / 1024); else elementosFila[18] = "‐‐"; elementosFila[19] = "‐‐";

//obtenemos las posibles alarmas activas para la máquina virtual VMware.Vim.AlarmState[] alarmaMV = vm.TriggeredAlarmState; string alarmasMV = ""; foreach (AlarmState alarma in alarmaMV) alarmasMV = alarmasMV + alarma.Alarm.Value + " || "; elementosFila[21] = alarmasMV; elementoListView = new ListViewItem(elementosFila); lsMVESX.Items.Add(elementoListView); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btResetearMV_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea resetear la " + "máquina virtual [" + mvSel + "]?", "Resetear MV", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.ResetVM(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error",

Page 18: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 18/20

MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual a resetear.", "Resetear máquina virtual", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btMontarVMwareTools_Click(object sender, EventArgs e) string mvSel;

if (lsMVESX.SelectedItems.Count > 0) mvSel = lsMVESX.SelectedItems[0].Text; if (MessageBox.Show("¿Está seguro que desea desmontar el CD de las VMware Tools en la " + "máquina virtual [" + mvSel + "]?", "Desmontar CD VMware Tools", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.UnmountToolsInstaller(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual para desmontar las VMware Tools.", "Desmontar VMware Tools", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

private void btObtenerUltimaTarea_Click(object sender, EventArgs e) /* TaskHistoryCollector tareas;TaskFilterSpec filtroTareas = new TaskFilterSpec();filtroTareas.Time.BeginTime = DateTime.Now; tareas = vm.GetAllTasksView(filtroTareas);tareas.ReadNextTasks(1);foreach (TaskInfo tarea in tareas) elementosFila[21] = tarea.Description.Message;

*/

/* ManagedObjectReference _svcRef = new ManagedObjectReference(); _svcRef.Type = "ServiceInstance"; _svcRef.Value = "ServiceInstance";

try NameValueCollection filterForVM = new NameValueCollection(); filterForVM.Add("Name", mvSel); VirtualMachine vm = (VirtualMachine)accesoESX.FindEntityView(typeof(VirtualMachine), null, filterForVM, null); vm.UnmountToolsInstaller(); catch (Exception errorC) MessageBox.Show("Ha habido un error:" + Environment.NewLine + Environment.NewLine + errorC.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show("Debe seleccionar la máquina virtual para desmontar las VMware Tools.", "Desmontar VMware Tools", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); */

GuardarConfiguracion.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Windows.Forms;

namespace AjpdSoftAccesoVMwareESX class GuardarConfiguracion //leer valor de configuración del fichero app.config public string leerValorConfiguracion(string clave) try string resultado = ConfigurationManager.AppSettings[clave].ToString(); return resultado; catch return "";

//escribir valor de configuración en fichero app.config public void guardarValorConfiguracion(string clave, string valor)

Page 19: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 19/20

try Configuration ficheroConfXML = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);

//eliminamos la clave actual (si existe), si no la eliminamos //los valores se irán acumulando separados por coma ficheroConfXML.AppSettings.Settings.Remove(clave);

//asignamos el valor en la clave indicada ficheroConfXML.AppSettings.Settings.Add(clave, valor);

//guardamos los cambios definitivamente en el fichero de configuración ficheroConfXML.Save(ConfigurationSaveMode.Modified); catch /* MessageBox.Show("Error al guardar valor de configuración: " + System.Environment.NewLine + System.Environment.NewLine + ex.GetType().ToString() + System.Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);*/

CifrarAES.cs

using System;using System.Security.Cryptography;using System.Text;using System.IO;

namespace AjpdSoftAccesoVMwareESX class cifrarAES public string cifrarTextoAES(string textoCifrar, string palabraPaso, string valorRGBSalt, string algoritmoEncriptacionHASH, int iteraciones, string vectorInicial, int tamanoClave) try byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(vectorInicial); byte[] saltValueBytes = Encoding.ASCII.GetBytes(valorRGBSalt); byte[] plainTextBytes = Encoding.UTF8.GetBytes(textoCifrar);

PasswordDeriveBytes password = new PasswordDeriveBytes(palabraPaso, saltValueBytes, algoritmoEncriptacionHASH, iteraciones);

byte[] keyBytes = password.GetBytes(tamanoClave / 8);

RijndaelManaged symmetricKey = new RijndaelManaged();

symmetricKey.Mode = CipherMode.CBC;

ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, InitialVectorBytes);

MemoryStream memoryStream = new MemoryStream();

CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);

cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);

cryptoStream.FlushFinalBlock();

byte[] cipherTextBytes = memoryStream.ToArray();

memoryStream.Close(); cryptoStream.Close();

string textoCifradoFinal = Convert.ToBase64String(cipherTextBytes);

return textoCifradoFinal; catch return null;

public string descifrarTextoAES(string textoCifrado, string palabraPaso, string valorRGBSalt, string algoritmoEncriptacionHASH, int iteraciones, string vectorInicial, int tamanoClave) try byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(vectorInicial); byte[] saltValueBytes = Encoding.ASCII.GetBytes(valorRGBSalt);

byte[] cipherTextBytes = Convert.FromBase64String(textoCifrado);

PasswordDeriveBytes password = new PasswordDeriveBytes(palabraPaso, saltValueBytes, algoritmoEncriptacionHASH, iteraciones);

byte[] keyBytes = password.GetBytes(tamanoClave / 8);

RijndaelManaged symmetricKey = new RijndaelManaged();

symmetricKey.Mode = CipherMode.CBC;

ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, InitialVectorBytes);

MemoryStream memoryStream = new MemoryStream(cipherTextBytes);

CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);

byte[] plainTextBytes = new byte[cipherTextBytes.Length];

int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);

memoryStream.Close(); cryptoStream.Close();

string textoDescifradoFinal = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);

return textoDescifradoFinal; catch return null;

Page 20: Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft.pdf

15/4/2015 Administración VMware ESXi y vCenter con PowerCLI y VIX API con C# Proyecto AjpdSoft

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=694 20/20

Artículos relacionadosAjpdSoft Gestión VMware ESXi y vCenter en C Sharp.Videotutorial AjpdSoft Gestión VMware ESXi y vCenter.Acceso Twitter aplicación C# API Twitter AjpdSoft Gestión Seguidores Twitter.Añadir icono aplicación área notificación Windows con C# iconizar aplicación.Desarrollar aplicación C# con acceso nativo a MySQL Server mediante ADO.NET.Capturar pantalla screenshot con Visual C#.Obtener contenido HTML de una URL con C# C Sharp.Desarrollar aplicación C# con acceso nativo a MySQL Server mediante ADO.NET.Instalar Visual Studio 2010 y desarrollar aplicación con acceso a PostgreSQL.Convertir texto a PDF con iTextSharp y Visual Basic .Net VB.Net.Generar y leer códigos QR Quick Response Barcode con Visual Basic .Net VB.Net.Cómo desarrollar una aplicación de servicio en Windows con Visual Basic .Net.Generar números aleatorios random con Visual Studio .Net VB .NET.Estructura del código de barras EAN 13 y ejemplo en Delphi de obtención de datos.Insertar evento de Google Calendar con Visual Basic .Net y Google Data API.Crear proceso en segundo plano con barra de progreso en Visual Basic .Net VB.Net.El control de errores en Visual Basic .Net.Acceso a MySQL mediante Visual Basic .Net y ODBC.Acceso a Oracle mediante Microsoft Visual Basic, RDO y ODBC.Insertar y extraer documentos en una tabla Oracle con Visual Basic 6.Cambiar marcadores de Word por valores del formulario de una aplicación.Exportar ListView a fichero CSV VB.Net.Función para reemplazar una cadena de texto dentro de otra ­ Visual Basic.Funciones para leer y escribir en ficheros INI VB.Net.AjpdSoft Capturar Pantalla C#.AjpdSoft Separar Páginas PDF código fuente C# C Sharp .Net.AjpdSoft Indexar Texto PDF C# iTextSharp.AjpdSoft Acceso MySQL con ADO.NET en C#.AjpdSoft Insertar Evento Google Calendar VB.net.AjpdSoft Convertir Texto a PDF código fuente Visual Basic .Net.AjpdSoft Envío EMail SSL VB.Net.AjpdSoft Conexión BD Visual Basic .Net.AjpdSoft Socket VB.Net.AjpdSoft Envío SMS VB.Net.AjpdSoft Números Aleatorios VB.NET.Todos los programas con código fuente en Visual Basic.

CréditosArtículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.

Anuncios

Enviado el Sunday, 20 April a las 23:33:59 por ajpdsoft

Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+

G O O G L E D R I V E F O R W O R K

Almacenamiento online ilimitado, documentos, hojas de cálculo, etc.