Horizon で仮想デスクトップの検証環境を構築する際に、多数のユーザが必要になることがあります。今回は、PowerShell を利用して AD ユーザを作成してみます。
今回の内容です。
利用する PowerShell モジュール
AD オブジェクトの操作には、「ActiveDirectory」モジュールを使用します。今回は、ドメイン コントローラの PowerShell プロンプトから実行しています。
Horizon のデスクトップ プールへのログイン資格の割り当てには、「VMware.Hv.Helper」モジュールを使用します。これは、下記のように用意した環境から実行しています。
1. 環境の構築
AD に、OU、セキュリティ グループ、ユーザを作成して、Horizon のデスクトップ プールへのログイン資格を割り当てます。OU は必須というわけではありませんが、AD でのオブジェクト管理や GPO 割り当てなどで利用しやすいので、あえて作成しています。
- OU: demo-ou-01
- セキュリティ グループ: demo-group-01
- ユーザ: demo-user-001 ~ demo-user-010。demo-group-01 グループ メンバー
作成する AD オブジェクトは、「Active Directory コンピューターとユーザー」で確認すると下記のようになります。
1-1. OU の作成
最初に、検証用のユーザとグループを格納する OU「demo-ou-01」を作成しておきます。あとで削除しやすいように、OU の「誤って削除されないようにオブジェクトを保護する」は無効(-ProtectedFromAccidentalDeletion:$false)にしておきます。
PS C:\> New-ADOrganizationalUnit -Name "demo-ou-01" -Path "DC=euc,DC=go-lab,DC=jp" -ProtectedFromAccidentalDeletion:$false
OU が作成されました。
PS C:\> Get-ADOrganizationalUnit -Identity "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" City : Country : DistinguishedName : OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp LinkedGroupPolicyObjects : {} ManagedBy : Name : demo-ou-01 ObjectClass : organizationalUnit ObjectGUID : 7353a007-e588-4d7b-8e3d-09a9ef44158a PostalCode : State : StreetAddress :
1-2. AD グループの作成
作成した OU に、セキュリティ グループ「demo-group-01」を作成します。
PS C:\> New-ADGroup -Name "demo-group-01" -Path "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" -GroupScope DomainLocal
グループが作成されました。
PS C:\> Get-ADGroup -Identity "demo-group-01" DistinguishedName : CN=demo-group-01,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp GroupCategory : Security GroupScope : DomainLocal Name : demo-group-01 ObjectClass : group ObjectGUID : 561bf46f-29e9-4c09-b114-5fd078e46b68 SamAccountName : demo-group-01 SID : S-1-5-21-292336108-2836314746-956363601-1131
1-3. AD ユーザの作成
ユーザの作成には New-ADUser、ユーザのグループへの追加は Add-ADGroupMember を使用します。
今回は、下記のようなスクリプトを用意しました。
create_ad_user.ps1
- ユーザ名は、demo-user-<数字3桁>
- 10 ユーザ(demo-user-001 ~ demo-user-010)を作成。ユーザ数は6行目で指定。
下記のようにスクリプトを実行するか、もしくは PowerShell のプロンプトでスクリプトの内容を1行ずつ実行します。
PS C:\> .\create_ad_user.ps1 User Name: demo-user-001 User Name: demo-user-002 User Name: demo-user-003 User Name: demo-user-004 User Name: demo-user-005 User Name: demo-user-006 User Name: demo-user-007 User Name: demo-user-008 User Name: demo-user-009 User Name: demo-user-010
ユーザが作成され、demo-group-01 グループのメンバーになりました。
PS C:\> Get-ADGroupMember -Identity "demo-group-01" | Select-Object objectClass,name | Sort-Object name objectClass name ----------- ---- user demo-user-001 user demo-user-002 user demo-user-003 user demo-user-004 user demo-user-005 user demo-user-006 user demo-user-007 user demo-user-008 user demo-user-009 user demo-user-010
1-4. Horizon デスクトップ プールへの資格の割り当て
PowerCLI で、デスクトップ プールにログイン資格を割り当てます。
これは、PowerCLI と Hv.Helper が利用できる環境で実行します。
デスクトップ プールは、下記のように用意しておきます。
今回は、「test-win2019-pool-02」というデスクトップ プールに資格を割り当てます。事前に、Connct-HvServer で Connection Server にログインしておきます。
PS C:\Users\user01> Get-HVPoolSummary -PoolName "test-win2019-pool-02" | Format-List Name : test-win2019-pool-02 DisplayName : Test Win2019 Pool 02 Type : AUTOMATED Source : INSTANT_CLONE_ENGINE User Assignment : FLOATING Entitled : 3 Enabled : True Sessions : 3
デスクトップ プールに、セキュリティ グループを指定して資格(Entitlement)を割り当てます。
New-HVEntitlement でグループを指定する場合は、グループ名は「-User」に指定して、一緒に「-Type Group」を指定します。
PS C:\Users\user01> New-HVEntitlement -ResourceName "test-win2019-pool-02" -User "demo-group-01@euc.go-lab.jp" -Type Group 1 resource(s) will be entitled with UserOrGroup: demo-group-01@euc.go-lab.jp
資格が割り当てれられました。
PS C:\Users\user01> Get-HVEntitlement -ResourceName "test-win2019-pool-02" -User "demo-group-01@euc.go-lab.jp" | Format-List Id : VMware.Hv.UserOrGroupId Base : VMware.Hv.ADUserOrGroupBase LocalData : VMware.Hv.EntitledUserOrGroupLocallyEntitledData SessionData : VMware.Hv.EntitledUserOrGroupUserSessionData
割り当てた資格の情報は、JSON などに変換すると確認しやすくなります。
PS C:\Users\user01> Get-HVEntitlement -ResourceName "test-win2019-pool-02" -User "demo-group-01@euc.go-lab.jp" | ConvertTo-Json { "Id": { "Id": "UserOrGroup/Uy0xLTUtMjEtMjkyMzM2MTA4LTI4MzYzMTQ3NDYtOTU2MzYzNjAxLTExMzE" }, "Base": { "Sid": "S-1-5-21-292336108-2836314746-956363601-1131", "Group": true, "Domain": "euc.go-lab.jp", "DomainNetbiosName": "EUC", "AdDistinguishedName": "CN=demo-group-01,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp", "Name": "demo-group-01", "FirstName": null, "LastName": null, "LoginName": "demo-group-01", "DisplayName": "euc.go-lab.jp\\demo-group-01", "LongDisplayName": "demo-group-01/euc.go-lab.jp", "UserDisplayName": null, "Email": null, "KioskUser": false, "UnauthenticatedAccessUser": false, "Phone": null, "Description": null, "InFolder": null, "UserPrincipalName": null, "Guid": "6FF41B56E929094CB1145FD078E46B68", "FormattedGuid": "561BF46F-29E9-4C09-B114-5FD078E46B68" }, "LocalData": { "Machines": null, "PersistentDisks": null, "Desktops": [ "VMware.Hv.DesktopId" ], "DesktopUserEntitlements": [ "VMware.Hv.UserEntitlementId" ], "Applications": null, "ApplicationUserEntitlements": null, "UrlRedirectionSettings": null, "UrlRedirectionUserEntitlements": null }, "SessionData": { "DesktopLocalSessionCount": 0, "DesktopLocalSessions": null, "ApplicationLocalSessionCount": 0, "ApplicationLocalSessions": null } } PS C:\Users\user01>
1-5. ログイン確認
Horizon Connection Server に Horizon HTML Access などでアクセスすると、demo-group-01 グループ メンバーのユーザでログインできるはずです。
今回のドメインは euc.go-lab.jp(NetBIOS 名は EUC)なので、「EUC\demo-user-001」~「EUC\demo-user-010」ユーザでログインできます。
資格を割り当てたデスクトップ プールが表示されます。
プールで仮想デスクトップが準備できていれば、ログインできるはずです。今回は 10ユーザほど作成したので、同時ログインできるようにするにはデスクトップ プールの「仮想マシンの最大数」も 10以上に設定しておきます。
2. 環境の削除
検証が終わったら、作成した AD オブジェクトを削除することになります。これは、作成とは逆順で実施します。
2-1. Horizon デスクトップ プールへの資格の削除
デスクトップ プールから資格を削除します。
PS C:\Users\user01> Remove-HVEntitlement -ResourceName "test-win2019-pool-02" -User "demo-group-01@euc.go-lab.jp" -Type Group 1 desktopUserEntitlement(s) will be removed for UserOrGroup demo-group-01@euc.go-lab.jp
資格が削除されました。
PS C:\Users\user01> Get-HVEntitlement -ResourceName "test-win2019-pool-02" -User "demo-group-01@euc.go-lab.jp" Get-HVEntitlement: No entitlements found with given search parameters
2-2. AD ユーザの削除
AD ユーザを削除します。念のため、-WhatIf で実行対象を確認しておきます。
PS C:\> Get-ADUser -SearchBase "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" -Filter * | Sort-Object Name | Remove-ADUser -WhatIf WhatIf: 対象 "CN=demo-user-001,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-002,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-003,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-004,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-005,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-006,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-007,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-008,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-009,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。 WhatIf: 対象 "CN=demo-user-010,OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" に対して操作 "Remove" を実行しています。
実際にユーザを削除します。
PS C:\> Get-ADUser -SearchBase "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" -Filter * | Sort-Object Name | Remove-ADUser -Confirm:$false
削除されました。
PS C:\> Get-ADUser -SearchBase "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" -Filter * PS C:\>
2-3. AD グループの削除
AD グループを削除します。
PS C:\> Get-ADGroup -Identity "demo-group-01" | Remove-ADGroup -Confirm:$false
2-4. OU の削除
最後に、OU を削除します。
PS C:\> Get-ADOrganizationalUnit -Identity "OU=demo-ou-01,DC=euc,DC=go-lab,DC=jp" | Remove-ADOrganizationalUnit -Confirm:$false
これで、検証開始時の状態に戻ったはずです。
以上、Horizon 検証むけに PowerShell で AD ユーザを作成してみる話でした。