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 に含まれています。
- PowerCLI-Example-Scripts
https://github.com/vmware/PowerCLI-Example-Scripts - VMware.Hv.Helper
https://github.com/vmware/PowerCLI-Example-Scripts/tree/master/Modules/VMware.Hv.Helper
今回は、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 操作環境を準備してみる話でした。
続きはこちら。