【VMware Horizon 8】基本構築から PowerCLI 自動化まで

  • URLをコピーしました!
目次

はじめに

VMware Horizon 8(2006以降)の登場により、VDI の構築は劇的にシンプルになりました。

かつて Horizon 7 以前の環境では、リンククローン方式を利用するために「View Composer サーバー」や専用の「SQL データベース」の構築が必須であり、これが構成を複雑にする大きな要因でした。 しかし、Horizon 8 からは View Composer が廃止 され、より高速で効率的な 「インスタントクローン」 が標準機能として統合されました。

本記事では、Horizon 7 の知識をお持ちの方に向けた変更点の解説を含め、Horizon 8 の基本構築手順 から、PowerCLI を用いた運用自動化 まで、エンジニアが現場で使えるノウハウを紹介します。

この記事でわかること
  • Horizon 8 の構築: Composer 不要のシンプルな構成手順
  • トラブル回避の Tips: ラボ環境(KMS なし)で展開するためのレジストリ設定
  • 運用自動化: PowerCLI を使ったステータス確認と自動復旧スクリプト

Horizon 7 から 8 への大きな変化

Horizon 8 へのバージョンアップで、最もインパクトが大きいのが 「View Composer の廃止」「インスタントクローンの標準化」 です。

さようなら View Composer

Horizon 7 までは、ストレージ容量を節約できる「リンククローン方式」を利用するために、以下のコンポーネントが必須でした。

  1. View Composer サーバー(専用の Windows Server が必要)
  2. 専用データベース(SQL Server 等の構築が必要)

これらは構築の手間がかかるだけでなく、トラブル時の切り分けを複雑にする要因でもありました。 Horizon 8 (2006) 以降では、リンククローン機能自体が廃止され、より高速な 「インスタントクローン」 が標準機能となりました。

これにより、View Composer サーバーとデータベースの構築は不要 になりました。 Connection Server が vCenter と直接連携するだけで、爆速のクローン展開が可能になります。これが Horizon 8 最大のメリットです。

Horizon 8 環境構築手順

構成がシンプルになったことで、構築手順も非常にスムーズになりました。主な流れを解説します。

事前準備(コンポーネント)

Horizon 8 環境を構築するために必要なサーバーは以下の通りです。 Horizon 7 時代にあった「View Composer」や「そのための SQL DB」がリストから消え、非常にスッキリしました。

  1. vSphere 基盤: ESXi ホスト および vCenter Server(vCSA)
  2. 認証基盤: Active Directory(ドメインコントローラ)
  3. 管理サーバー: Connection Server(Windows Server)
    • ※事前にドメインに参加させておきます。

Connection Server のインストール

管理の中核となる Connection Server を構築します。 インストーラー(VMware-Horizon-Connection-Server-xxxx.exe)を実行し、ウィザードに従って進めるだけですが、重要な分岐点は一つだけです。

  • インスタンスのタイプ: 「Horizon スタンダードサーバー」 を選択

これだけで、vCenter と連携してインスタントクローンを展開する準備が整います。

マスターイメージ(Windows 10/11)の作成

仮想デスクトップの「原本」となるマスター VM を作成します。 Windows 10/11 をインストールした後、Horizon Agent をインストールしますが、ここでの機能選択が重要です。

  • VMware Horizon Instant Clone Agent: 【必ず選択する】
  • VMware Horizon View Composer Agent: 【選択しない(項目自体がない場合もあります)】

インストール完了後、デプロイの基準点となる 「スナップショット」 を取得しておきます。

💡KMS サーバーがないラボ環境での回避策

検証環境や自宅ラボなどで、KMS(ライセンス認証)サーバーがない環境 でインスタントクローンを展開しようとすると、以下のエラーが出てデプロイに失敗することがあります。

view composer agent initialization error (16): Failed to activate software license

これを回避し、ライセンス認証をスキップして強制的に展開するには、マスター OS 側で以下のレジストリを設定してからスナップショットを取得してください。

  • キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmware-viewcomposer-ga
  • 値: SkipLicenseActivation
  • 型: REG_DWORD
  • データの値: 1

あくまで検証用の一時的な回避策です。本番環境では正しくライセンス認証を行ってください。

運用自動化: PowerCLI の導入

数百台、数千台規模の VDI を管理する場合、GUI(管理コンソール)での操作には限界があります。 VMware PowerCLI を導入して、運用の自動化・効率化が可能です。

PowerCLI のインストール方法(最新版)

以前(PowerCLI 6.5 頃まで)は MSI 形式のインストーラーをダウンロードして実行していましたが、現在は廃止されています。 今の主流は、PowerShell Gallery からコマンド一発でインストールする方法です。

STEP
基本モジュールのインストール

PowerShell を「管理者として実行」し、以下のコマンドを入力します。

Install-Module -Name VMware.PowerCLI

これだけで、Horizon を含む VMware 製品全般の操作コマンドがインストールされます。

STEP
拡張機能(Hv.Helper)の導入

標準のコマンドレットに加えて、コミュニティベースの拡張モジュール VMware.Hv.Helper を入れておくと、複雑なスクリプトを書かずに高度な操作(自動再構成など)が可能になります。

