[번역] Automating VMware Horizon 7 with VMware PowerCLI

출처 : https://blogs.vmware.com/euc/2020/01/vmware-horizon-7-powercli.html

VMware PowerCLI는 View API를 통해 프로그래밍 방식 제어 및 자동화를 허용하기 위해 VMware Horizon 7에 대한 PowerShell 지원을 통합했다.

VMware PowerCLI Horizon 7 기능을 사용하면 Horizon 7 PowerCLI 모듈 자체, 온라인 설명서가 포함된 View API에 100% 액세스, GitHub에서 출시된 고급 기능 등 세 가지를 실제로 얻을 수 있다.

Horizon1.png

VMware PowerCLI - Horizon 7 모듈

Horizon 7 모듈에는 2개의 cmdlet만 포함되어 있지만 매우 유용하다. 이러한 cmdlet을 사용하면 View API 서비스에서 연결 및 연결을 끊을 수 있다. 중요한 것은 이 기능이 Horizon Console을 통해 제공되는 모든 기능과 전체 View API에 편리하게 액세스할 수 있는 방법을 제공하는 것이다.

이를 통해 다른 자격 증명을 사용하여 원격 워크스테이션 또는 서버에서 Horizon 7용 VMware PowerCLI 스크립트를 연결하고 실행할 수 있다. VMware 자산 전체에 걸쳐 손쉽게 연합 스크립트를 구축할 수도 있다. 예를 들어 스크립트를 작성하여 vCenter Server 인벤토리에서 데이터스토어 목록을 가져오고 이 정보를 사용하여 풀을 생성할 최적의 데이터스토어를 선택할 수 있다.

View API

새로운 VMware PowerCLI 모듈과 함께 하기 위해 Horizon 7용 공용 View API 참조 문서와 전체 공용 View API에 대한 액세스 권한도 있다. View API는 웹 서비스로 Horizon Pod 내의 모든 Connection Server에서 사용할 수 있다. View API는 Horizon Console에서 구성, 관리 및 모니터링을 위해 사용되므로 이제 콘솔에서 사용할 수 있는 모든 기능에 프로그래밍 방식의 액세스를 노출하고 있다.

VMware는 데이터 개체와 데이터 개체와의 상호 작용 방법을 보다 쉽게 탐색하기 위해 VMware 스택 전반에서 모든 API 문서를 위한 통합 인터페이스인 새로운 Developer Center online API Explorer를 만들었다.

고급 기능

Horizon 7 팀은 일반적인 작업을 포괄하는 일련의 기능을 통합하여 신속하게 시작하십시오. 이러한 기능을 사용하면 처음부터 스크립트를 작성할 필요 없이 풀, 팜 및 데스크톱과 쉽게 상호 작용할 수 있다. GitHub의 VMware PowerCLI Community Repository 사이트를 정기적으로 방문하여 새로운 기능을 얻고, 직접 기여하는 것도 고려하기 바란다.

설치

  1. VMware PowerCLI 설치
    1. Windows PowerShell(Admin) 콘솔을 다운로드하고 다음 명령을 실행하십시오.
      Install-Module VMware.PowerCLI -Scope CurrentUser
    2. 로컬 스크립트 실행 허용
      Set-ExecutionPolicy RemoteSigned
    3. 자세한 내용은 VMware PowerCLI 사용 설명서를 참조하십시오.
      https://code.vmware.com/doc/preview?id=633
  2. Horizon 고급 기능 설치:
    1. it의 GitHub 저장소 페이지 https://github.com/vmware/PowerCLI-Example-Scripts로 이동.
    2. 녹색의 Clone or download 버튼을 클릭한 다음 Download ZIP을 클릭.
      Horizon2.png
    3. zip 파일의 압축을 풀고 고급 기능 Hv.Helper를 modules 디렉토리에 복사한다.
    4. PowerShell $env:PSModulePath 변수에서 사용중인 디렉토리를 확인한다:
      • 사용자별: %UserProfile%\Documents\WindowsPowerShell\Modules
      • 시스템 범위: C:\Program Files\WindowsPowerShell\Modules
    5. 고급 기능의 차단을 해제하여 실행되도록 한다. PowerShell 프롬프트(관리자)에서 다음 명령을 실행하여 VMware.Hv.Helper 폴더를 복사한 위치의 경로를 조정한다.:
      dir 'C:\Program Files\WindowsPowerShell\Modules\VMware.Hv.Helper\' | Unblock-File
  3. 문서 위치

