2010/01/19

VDI ドキュメントのミス訂正

マイクロソフトの Windows Server 2008 R2 ホーム からダウンロードできる「Windows Server 2008 R2 機能評価ガイド[仮想化編] 仮想デスクトップ インフラストラクチャ(VDI)」([XPS][PDF])の記述にミスを見つけましたので、この場を借りて訂正させてください。「ステップ 2: 仮想デスクトップ用仮想マシンの作成と構成」の RDP のアクセス許可の設定のところです。

Hyper-V 上の仮想マシンを VDI の仮想デスクトップとして構成するためには、仮想マシンのゲスト OS でいくつか準備が必要です。その中の1つである RDP のアクセス許可の設定ですが、前述のドキュメントには次のような WMIC コマンドを記述しています (/node:localhost は省略可、CONTOSO\HV$ は RD 仮想化ホストのコンピューター名) 。
--------------------------------------------------------------------------------
WMIC /node:localhost RDPERMISSIONS where TerminalName="RDP-Tcp" CALL AddAccount "CONTOSO\HV$",1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\HV$'" CALL ModifyPermissions 0,1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\HV$'" CALL ModifyPermissions 2,1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\HV$'" CALL ModifyPermissions 9,1
NET STOP termservice
NET START termservice
--------------------------------------------------------------------------------
 
このコマンドラインの一部にミスがありました。正しくは、以下のように、WHERE 句内では \ (円サイン) を \\ のようにエスケープする必要があります。こうしないと、「無効なクエリです」というエラーが返されます。
--------------------------------------------------------------------------------
WMIC /node:localhost RDPERMISSIONS where TerminalName="RDP-Tcp" CALL AddAccount "CONTOSO\HV$",1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" CALL ModifyPermissions 0,1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" CALL ModifyPermissions 2,1
WMIC /node:localhost RDACCOUNT where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" CALL ModifyPermissions 9,1
NET STOP termservice
NET START termservice
--------------------------------------------------------------------------------
実は、もう1つ問題があります。上記のコマンドラインは、ゲスト OS が Windows 7 または Windows Vista の場合にのみ利用できます。ゲスト OS が Windows XP の場合は、WMIC のエイリアスとして RDPERMISSIONS や RDACCOUNT が存在しないため、「エイリアスがありません」というエラーが返ってきます。Windows XP ゲストの場合は、次のように WMIC を実行します。
--------------------------------------------------------------------------------
WMIC PATH WIN32_TSPermissionsSetting.TerminalName="RDP-TCP" call AddAccount "CONTOSO\HV$",1
WMIC PATH WIN32_TSAccount where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" call ModifyPermissions 0,1
WMIC PATH WIN32_TSAccount where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" call ModifyPermissions 2,1
WMIC PATH WIN32_TSAccount where "(TerminalName='RDP-Tcp' or TerminalName='Console') and AccountName='CONTOSO\\HV$'" call ModifyPermissions 9,1
NET STOP termservice
NET START termservice
--------------------------------------------------------------------------------

この設定で何を行っているのか知りたい方は、以下のドキュメントを参照してください。

AddAccount Method of the Win32_TSPermissionsSetting Class
http://msdn.microsoft.com/en-us/library/aa383815(VS.85).aspx
ModifyPermissions Method of the Win32_TSAccount Class
http://msdn.microsoft.com/en-us/library/aa383776(VS.85).aspx