Перейти к основному содержанию

vSphere — снимок экрана

VMware

Я часто сталкиваюсь с необходимостью делать снимки экрана виртуальных машин vSphere. Работаю как с vCenter так и с ESXi. Устал нажимать Alt + PrScr в VMRC и решил разобраться со встроенными возможностями vSphere, которые позволяют делать снимки экрана виртуальной машины.

В vSphere есть два способа делать скриншоты: неправильный и мой. Шучу:

  1. vSphere API
  2. HTTP Handler

Скриншот с помощью vSphere API

Этот способ заключается в использовании vSphere API метода CreateScreenshot_Task для виртуальной машины. При этом снимок экрана работающей виртуальной машины будет сохранён в файл PNG в рабочей директории виртуальной машины. Файл будет содержать название машины и порядковый номер, например, "MyVM-screenshot-0.png". Пользователь должен иметь привилегии VirtualMachine.Interact.CreateScreenshot.

Метод можно использовать в vCenter и ESXi. Для скачивания файла нужно войти на хост ESXi.

Способ можно и нужно использовать разработчикам софта под VMware, но системным администраторам пользоваться этим методом неудобно.

Скриншот с помощью HTTP Handler

Второй метод позволяет извлечь скриншот по URL в ESXi или vCenter. Для этого достаточно зайти на URL vCenter:

https://vcenter/screen?id=vm-8

Или URL ESXi:

https://esxi/screen?id=8

Где id — MoRef (Managed Object Reference) идентификатор виртуальной машины, в ESXi он числовой, в vCenter у него есть префикс "vm-". Узнать его просто, достаточно выбрать виртуальную фашину и внимательно рассмотреть URL. Про MoRef можно почитать здесь: KB 1017126.

Нужно будет указать логин и пароль, т.к. включена basic authentication. Пользователь должен иметь привилегию VirtualMachine.Interact.ConsoleInteract.

Пример получения скриншота виртуальной машины на ESXi 7:

https://192.168.1.10/screen?id=8

vmware

В UI гипервизора используется тот же способ получения миниатюры виртуальной машины, там я его и подсмотрел.

vmware

Параметрами скриншота можно рулить:

  • w — ширина скриншота в пикселях
  • h — высота скриншота в пикселях
  • x0 — расстояние слева до левого верхнего угла выбранной области
  • y0 — расстояние сверху до левого верхнего угла выбранной области
  • x1 — расстояние слева до правого нижнего угла выбранной области
  • y1 — расстояние сверху до правого нижнего угла выбранной области

Пример:

https://192.168.1.10/screen?id=8&w=800&h=600&x0=170&y0=60&x1=620&y1=680

vmware

Программируй, автоматизируй, ускоряй

Всё замечательно, когда нужно сделать один скриншот. А когда много? Нужно как-то автоматизировать процесс, например, написать BAT файл.

Я воспользовался тем, что Windows 10 и Windows 11 имеют на борту утилиту curl.

Код

@echo off
SetLocal EnableExtensions EnableDelayedExpansion

rem =============================
rem ========= variables =========
rem =============================

set user=root
(set pass=hello^^^!)
set host=https://192.168.1.10
set id=8
set /a w=800
set /a h=0
set /a x0=0
set /a y0=300
set /a x1=0
set /a y1=0

rem =============================
rem ==== select NEXT screeen ====
rem =============================

set /a nn=0
@for /f "delims=" %%i in ('"2>nul dir /a-d/b/o-n "screen_*.png""') do (
	set curname=%%i
	set /a curnn=!curname:~7,-4!
	if !curnn! GTR !nn! set /a nn=!curnn! 
)
set /a nn=%nn% + 1
set nns=screen_%nn%.png

rem =============================
rem ========= screenshot ========
rem =============================

set url=%host%/screen?id=%id%

if %w% GTR 0 set url=!url!^&w=%w%
if %h% GTR 0 set url=!url!^&h=%h%
if %x0% GTR 0 set url=!url!^&x0=%x0%
if %y0% GTR 0 set url=!url!^&y0=%y0%
if %x1% GTR 0 set url=!url!^&x1=%x1%
if %y1% GTR 0 set url=!url!^&y1=%y1%

curl ^
-k ^
-s ^
-u "%user%:!pass!" ^
!url! ^
--output %nns%
  • user — имя пользователя
  • pass — пароль, если в пароле есть символ восклицательного знака "!", то заменяем его на конструкцию "^^^!"
  • host — URL гипервизора ESXi или vCenter
  • id — MoRef идентификатор VM
  • w — ширина скриншота в пикселях, если не используется, то 0
  • h — высота скриншота в пикселях, если не используется, то 0
  • x0 — расстояние слева до левого верхнего угла выбранной области, если не используется, то 0
  • y0 — расстояние сверху до левого верхнего угла выбранной области, если не используется, то 0
  • x1 — расстояние слева до правого нижнего угла выбранной области, если не используется, то 0
  • y1 — расстояние сверху до правого нижнего угла выбранной области, если не используется, то 0

Скрипт коннектится к vCenter или ESXi от имени указанного пользователя и создаёт в текущей директории файлы вида:

  • screen_1.png
  • screen_2.png
  • screen_3.png
  • и так далее

Если файл скриншота в директории уже есть, то создаётся следующий по счёту.

vmware

Ссылки

Про скриншоты в VMware Workstation написано здесь:

https://docs.vmware.com/en/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-23A52094-5237-4489-ACAA-02B587F0DE87.html

Ещё есть код Мартина (Martin Pugh) на PowerShell:

https://thesurlyadmin.com/2013/01/31/discovery-with-powershell/

https://community.spiceworks.com/scripts/show/1748-get-vmscreenshot-get-screen-shots-from-the-console-session-of-your-vm-s

Ещё предлагают вариант сделать скриншот с помощью утилиты vmrun:

vmrun -T server -h https://hostname:8333/sdk -u root -p mypassword -gu fred -gp guestpasswd captureScreen "[Vol1] CentOS 5.2/CentOS 5.2.vmx" /home/fred/images/vm_screen.png

По идее оно может показать экран конкретного пользователя ОС...

http://nuclear.unh.edu/wiki/index.php?title=Using_VMWare_vmrun#Capturing_a_Virtual_Machine_Screenshot

 

Похожие материалы

HPE — обновляем прошивку SSD диска через ОС ESXi

Недавно компания Hewlett Packard опубликовала информацию о том, что некоторые SSD диски могут отключиться через 32768 часов работы. Нашёл на своих серверах несколько дисков, которые попали в список уязвимых. Модель моих уязвимых дисков — VK001920JWSSR. Текущая прошивка дисков HPD1.