タスクスケジューラーと組み合わせて、Remote Desktop (正確にはリモートデスクトップ セッションホスト) をインストールする方法を。
DSC で構成すればよさそうですが、タスクスケジューラーを使用した後続処理の実行方法を検証する必要がありそうだったので、今回はタスクスケジューラーを利用しています。
リモートデスクトップ 接続ブローカーが存在しており、リモートデスクトップ接続ブローカーから、ブローカーの管理配下に対して、セッションホストを追加する場合には、セッションホストの機能を追加した後に、再起動の待機が行えますので、今回のような処理は「ワークグループ環境」や「リモートデスクトップ接続ブローカーの管理下にはおかない、ドメイン環境のセッションホストの構築」といったケースで使用することになるかと。
今回は二つのスクリプトを使用しています。
最初に用意したものが以下のスクリプトです。
Param( $LicenseServer = "<ライセンスサーバー IP アドレス or ホストメイン>", $AllowRD = "WinNT://<ドメイン名>/<ユーザー名>,user" ) $ErrorActionPreference = "Stop" $LogFile = "C:\Scripts\Log.txt" try{ Install-WindowsFeature -Name RDS-RD-Server -IncludeManagementTools $ScheduleJobOption = New-ScheduledJobOption -RunElevated $Argument = @" -NoLogo -WindowStyle Hidden -ExecutionPolicy ByPass -File "C:\Scripts\Set-RDServerSetting.ps1" -LicenseServer "$LicenseServer" -AllowRD "$AllowRD" "@ $Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $Argument Register-ScheduledTask -TaskName "Set-RDServerSetting" -User "SYSTEM" -RunLevel Highest -Action $Action -Trigger (New-JobTrigger -AtStartup) }catch [Exception]{ $ERROR[0] | Out-File $LogFile -Append }finally{ } Restart-Computer -Force
実施している内容としては、セッションホストの機能の追加と、機能を追加した後に実行するスクリプトを「システム起動時」に実行するタスクスケジューラーのジョブとして登録を行っています。
セッションホストインストール後には、ライセンスサーバーの指定と、「Remote Desktop Users」 にユーザーを追加する必要がありますので、設定についても起動時に実行するスクリプトに渡しています。
今回の環境ですが、Windows Server 2012 R2 を使用しているため、ローカルグループへのユーザーの登録は「ADSI Win NT プロバイダー」を使用しているため、含めるユーザー (またはドメイン) の指定については、プロバイダーの設定時に使用する形式にしています。
最新の PowerShell を使用しているのであれば Add-LocalGroupMember を使用してもよいかと。
これで、セッションホストの役割の追加と役割追加後に再起動までは実施できるかと。
今回は「C:\Scripts\Set-RDServerSetting.ps1」を次処理として実行しているのですが、このスクリプトには以下のような処理を記載しています。
Param( $LicenseServer, $AllowRD ) $ErrorActionPreference = "Stop" $LogFile = "C:\Scripts\Log.txt" try{ (Get-WmiObject -Namespace root\cimv2\TerminalServices -Class Win32_TerminalServiceSetting).ChangeMode(4) | Out-Null (Get-WmiObject -Namespace root\cimv2\TerminalServices -Class Win32_TerminalServiceSetting).SetSpecifiedLicenseServerList($LicenseServer) | Out-Null $lg = [ADSI]"WinNT://localhost/Remote Desktop Users,group" $ldapaccount = [ADSI]$AllowRD $lg.psbase.Invoke("Add", $ldapaccount.psbase.Path) }catch [Exception]{ $ERROR[0] | Out-File $LogFile -Append }finally{ Get-ScheduledTask -TaskName "Set-RDServerSetting" -ErrorAction SilentlyContinue | Unregister-ScheduledTask -ErrorAction Stop -Confirm:$false } Restart-Computer -Force
ライセンスモードの変更 / ライセンスサーバーの指定 / Remote Desktop Users のローカルグループに、ドメインユーザーを追加 / タスクスケジューラーに登録したジョブの削除
というような処理を実施し、最後に再起動を実施しています。
再起動は必要ではないのですが、処理が流れ終わったことを確認するために今回は記載しています。
正常に動作すれば、ライセンスサーバーが認識されたセッションホストとして構築が行えているかと。