vm.gowatana.jp

NEOにほんごVMware(仮)

Horizon を PowerCLI で操作してみる。(環境構築編)

PowerShell と PowerCLI から、Horizon を操作する準備をしてみます。Horizon を操作する PowerShell モジュールについては、以前は Horizon Connection Server に同梱されていたものが利用されていました。そして最近では、PowerCLI 同梱のモジュールと GitHub で公開されている VMware.Hv.Helper モジュールをあわせて利用します。

 

VMware のドキュメントでは、下記のあたりが参考になります。

 

今回の内容です。

 

1. 今回の環境

Windows Server 2019 の PowerShell から、Horizon 8 環境を操作します。

 

PowerShell

Windows Server 2019 にデフォルトでインストールされている PowerShell 5.1 を使用します。

PS C:\Users\user01> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.1007
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.1007
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

 

Horizon 環境

下記の投稿で用意したラボを使用しています。

 

2. PowerCLI のインストール

PoewrCLI は、PowerShell Gallery からインターネット経由でインストールします。

PowerShell のコンソールを起動して、コマンドを実行していきます。

まず、NuGet プロバイダーのバージョンが古いので、2.8.5.201 以上にアップデートしておきます。

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Scope CurrentUser -Force

 

今回は、2.8.5.208 がインストールされました。

PS C:\Users\user01> Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Scope CurrentUser -Force

Name                           Version          Source           Summary
----                           -------          ------           -------
nuget                          2.8.5.208        https://onege... NuGet provider for the OneGet meta-package manager

 

Gallery のリポジトリを信頼しておきます。

Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

 

Install-Module を実行して、VMware.PowerCLI をインストールします。これで、PowerCLI が、インターネット経由でインストールされます。数分ほど待ちます・・・

Install-Module VMware.PowerCLI -Scope CurrentUser

 

インストールされた PowerCLI のバージョンを確認しておきます。

Get-Module -Name VMware.PowerCLI -ListAvailable | select Name,Version

 

今回は、12.6 がインストールされました。

PS C:\Users\user01> Get-Module -Name VMware.PowerCLI -ListAvailable | select Name,Version

Name            Version
----            -------
VMware.PowerCLI 12.6.0.19610541

 

PowerCLI の、CEIP(カスタマー エクスペリエンス向上プログラム)設定を済ませておきます。ここでは無効(-ParticipateInCEIP $false)にしています。

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false

 

Horizon への接続には、PowerCLI に含まれている VMware.VimAutomation.HorizonView モジュールを利用します。

Get-Command -Module VMware.VimAutomation.HorizonView | Sort-Object Noun,Verb | select Name

 

このモジュールには、Horizon Connection Server に接続するためのモジュールしか含まれていません。

PS C:\Users\user01> Get-Command -Module VMware.VimAutomation.HorizonView | select Name

Name
----
Get-HvCommand
Connect-HVServer
Disconnect-HVServer

 

これだけでは操作が困難なので、GitHub で公開されている VMware.Hv.Helper モジュールを追加インストールします。

 

3. VMware.Hv.Helper のインストール

VMware.Hv.Helper モジュールは、GitHub で公開されている PowerCLI-Example-Scripts に含まれています。

 

今回は、VMware.Hv.Helper モジュールのフォルダを、ログオンしているユーザの PowerShell モジュール フォルダに保存しておきます。

PowerShell モジュール フォルダは、環境変数「$Env:PSModulePath」で確認できます。

PS C:\Users\user01> $Env:PSModulePath
C:\Users\user01\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PS C:\Users\user01> $Env:PSModulePath -split ";"
C:\Users\user01\Documents\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules

 

このうち、1つめのパス(ユーザの $HOME 配下の)が、ユーザごとの PowerShell モジュールフォルダです。変数に格納しておき、あとでコピー先の指定に利用します。

$user_ps_module_path = $Env:PSModulePath -split ";" | select -First 1

 

パスを変数に格納して、確認しておきます。

PS C:\Users\user01> $user_ps_module_path = $Env:PSModulePath -split ";" | select -First 1
PS C:\Users\user01> $user_ps_module_path
C:\Users\user01\Documents\WindowsPowerShell\Modules

 

PowerShell モジュール フォルダは、PowerCLI を「-Scope CurrentUser」オプションでインストールした時点で作成されているはずです。

PS C:\Users\user01> Get-Item $user_ps_module_path

    ディレクトリ: C:\Users\user01\Documents\WindowsPowerShell

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2022/05/15     16:19                Modules

 

PowerCLI-Example-Scripts の Zip アーカイブをダウンロードします。

Invoke-WebRequest -Uri "https://github.com/vmware/PowerCLI-Example-Scripts/archive/refs/heads/master.zip" -OutFile "PowerCLI-Example-Scripts.zip"

 

Zip アーカイブを、work フォルダに展開しておきます。

Expand-Archive -Path "./PowerCLI-Example-Scripts.zip" -DestinationPath "./work"

 

ファイルが展開されました。

PS C:\Users\user01> Expand-Archive -Path "./PowerCLI-Example-Scripts.zip" -DestinationPath "./work"
PS C:\Users\user01> ls ./work

    ディレクトリ: C:\Users\user01\work

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2022/05/15     16:48                PowerCLI-Example-Scripts-master

 

VMware.Hv.Helper モジュールのフォルダをコピーします。

cp -Recurse ./work/PowerCLI-Example-Scripts-master/Modules/VMware.Hv.Helper $user_ps_module_path/

 

