VMware PowerCLI で VMware View Horizon を制御

VMware PowerCLI を使って VMware Horizon View 7 環境を制御する手順を紹介します。
VMware PowerCLI 6.5.2 以降では、MSI 形式の提供は廃止され、PowerShell Garallry[1]PowerShell コンテンツのリポジトリ 経由によるインストールとなりました。
MSI 形式の提供を廃止した理由は、リリース期間の短縮や、より新機能をタイムリーに提供するためのようです。

This Windows PowerShell module contains VMware.PowerCLI…

VMware PowerCLI インストール

Windows PowerShell を管理者権限で起動し、以下の手順でインストールします。

利用可能な VMware PowerCLI を確認

Find-Module -Name VMware.PowerCLI

VMware.PowerCLI モジュールをインストール

Install-Module -Name VMware.PowerCLI

VMware.PowerCLI の各モジュールをインストール

Get-Module -Name VMware.*View -ListAvailable | Import-Module

拡張機能のインストール

一部のコマンドは、VMware 社が提供する拡張機能をインストールする必要があります。手順は以下のとおりです。

  1. GitHub リポジトリページへアクセス
  2. 緑色の「Code」からプルダウンで、「Download ZIP」をクリック
  3. zip ファイルを解凍し、Modules\VMware.Hv.Helper フォルダを以下のディレクトリにコピー
    1. ユーザ固有 : %UserProfile%\Documents\WindowsPowerShell\Modules
    2. システム全体: C:\Program Files\WindowsPowerShell\Modules
  4. 拡張機能を解除
dir 'C:\Program Files\WindowsPowerShell\Modules\VMware.Hv.Helper\' | Unblock-File

Horizo​​n Connection Server 接続

VMware PowerCLI を使って、Horizon Connection Server に接続・切断するには、以下のコマンドを使います。

Horizo​​n Connection Server 接続

Connect-HVServer -Server cs01.example.com -User Administrator@example.com -Password Password

Horizo​​n Connection Server 切断

Disconnect-HVServer -Server cs01.example.com

コマンド実行時、以下のエラーが出力される場合があります。
Connect-HVServer : 機関 ‘192.168.1.151’ との SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。
以下のコマンドを実行し、IP ではなくホスト名を使用することで解決します。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

コマンド実行例

仮想デスクトップの状態を確認

> Get-HVMachineSummary

Machine         DesktopPool  DNS Name     User     Host            Agent Datastore  Status
-------         -----------  --------     ----     ----            ----- ---------  ------
win10-1         testpool     win10-1.e...          192.168.1.11    7.6.0 ds01       AVAILABLE

「使用可能」となっている仮想デスクトップの台数を抽出

> (get-hvmachinesummary | where {$_.base.basicstate -eq "AVAILABLE"}).count
1129

スクリプト例

仮想デスクトップの状態を表示するスクリプト例

#-------------------------------------------------------------------------
# 変数
#-------------------------------------------------------------------------
$cs = 'cs01.example.com'	# CS サーバの FQDN
$csUser= 'Administrator'	# CS サーバ接続に使用するユーザ名
$csPassword = 'Passw0rd!'	# CS サーバ接続に使用するパスワード
$csDomain = 'example.com'	# CS サーバが所属するドメイン名

#-------------------------------------------------------------------------
# 初期設定
#-------------------------------------------------------------------------
# --- PowerCLI モジュールのインポート ---
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- CS サーバへの接続 ---
$hvServer1 = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

#-------------------------------------------------------------------------
# 仮想デスクトップの状態を表示
#-------------------------------------------------------------------------
Write-Output "仮想デスクトップの状態を表示します。"
Get-HVMachineSummary | Format-table -AutoSize

# --- CS サーバの切断 ---
Write-Output "", "CS サーバの接続を切断します。"
Disconnect-HVServer -Server $cs

問題のある VM を検出して、再起動を実行するスクリプト例
参考:VMware End-User Computing Blog

#-------------------------------------------------------------------------
# 変数
#-------------------------------------------------------------------------
$cs = 'cs01.example.com'		# CS サーバの FQDN
$csUser= 'Administrator'		# CS サーバ接続に使用するユーザ名
$csPassword = 'Passw0rd!'		# CS サーバ接続に使用するパスワード
$csDomain = 'example.com'		# CS サーバが所属するドメイン名

$vc = 'vc01.example.com'		# VC サーバの FQDN 
$vcUser = 'administrator@vsphere.local'	# VC サーバ接続に使用するユーザ名
$vcPassword = 'Passw0rd!'		# VC サーバ接続に使用するパスワード

$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')

#-------------------------------------------------------------------------
# 初期設定
#-------------------------------------------------------------------------
# --- PowerCLI モジュールのインポート ---
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- CS サーバへの接続 ---
$hvServer1 = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

# --- View API 連携サービスを取得 ---
$Services1= $hvServer1.ExtensionData

# --- VC サーバへの接続 ---
Connect-VIServer -Server $vc -User $vcUser -Password $vcPassword

#-------------------------------------------------------------------------
# 問題の仮想デスクトップ検出と再起動
#-------------------------------------------------------------------------
Write-Output ""
if ($Services1) {
     foreach ($baseState in $baseStates) {
           # --- 問題の仮想デスクトップを検出 ---
           $ProblemVMs = Get-HVMachineSummary -State $baseState

           foreach ($ProblemVM in $ProblemVMs) {
                $VM = Get-VM -Name $ProblemVM.Base.Name
                # --- 問題の仮想デスクトップを再起動 ---
                Restart-VMGuest -VM $VM
           }
     }
     Write-Output "", "CS サーバの接続を切断します。"
     Disconnect-HVServer -Server $cs
} else {
     Write-Output "", "CS サーバの接続に失敗しました。"
     pause
     }
# --- VC サーバの切断 ---
Write-Output "", "VC サーバの接続を切断します。"
Disconnect-VIServer -Server $vc

以上

関連記事

VMware Horizon View 7 を使って、仮想デスクトップ環境を構築する簡易手順を紹介します。なお、Horizon 8(2006)では、View Composer は廃止されたので、インストールは不要となります。 事前準[…]

脚注

脚注
1PowerShell コンテンツのリポジトリ