|
XenApp(旧 MetaFrame) サーバー運用でのネタです。 複数サーバー構成の場合のフォルダ同期 †パラメータファイルや環境の更新があった場合、すべての XenApp サーバーをメンテナンスする必要があります。 ツールはいろいろありますが、robocopy というツールを紹介します。 もともとは、リソースキットについていたのですが、Windows Vista/Windows 2008 Server 以降、OS に添付されるようになったようです。 リソースキットは以下からダウンロードできます。 バッチ起動の例 \\MASTER\Execute と D:\Execute を同期します。 @ECHO OFF SETLOCAL SET PATH=C:\Program Files\Windows Resource Kits\Tools\;%PATH% SET SRC=\\MASTER\Execute SET DST=D:\Execute SET LOGFILE=sync-%date:~-10,4%%date:~-5,2%%date:~-2,2%.log robocopy.exe %SRC% %DST% /E /COPY:DAT /NP /XO /A-:R /R:3 /W:5 /LOG:%LOGFILE% robocopy.exe %DST% %SRC% /E /COPY:DAT /NP /XO /A-:R /R:3 /W:5 /LOG+:%LOGFILE% ENDLOCAL パラメータの意味は以下になります。 /E 空のサブフォルダも対象
/COPY:DAT
D--データ
A--属性
T--タイムスタンプ
/NP コピー経過進行状況をログに記録しません
/XO 古いファイルは対象外
/A-:R ReadOnly 属性を外します
/R:3 コピー失敗時のリトライ回数を 3 回
/W:5 リトライする間隔を 5 秒
/LOG:<ファイル名> ログを記録します
/LOG+:<ファイル名> ログを追記します
ミラーリング機能(/MIR)もありますが、コピー元にないファイルやフォルダが、コピー先に存在すると、削除されてしまうので、あえて2回実行しています。 クライアント情報の取得 †普通にクライアント情報を取得したのでは、XenApp サーバーの情報が取得されます。 XenApp サーバーに接続したクライアントの情報を取得するためには、以下の手順を踏む必要があります。 (1) 現在実行されているのが XenApp サーバー上なのかを調べる(GetSystemMetrics) Private Const SM_REMOTESESSION As Long = &H1000&
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
'----------------------------------------------------------------------------
' XenApp のセッションかどうかを判定
'----------------------------------------------------------------------------
Public Function IsXenAppSession() As Boolean
IsXenAppSession = CBool(GetSystemMetrics(SM_REMOTESESSION))
End Function
ProcessIdToSessionId API で判定する方法もあったようです(これは知らなかった)が、Vista 以降では使えなくなったそうです。 (2) XenApp サーバーであれば、WTSQuerySessionInformation でクライアント情報を取得する。 WTSQuerySessionInformation については、いろいろなサイトで解説されていますので省略します。 2G以上のメモリを使用する †VBで作成したプログラムは、64ビットOS上でも、2G までしかメモリを使用できません。 |
||