これで VMware.Hv.Helper モジュールがインストールできたので、モジュールが認識できることを確認しておきます。

Get-Module -Name VMware.Hv.Helper -ListAvailable | select Name,Version

 

バージョンは、1.3.1 です。

PS C:\Users\user01> Get-Module -Name VMware.Hv.Helper -ListAvailable | select Name,Version

Name             Version
----             -------
VMware.Hv.Helper 1.3.1

 

VMware.Hv.Helper には、下記のコマンドが含まれます。

PS C:\Users\user01> Get-Command -Module VMware.Hv.Helper | Sort-Object Noun,Verb | select Name

Name
----
Get-HVApplication
Remove-HVApplication
Set-HVApplication
Remove-HVApplicationIcon
Set-HVApplicationIcon
Get-HVBaseImageVM
Add-HVDesktop
Get-HVEntitlement
New-HVEntitlement
Remove-HVEntitlement
Connect-HVEvent
Disconnect-HVEvent
Get-HVEvent
Clear-HVEventDatabase
Get-HVEventDatabase
Set-HVEventDatabase
Get-HVFarm
New-HVFarm
Remove-HVFarm
Set-HVFarm
Start-HVFarm
Get-HVFarmSummary
Get-HVGlobalEntitlement
New-HVGlobalEntitlement
Remove-HVGlobalEntitlement
Set-HVGlobalEntitlement
Get-HVGlobalSession
Get-HVGlobalSettings
Set-HVGlobalSettings
Get-HVHealth
Get-HVHomeSite
New-HVHomeSite
Set-HVInstantCloneMaintenance
Get-HVInternalName
Get-HVlicense
Set-HVlicense
Get-HVLocalSession
Get-HVMachine
Rebuild-HVMachine
Remove-HVMachine
Reset-HVMachine
Set-HVMachine
Get-HVMachineSummary
New-HVManualApplication
Register-HVPod
Unregister-HVPod
Get-HVPodFederation
New-HVPodFederation
Remove-HVPodFederation
Set-HVPodFederation
Get-HVPool
New-HVPool
Remove-HVPool
Set-HVPool
Start-HVPool
Get-HVPoolSpec
Get-HVPoolSummary
Get-HVPreInstalledApplication
New-HVPreInstalledApplication
Get-HVQueryFilter
Get-HVQueryResult
Add-HVRDSServer
Get-HVResourceStructure
Get-HVSite
New-HVSite
Remove-HVSite
Set-HVSite
Get-HVSyslog
Set-HVSyslog
Get-HVvCenterServer
Get-HVvCenterServerHealth

 

ついでに、操作対象ごとにサマリ表示しておきます。

PS C:\Users\user01> Get-Command -Module VMware.Hv.Helper | group Noun | select Count,Name,{$_.Group.Verb -join ","} | Sort-Object Name

Count Name                      $_.Group.Verb -join ","
----- ----                      -----------------------
    3 HVApplication             Get,Remove,Set
    2 HVApplicationIcon         Remove,Set
    1 HVBaseImageVM             Get
    1 HVDesktop                 Add
    3 HVEntitlement             Get,New,Remove
    3 HVEvent                   Connect,Disconnect,Get
    3 HVEventDatabase           Clear,Get,Set
    5 HVFarm                    Get,New,Remove,Set,Start
    1 HVFarmSummary             Get
    4 HVGlobalEntitlement       Get,New,Remove,Set
    1 HVGlobalSession           Get
    2 HVGlobalSettings          Get,Set
    1 HVHealth                  Get
    2 HVHomeSite                Get,New
    1 HVInstantCloneMaintenance Set
    1 HVInternalName            Get
    2 HVlicense                 Get,Set
    1 HVLocalSession            Get
    5 HVMachine                 Get,Rebuild,Remove,Reset,Set
    1 HVMachineSummary          Get
    1 HVManualApplication       New
    2 HVPod                     Register,Unregister
    4 HVPodFederation           Get,New,Remove,Set
    5 HVPool                    Get,New,Remove,Set,Start
    1 HVPoolSpec                Get
    1 HVPoolSummary             Get
    2 HVPreInstalledApplication Get,New
    1 HVQueryFilter             Get
    1 HVQueryResult             Get
    1 HVRDSServer               Add
    1 HVResourceStructure       Get
    4 HVSite                    Get,New,Remove,Set
    2 HVSyslog                  Get,Set
    1 HVvCenterServer           Get
    1 HVvCenterServerHealth     Get

 

4. Horizon Connection Server への接続

Horizon Connection Server の証明書を入れ替えていないため、証明書エラーを無視するように設定しておきます。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope User -Confirm:$false

 

Connection Server に接続します。

  • 192.168.80.41 は、このラボの Connection Server のアドレスです。FQDN 指定でうまく接続できない場合、IP アドレスを指定するとよいかもしれません。
  • この環境の AD ドメインの NetBIOS 名は EUC です。
  • 今回も、AD ドメインの Administrator ユーザで接続しています。
Connect-HVServer "192.168.80.41" -Domain "EUC" -User "Administrator" -Password "VMware1!"

 

デスクトップ プールのサマリ情報を表示してみます。

Get-HVPoolSummary | ft -AutoSize

 

実際には、下記のようになるはずです。

 

ちなみに、PowerShell モジュールはコマンドを実行すると自動的に読み込まれますが、下記のようにあらかじめ読み込んでおくこともできます。

Import-Module VMware.Hv.Helper

 

以上、PowerShell と PowerCLI での Horizon 操作環境を準備してみる話でした。

続きはこちら。