시작하기

PowerShell을 시작하고 필요한 모든 VMware 모듈을 로드한다. VMware vSphere와 상호 작용하려는 경우 핵심 모듈도 필요하지만 모든 VMware 모듈을 가져오거나, Horizon 7 모듈만 가져올 수 있다. 모든 모듈을 로드하려면 다음 명령을 사용한다.

Get-Module -ListAvailable VMware* | Import-Module

이제 자격 증명을 사용하여 Horizon Connection Server 및 View API에 연결할 수 있음:

Connect-HVServer -server horizon1.mydomain.com

이 예에서 horizon1.mydomain.com은 Horizon Connection Server 중 하나이다. 자격 증명을 입력하라는 메시지가 표시되지만, 또는 명령에 자격 증명을 포함할 수도 있다.

Connect-HVServer -server horizon1.mydomain.com -user desoadmin -password mypassword -domain mydomain

Horizon3.png

DefaultHVServer라는 전역변수가 생성되고, Horizon Connection Server에 대한 연결에 대한 정보를 저장한다. $Global:DefaultHVServers을 사용하여 이 변수에 액세스할 수 있다.

Horizon5.png

모든 흥미로운 것들은 정말로 ExtensionData 아래에 있다. 이 속성을 좀 더 쉽게 사용할 수 있도록 변수 $Services1에 할당하고 살펴보십시오.

$Services1=$Global:DefaultHVServers.ExtensionData

$Services1

Horizon6.png

View API 참조 문서를 보면 이러한 항목 중 일부를 인식하기 시작할 것이다. ExtensionData 속성(및 현재 $Services1 변수)은 전체 View API에 대한 액세스를 보유한다.

몇 가지 명령을 실행하고 VMware PowerCLI를 사용하는 방법에 대해 살펴봅시다. 100% View API에 액세스할 수 있다는 것을 기억하자!

먼저, 간단한 View API 명령을 사용하여 포드에 있는 모든 Horizon Connection Server 목록을 얻읍시다. 다음 예제의 명령은 View API 서비스 ConnectionServer 및 메서드 ConnectionServer_List를 사용하여 변수 $hvServers1에 결과를 할당하십시오. 이 서비스에 대한 자세한 내용은 View API 참조 문서를 참조하십시오.

$hvServers1 =

$Services1.ConnectionServer.ConnectionServer_List()

$hvServers1.General

Horizon7.png

다음으로, Horizon Agent의 상태에 따라 고급 기능 중 하나를 사용하여 데스크톱 목록을 얻자. 이 목록은 데스크톱이 사용 중인지, 새 사용자 연결에 사용할 수 있는지, 오류 상태인지를 포함하여 데스크톱의 상태를 이해하는 데 유용하다.

다음 명령은 사용자가 로그인했지만 사용자가 현재 데스크톱에서 연결이 끊어진 데스크톱 목록을 반환한다.

$DisconnectedVMs = Get-HVMachineSummary -State DISCONNECTED

$DisconnectedVMs | Out-GridView

Horizon8.png

가능한 상태의 전체 목록은 baseState의 View API 설명서를 참조하십시오.

다음을 포함하는 에이전트 상태의 문제 VM 목록을 가져오는 것이 유용할 것이다:

PROVISIONING_ERROR, ERROR, AGENT_UNREACHABLE, AGENT_ERR_STARTUP_IN_PROGRESS, AGENT_ERR_DISABLED, AGENT_ERR_INVALID_IP, AGENT_ERR_NEED_REBOOT, AGENT_ERR_PROTOCOL_FAILURE, AGENT_ERR_DOMAIN_FAILURE, AGENT_CONFIG_ERROR, UNKNOWN

체크할 상태를 교체하여 데스크톱 목록을 이러한 상태 중 하나로 반환하기 위해 위에서 사용한 명령을 수정할 수 있다. 예를 들면 다음과 같다.

