Horizon 8 デスクトップ プールの空き状況を、おおまかに PowerCLI で取得してみます。View API を直接利用するよりも手軽な、PowerCLI の VMware Hv.Helper モジュールを利用しています。
今回の内容です。
今回の環境
Horizon のデスクトップ プールは、下記の要領で作成してあります。
test-win2019-pool-02 という名前のデスクトップ プールを作成してあり、デスクトップは 5つ展開されています。
デスクトップは、5つとも利用可能(AVAILABLE)になっています。
そして、PowerCLI の実行環境は下記のように準備してあります。
PowerCLI でのデスクトップ情報の取得
まず、PowerCLI の VMware.HvHelper に含まれる Connect-HvServer で、Horizon Connection Server に、下記のように接続しておきます。
Connect-HVServer "192.168.80.41" -Domain "EUC" -User "Administrator" -Password "VMware1!"
もっとも簡単に仮想デスクトップの情報を取得できるのは、Get-HVMachineSummary かなと思います。しかし、このコマンドレットの結果は整形しにくいので、今回は Get-HVMachine を利用します。
PS C:\work> Get-HVMachineSummary -PoolName "test-win2019-pool-02" | ft -AutoSize Machine DesktopPool DNS Name User Host Agent Datastore Status ------- ----------- -------- ---- ---- ----- --------- ------ test-ic-03 test-win2019-pool-02 test-ic-03.euc.go-lab.jp 192.168.80.31 8.5.0 Datastore-Local-VMFS-31 AVAILABLE test-ic-01 test-win2019-pool-02 test-ic-01.euc.go-lab.jp 192.168.80.31 8.5.0 Datastore-Local-VMFS-31 AVAILABLE test-ic-04 test-win2019-pool-02 test-ic-04.euc.go-lab.jp 192.168.80.31 8.5.0 Datastore-Local-VMFS-31 AVAILABLE test-ic-05 test-win2019-pool-02 test-ic-05.euc.go-lab.jp 192.168.80.31 8.5.0 Datastore-Local-VMFS-31 AVAILABLE test-ic-02 test-win2019-pool-02 test-ic-02.euc.go-lab.jp 192.168.80.31 8.5.0 Datastore-Local-VMFS-31 AVAILABLE
Get-HVMachine をただ実行すると、下記のような出力になってしまい、このままではデスクトップの情報がわかりません。
PS C:\work> Get-HVMachine -PoolName "test-win2019-pool-02" Id : VMware.Hv.MachineId Base : VMware.Hv.MachineBase MessageSecurityData : VMware.Hv.MachineMessageSecurityData ManagedMachineData : VMware.Hv.MachineManagedMachineData MachineAgentPairingData : VMware.Hv.MachineAgentPairingData Id : VMware.Hv.MachineId Base : VMware.Hv.MachineBase MessageSecurityData : VMware.Hv.MachineMessageSecurityData ManagedMachineData : VMware.Hv.MachineManagedMachineData MachineAgentPairingData : VMware.Hv.MachineAgentPairingData Id : VMware.Hv.MachineId Base : VMware.Hv.MachineBase MessageSecurityData : VMware.Hv.MachineMessageSecurityData ManagedMachineData : VMware.Hv.MachineManagedMachineData MachineAgentPairingData : VMware.Hv.MachineAgentPairingData Id : VMware.Hv.MachineId Base : VMware.Hv.MachineBase MessageSecurityData : VMware.Hv.MachineMessageSecurityData ManagedMachineData : VMware.Hv.MachineManagedMachineData MachineAgentPairingData : VMware.Hv.MachineAgentPairingData Id : VMware.Hv.MachineId Base : VMware.Hv.MachineBase MessageSecurityData : VMware.Hv.MachineMessageSecurityData ManagedMachineData : VMware.Hv.MachineManagedMachineData MachineAgentPairingData : VMware.Hv.MachineAgentPairingData
そこで、API リファレンスを参考に必要な情報を探します。今回主に取得している情報は、下記のあたりです。
- Data Object - MachineBase
https://vdc-download.vmware.com/vmwb-repository/dcr-public/7b357671-a96d-4349-b05a-82cc421fd3b2/dd271926-0324-40ee-8cc0-3f7463062ba2/vdi.resources.Machine.MachineBase.html
Get-HVMachine で取得できる結果から、さらに select(Select-Object)で、 MachineBase の情報を取得しています。
Get-HVMachine -PoolName "test-win2019-pool-02" | select ` @{N="DesktopPool";E={$_.Base.DesktopName}}, @{N="Desktop";E={$_.Base.Name}}, @{N="BasicState";E={$_.Base.BasicState}}, @{N="SessionCount";E={$_.Base.Session.count}}
実際には、下記のように情報取得できます。
PS C:\work> Get-HVMachine -PoolName "test-win2019-pool-02" | select ` >> @{N="DesktopPool";E={$_.Base.DesktopName}}, >> @{N="Desktop";E={$_.Base.Name}}, >> @{N="BasicState";E={$_.Base.BasicState}}, >> @{N="SessionCount";E={$_.Base.Session.count}} DesktopPool Desktop BasicState SessionCount ----------- ------- ---------- ------------ test-win2019-pool-02 test-ic-03 AVAILABLE 0 test-win2019-pool-02 test-ic-01 AVAILABLE 0 test-win2019-pool-02 test-ic-04 AVAILABLE 0 test-win2019-pool-02 test-ic-05 AVAILABLE 0 test-win2019-pool-02 test-ic-02 AVAILABLE 0
ユーザがデスクトップに接続すると、下記のように BasicState が CONNECTED になります。
PS C:\work> Get-HVMachine -PoolName "test-win2019-pool-02" | select ` >> @{N="DesktopPool";E={$_.Base.DesktopName}}, >> @{N="Desktop";E={$_.Base.Name}}, >> @{N="BasicState";E={$_.Base.BasicState}}, >> @{N="SessionCount";E={$_.Base.Session.count}} DesktopPool Desktop BasicState SessionCount ----------- ------- ---------- ------------ test-win2019-pool-02 test-ic-03 AVAILABLE 0 test-win2019-pool-02 test-ic-01 AVAILABLE 0 test-win2019-pool-02 test-ic-04 CONNECTED 1 test-win2019-pool-02 test-ic-05 AVAILABLE 0 test-win2019-pool-02 test-ic-02 AVAILABLE 0
デスクトップ ステータスの集計
PowerShell の Group-Object を利用することで、下記のように集計することもできます。
Get-HVMachine -PoolName "test-win2019-pool-02" | select ` @{N="DesktopPool";E={$_.Base.DesktopName}}, @{N="Desktop";E={$_.Base.Name}}, @{N="BasicState";E={$_.Base.BasicState}}, @{N="SessionCount";E={$_.Base.Session.count}} | Group-Object BasicState | Sort-Object Name | select Name,Count
実際にコマンドラインを実行すると、下記のようにデスクトップの状態が集計できました。
PS C:\work> Get-HVMachine -PoolName "test-win2019-pool-02" | select ` >> @{N="DesktopPool";E={$_.Base.DesktopName}}, >> @{N="Desktop";E={$_.Base.Name}}, >> @{N="BasicState";E={$_.Base.BasicState}}, >> @{N="SessionCount";E={$_.Base.Session.count}} | >> Group-Object BasicState | Sort-Object Name | select Name,Count Name Count ---- ----- AVAILABLE 4 CONNECTED 1
デスクトップ ステータスの簡易 HTML レポート生成例
PowerShell では、ConvertTo-Html を利用してテーブルを HTML に変換することもできます。
Get-HVMachine -PoolName "test-win2019-pool-02" | select ` @{N="DesktopPool";E={$_.Base.DesktopName}}, @{N="Desktop";E={$_.Base.Name}}, @{N="BasicState";E={$_.Base.BasicState}}, @{N="SessionCount";E={$_.Base.Session.count}} | Group-Object BasicState | Sort-Object Name | select Name,Count | ConvertTo-Html
このスクリプトは、下記のようにデスクトップ プールを指定して実行します。
PS C:\work> .\get_desktop_pool_status_count.ps1 "test-win2019-pool-02"
実際に実行すると、下記のように HTML が出力されます。
これらのコマンドレットを組み合わせると、簡易的なプール状況確認ページを作成できたりします。今回は下記のようなスクリプトを作成してみました。
get_desktop_pool_status_count.ps1
スクリプトを実行すると、下記のような感じです。
生成した HTML ファイルを Web ブラウザで表示してみました。
ちなみに、再プロビジョニングなどで AVAILABLE 以外の状態のデスクトップがあると、下記のように行が増えます。
これで簡易的なデスクトップ プールの状況確認ができるはず・・・
以上、PowerCLI で Horizon デスクトップ プールの様子を見てみる話でした。