Порядка недели назад мне потребовалось управлять виртуальной машиной vmware программным путем, желательно из C#. Решение было найдено на CodeProject.
Автор реализовал Vix API на C# и выпустил DLL. Я кратко расскажу об этом проекте на русском языке.
У Vmware имеется мощный API, который позволяет управлять состоянием виртуальной машины, а также запускать внутри нее сторонние приложения, копировать файлы с хоста на гостевую систему и обратно.
API состоит из 2х частей:
- VMWare Virtual Infrastructure SDK — набор инструментов и API который позволяет управлять инфраструктурой VMWare. Этот набор инструментов содержит управляемые обертки для SOAP интерфейса, обеспечивающие развертывание VMWare. Эти инструменты в основном нацелены на управление VMWare ESX или VirtualCenter
- VMWare VIX API. VIX API позволяет разработчиком писать программы и скрипты, которые автоматизируют операции над виртуальными машинами, а также гостевыми операционными системами внутри виртуальных машин. Оно работает на Windows и Linux и поддерживает управление VMware Server, Workstation и Virtual Infrastructure (ESX и vCenter). Существуют связи с C, Perl, и COM (Visual Basic, VBscript, C#).
Использование библиотеки
Чтобы использовать библиотеку или собрать, или же запустить ее из исходного кода, вы должны установить следующее программное обеспечение от VMWare:
- VMWare VIX. Это SDK, находится по адресу http://www.vmware.com/download/sdk/vmauto.html. Новая версия 1.6.2 требуется для поддержки VI.
- VMWare Workstation 6.5 или окружение VI (например ESX), или и то и то.
В своем проекте добавьте ссылку, на Vestris.VMWareLib.dll
и namespace reference.
using Vestris.VMWareLib;
Сейчас вы можете соединяться с локальной VMWare Workstation или с удаленной ESX server и выполнять задачи VMWare. Ниже представлен пример, которы создает, восстанавливает, включает и удаляет снепшоты на VMWare Workstation.
// Объявление виртуального хоста
VMWareVirtualHost virtualHost = new VMWareVirtualHost();
// соединение с локальной (VMWare Workstation) виртуальной машиной
virtualHost.ConnectToVMWareWorkstation();
// открытие существующей виртуальной машины
VMWareVirtualMachine virtualMachine = virtualHost.Open("C:\Virtual Machines\xp\xp.vmx");
// включение этой виртуальной машины
virtualMachine.PowerOn();
// вход в гостевую операционную систему на этой виртуальной машине
virtualMachine.Login("Administrator", "password");
// запуск блокнота
virtualMachine.RunProgramInGuest("notepad.exe", string.Empty);
// создание нового снепшота
string name = "New Snapshot";
// сохранение текущего состояния
virtualMachine.Snapshots.CreateSnapshot(name, "test snapshot");
// выключение
virtualMachine.PowerOff();
// нахождение созданного снепшота
VMWareSnapshot snapshot = virtualMachine.Snapshots.GetNamedSnapshot(name);
// возврат к состоянию, когда был сделан снепшот
snapshot.RevertToSnapshot();
// его удаление
snapshot.RemoveSnapshot();
Если вам интересна реализация, то она описанна в оригинальной статье.
Подскажите пожалуйста, что означает сделать ссылку на namespace reference?
Посмотрел множество примеров, но всегда возникает ошибка на virtualMachine.Login(«Administrator», «password»);
Ничего кроме включение сделать не могу, везде эксепшины вылазят. Можете чтонибудь подсказать?