$ProblemVMs = Get-HVMachineSummary -State AGENT_UNREACHABLE

이 문제를 더 자세히 살펴보고 스크립트를 사용하여 여러 가지 다른 문제 상태의 Horizon Agent를 사용하여 데스크톱을 나열한다. 그런 다음 문제를 해결하기 위한 작업을 수행할 수 있다. 다음 샘플 스크립트는 이 고급 기능을 사용해서 View API를 쿼리하여 모든 문제 데스크톱을 얻는다. 그런 다음 이 스크립트는 vSphere 명령을 사용하여 문제 VM을 재부팅한다.

스크립트에서 변수 값을 변경하여 연결 서버, 사용자 이름 등을 지정하십시오.

또한 Restart-VMGuest 명령에 -WhatIf 매개 변수를 추가하는 것을 고려하십시오. -WhatIf 매개 변수는 실제로 명령을 실행하지 않고 결과를 보여준다.

####################################################################
# Get List of Desktops that have Horizon Agent in problem states.
# Reboot the OS of each these.
####################################################################

#region variables
###################################################################
# Variables #
###################################################################
$cs = 'horizon1.mydomain.com' #Horizon Connection Server
$csUser= 'demoadmin' #User account to connect to Connection Server
$csPassword = 'mypassword' #Password for user to connect to Connection Server
$csDomain = 'mydomain' #Domain for user to connect to Connection Server

$vc = 'vcenter1.mydomain.com' #vCenter Server
$vcUser = 'administrator@vsphere.local' #User account to connect to vCenter Server
$vcPassword = 'mypassword' #Password for user to connect to vCenter Server

baseStates = @('PROVISIONING_ERROR',

'ERROR',
'AGENT_UNREACHABLE',
'AGENT_ERR_STARTUP_IN_PROGRESS',
'AGENT_ERR_DISABLED',
'AGENT_ERR_INVALID_IP',
'AGENT_ERR_NEED_REBOOT',
'AGENT_ERR_PROTOCOL_FAILURE',
'AGENT_ERR_DOMAIN_FAILURE',
'AGENT_CONFIG_ERROR',
'UNKNOWN')

#endregion variables

tyle="padding-left: 30px;">#region initialize
###################################################################
# Initialize #
###################################################################
# --- Import the PowerCLI Modules required ---
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- Connect to Horizon Connection Server API Service ---
$hvServer1 = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

# --- Get Services for interacting with the View API Service ---
$Services1= $hvServer1.ExtensionData

# --- Connect to the vCenter Server ---
Connect-VIServer -Server $vc -User $vcUser -Password $vcPassword
#endregion initialize

#region main
###################################################################
# Main #
###################################################################
Write-Output ""
if ($Services1) {

foreach ($baseState in $baseStates) {
# --- Get a list of VMs in this state ---
$ProblemVMs = Get-HVMachineSummary -State $baseState

foreach ($ProblemVM in $ProblemVMs) {

$VM = Get-VM -Name $ProblemVM.Base.Name
# --- Reboot each of the Problem VMs ---
Restart-VMGuest -VM $VM
# Add -WhatIf to see what would happen without actually carrying out the action.
}
}
Write-Output "", "Disconnect from Connection Server."
Disconnect-HVServer -Server $cs
} else {
Write-Output "", "Failed to login in to Connection Server."
pause
}

# --- Disconnect from the vCenter Server ---
Write-Output "", "Disconnect from vCenter Server."
Disconnect-VIServer -Server $vc
#endregion main

요약

이것들은 꽤 간단한 예시들이었지만, 이것들과 설치 지침은 여러분을 움직이게 하기에 충분할 것이다. 이 예들은 가능성의 표면만을 긁었을 뿐이다. 이제 Horizon용 PowerCLI 모듈, View API 액세스, 설명서 및 고급 기능을 사용하여 Horizon 7 환경을 자동화하는 새로운 방법을 살펴보기 바란다.

여러분이 어떻게 살아가고, 어떤 활용 사례와 문제를 해결하는지 알려주고, 여러분의 스크립트를 다른 사람들이 혜택을 볼 수 있도록 커뮤니티에 다시 제공해주기 바란다.