PowershellでCitrix XenApp 7.xのメンテナンスモードの切り替えを自動化する

負荷評価基準とメンテナンスモード

XenApp 6.x以前では負荷評価基準を用いることで公開アプリケーションへのアクセスの有効と無効をスケジューリングする事が可能でした。負荷評価基準とワーカーグループをポリシーで適切に設定する事で、XenAppサーバーを輪番的に停止する事が可能だったワケです。また、アクセスを禁止出来るのはICAを用いた接続だけで、RDPは利用可能なため管理者のメンテナンスはRDPで実施すればよいという状況を作る事が可能です。(change logon /disableでログオン禁止にするとRDPも接続できないので管理者も触れない)

しかしXenApp7.x世代ではポリシーで公開アプリケーションへのアクセスを制御する事はできず、デリバリーグループもしくはマシンに対しメンテナンスモードを有効にすることで同様の制御を行う方式に変更されました。(XenDesktopは昔からなのかな?)

ではXenApp7.x世代でメンテナンスモードをスケジュール化するにはどうすれば良いのかというと、GUIで行う全ての操作がPowershellコマンドで実現可能だそうで、メンテナンスモードのOn/Offもコマンドで出来ます。なのでPowershellスクリプトに書いてDelivery Controllerのタスクスケジューラーで実行すればよいのです!

ここから先の記載は未来の自分への覚書きです。

PS1の作成

↓の様な事をつらつら書いたps1を作る。
たとえばメンテモードOnのPS1ファイルを書くならこんな感じ。

Add-PSSnapin Citrix.Broker.Admin.V2
Set-BrokerMachineMaintenanceMode -InputObject Domain\Computername1 $true
Set-BrokerMachineMaintenanceMode -InputObject Domain\Computername2 $true
Set-BrokerMachineMaintenanceMode -InputObject Domain\Computername3 $true

$trueがメンテモードON、$falseがメンテモードOff
trueのps1とfalseのps1を作っておき、ONのタスクとOFFのタスクで設定すればよし。
仮に作成するps1ファイルは「c:\hogehoge\example1.ps1」とすしてタスクの実装は次の通り。

タスクへの投入方法

実行するプログラムにはPowershell.exeを指定「C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe」
引数にはオプションと作ったps1ファイルを指定「-Command “.\example.ps1″」
開始にはps1ファイルが置いてあるフォルダーを指定「C:\hogehoge」

スケジューリングはトリガーを駆使する
例えば0時にメンテモードをONにするタスクを実行しユーザー利用禁止に、そして23時にメンテOFFのタスクを実行し翌日はユーザーに開放する。
これを曜日毎に対象サーバーを変えてやれば輪番メンテが可能になるという仕組みです。

結論

XenApp6.x世代に慣れていた自分としてはポリシーで管理できない事に戸惑いましたが、コマンド+タスクの方が実は細やかにスケジュールを調整する事が出来たり、突然の例外(今日はこのコンピューターはメンテ対象から外したい!とか、今日はメンテせずに稼働状態にしておきたい!の様な)にも素早く対応できますし、かつXenApp管理に不慣れな人にも分かりやすいので、これはこれでアリじゃないかと思いました。

コメント

タイトルとURLをコピーしました