VMware PowerCLI を使って Horizon 7 環境を制御する手順を紹介します。
VMware PowerCLI 6.5.2 以降では、MSI 形式の提供は廃止され、PowerShell Garallry 経由によるインストールとなったようです。
MSI 形式の提供を廃止した理由は、リリース期間の短縮や、より新機能をタイムリーに提供するためとのこと。
参考:
https://kogelog.com/2017/08/29/20170829-03/
https://www.powershellgallery.com/packages/VMware.PowerCLI/11.2.0.12780525
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. 緑色の [Clone or Download] をクリックし、[Download ZIP] をクリック
3. zip ファイルを解凍し、Modules\VMware.Hv.Helper フォルダを以下のディレクトリにコピー
・ユーザ固有 : %UserProfile%\Documents\WindowsPowerShell\Modules
・システム全体: C:\Program Files\WindowsPowerShell\Modules
4. 拡張機能を解除
dir 'C:\Program Files\WindowsPowerShell\Modules\VMware.Hv.Helper\' | Unblock-File
Horizon Connection Server 接続
Horizon Connection Server 接続
Connect-HVServer -Server cs01.example.com -User Administrator@example.com -Password Password
Horizon 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 1234
スクリプト例
仮想デスクトップの状態を表示するスクリプト例
#------------------------------------------------------------------------- # 変数 #------------------------------------------------------------------------- $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 EUC 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
以上