これも以下のコマンドでインストール可能です。

Install-Module -Name VMware.Hv.Helper

接続とステータス確認コマンド

インストールが完了したら、実際に Connection Server に接続してみましょう。

Connection Server への接続 以下のコマンドを使用します。

Connect-HVServer -Server <Connection ServerのFQDN> -User <管理者ユーザー> -Password <パスワード> -Domain <ドメイン名>
【重要】証明書エラーで接続できない場合

検証環境などで、自己署名証明書(オレオレ証明書)を使用している場合、接続時に以下のエラーが出て弾かれることがあります。

Connect-HVServer : 機関 ‘xxx’ との SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。

これを回避するには、接続前に以下のコマンドを一度だけ実行し、証明書エラーを無視する設定 を入れてください。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

これで、PowerCLI から Horizon 環境を操作する準備が整いました。

【実践】PowerCLI で異常な VM を自動復旧する

VDI を運用していると、必ず「使用中ではないのに接続できない VM」や「エージェントが無応答の VM」が発生します。 これらを毎日手動で探して再起動するのは大変な労力です。

PowerCLI を使えば、「異常なステータスの VM だけを特定し、自動的に再起動する」 ことが可能です。

ステータス確認と再起動スクリプト

以下は、Horizon(Connection Server)と vSphere(vCenter)の両方に接続し、Horizon 側でエラー判定された VM を、vCenter 側から再起動するスクリプトです。

このスクリプトの処理ロジック

STEP
ターゲット選定

PROVISIONING_ERROR(展開失敗)や AGENT_UNREACHABLE(エージェント応答なし)など、接続不可能なステータスを定義

STEP
リスト取得

全 VM の中から、上記ステータスに該当するものだけを抽出

STEP
処置実行

該当する VM に対して、vCenter 経由でゲスト OS の再起動(Restart-VMGuest)を実行

#-------------------------------------------------------------------------
# 変数設定(環境に合わせて書き換えてください)
#-------------------------------------------------------------------------
# Connection Server 情報
$cs        = 'cs01.example.com'        # FQDN
$csUser    = 'Administrator'           # 管理ユーザー
$csPassword = 'YourPassword!'          # パスワード
$csDomain  = 'example.com'             # ドメイン

# vCenter Server 情報
$vc        = 'vc01.example.com'        # FQDN
$vcUser    = 'administrator@vsphere.local'
$vcPassword = 'YourPassword!'

# ターゲットとする異常ステータス一覧
$targetStates = @(
    'PROVISIONING_ERROR',            # 展開エラー
    'ERROR',                         # エラー
    'AGENT_UNREACHABLE',             # エージェント応答なし
    'AGENT_ERR_STARTUP_IN_PROGRESS', # 起動処理中のままスタック
    'AGENT_ERR_DISABLED',            # 無効化エラー
    'AGENT_ERR_INVALID_IP',          # IP取得エラー
    'UNKNOWN'                        # 不明
)

#-------------------------------------------------------------------------
# 処理実行
#-------------------------------------------------------------------------
# モジュールのインポート
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# 1. Connection Server へ接続
Write-Host "Connecting to Connection Server..." -ForegroundColor Cyan
$hvServer = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

# 2. vCenter Server へ接続
Write-Host "Connecting to vCenter Server..." -ForegroundColor Cyan
Connect-VIServer -Server $vc -User $vcUser -Password $vcPassword

# 3. 異常な VM の検索と再起動
if ($hvServer) {
    foreach ($state in $targetStates) {
        # 指定したステータスの VM を取得
        $ProblemVMs = Get-HVMachineSummary -State $state

        foreach ($ProblemVM in $ProblemVMs) {
            $vmName = $ProblemVM.Base.Name
            Write-Host "異常な VM を検出しました: $vmName ($state)" -ForegroundColor Red
            
            # vCenter 経由で再起動を実行
            $VM = Get-VM -Name $vmName
            if ($VM) {
                Write-Host " -> 再起動コマンドを送信中..." -ForegroundColor Yellow
                Restart-VMGuest -VM $VM -Confirm:$false
            }
        }
    }
    # 切断処理
    Disconnect-HVServer -Server $cs -Confirm:$false
    Disconnect-VIServer -Server $vc -Confirm:$false
    Write-Host "処理が完了しました。" -ForegroundColor Green
} else {
    Write-Error "Connection Server への接続に失敗しました。"
}

このスクリプトをタスクスケジューラなどで定期実行すれば、管理者が気づく前にトラブルの芽を摘むことができます。

まとめ

本記事では、Horizon 7 から 8 への移行に伴う変化と、PowerCLI を活用した運用自動化について解説しました。

構成はシンプルに

Horizon 8 では View Composer が廃止され、Connection Server と vCenter だけでインスタントクローンが利用可能になりました。

運用はスマートに

PowerCLI を導入することで、証明書エラーの回避や、異常 VM の自動復旧など、手作業では限界のある運用を自動化できます。

以上、最後までお読みいただきありがとうございました。


created by Rinker
¥4,840 (2026/03/14 13:25:49時点 楽天市場調べ-詳細)
おすすめ書籍
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次