(VMware ESXi) vim-cmd 명령과 옵션을 사용하여 모든 게스트의 전원 on/off 상태를 출력하는 Shell Script 작성하기

Tools Tips

vim-cmd 명령 을 사용하여 ESXi 호스트에서 전원이 켜진 모든 VMware 게스트를 나열하는 샘플 Shell Script를 소개합니다.

스폰서 링크

샘플 Shell Script

아래 스크립트를 .sh확장자 로 powerstate.sh 저장한 다음 chmod +x powerstate.sh 명령으로 실행 모드로 변경합니다. ./script_name.sh 명령으로 스크립트를 실행하여 ESXi 호스트에서 모든 VMware 게스트의 전원 상태를 확인합니다.

#!/bin/sh
# 호스트의 모든 가상 머신 목록 가져오기
vmids=`vim-cmd vmsvc/getallvms 2>&1 | sed '1,2d'| awk '{print $1}'`
# 각 가상 머신의 전원 상태를 확인합니다.
for vmid in $vmids; do
  if [ $vmid -gt 0 ]; then
    state=`vim-cmd vmsvc/power.getstate $vm | grep "Powered" | awk  -F " " '{print $2}'`
    vm_name=`vim-cmd vmsvc/get.config $vm | grep "name =" | head -n 1 | awk -F "=" '{print $2}'`
    if [ "$state" =  "on" ]; then
       echo "$vmid is $state $vm_name"
    else
       echo "$vmid is $state $vm_name"
    fi
  fi
done

실행 결과는 다음과 같습니다.

# ./script_name.sh
1 is off "Windows Server 2012 R2",
2 is on "Ubuntu Server 20.04 LTS",

사용 vim-cmd 옵션 설명

이 글에서 필요한 가상 머신의 정보를 취득하기위해 vim-cmd유틸리티를 사용합니다. vim-cmd 유틸리티는 VMware 환경을 관리하기 위한 명령줄 인터페이스입니다. 샘플 Shell Script에서 사용하는 명령은 다음과 같습니다.

vmsvc/getallvms

ESXi 호스트에 등록된 모든 가상 머신 목록을 검색하는 데 사용됩니다. 출력 예는 다음과 같습니다.

# vim-cmd vmsvc/getallvms 
Vmid  Name                    File                                                             
  1  Windows Server 2012 R2  [datastore1] WinSrv2012R2/WinSrv2012R2.vmx
  2  Ubuntu Server 20.04 LTS [datastore1] UbtSrv20.04L/UbtSrv20.04L.vmx

위 샘플 Shell Script에서는 Vmid 숫자 나열이 $vmids변수에 대입되어 사용됩니다.

vmsvc/power.getstate

ESXi 호스트에 등록된 가상 머신의 전원 상태를 검색하는 데 사용됩니다. 출력 예는 다음과 같습니다.

# vim-cmd vmsvc/power.getstate 1
Retrieved runtime info
Powered off
# vim-cmd vmsvc/power.getstate 2
Retrieved runtime info
Powered on

위 샘플 Shell Script에서는on 또는 off$state변수에 대입되어 사용됩니다.

vmsvc/get.config

ESXi 호스트에 등록된 가상 머신의 구성에 대한 정보를 검색하는 데 사용됩니다. 출력 예는 다음과 같습니다.

# vim-cmd vmsvc/get.config 1
Configuration:
(vim.vm.ConfigInfo) {
   dynamicType = <unset>,
   changeVersion = "2022-10-16T23:33:13.790985Z",
   modified = "1970-01-01T00:00:00Z",
   name = "Windows Server 2012 R2",
   guestFullName = "Microsoft Windows Server 2012 R2 (64-bit)",
   version = "vmx-08",
... 이하 생략 ...

위 샘플 Shell Script에서는“Windows Server 2012 R2”,$vm_name변수에 대입되어 사용됩니다.

댓글

제목과 URL을 복사했습니다