【Windows Server 2008】Server Core のコマンドプロンプトを手元のコンピュータから起動する~RemoteApp 機能の活用

何度か この blog でも取り扱っていますが、Server Core を管理する方法は、およそ 3 種類考えられます。

  • 潔く ローカルのコマンドプロンプトを使用する
  • 優雅に リモートからMMCで接続する
  • 華麗に リモートからコマンドを発行する

どれを使うかは、シチュエーションによると思いますが、今回は「潔くローカルのコマンドプロンプトを使用する」を少しだけ便利にする手順について紹介します。

Windows Server 2008 のターミナルサービスには、RemoteApp という機能が実装されました。

Windows Server 2008 ターミナルサービスについては、@IT さんに以前私が執筆した記事が公開されていますのでごらんください。

第8回 ターミナル・サービスによるクライアントの仮想化(前編)
https://www.atmarkit.co.jp/fwin2k/winsv2008/08ts_01/08ts_01_01.html

第9回 ターミナル・サービスによるクライアントの仮想化(中編)
https://www.atmarkit.co.jp/fwin2k/winsv2008/09ts_02/09ts_02_01.html

第10回 ターミナル・サービスによるクライアントの仮想化(後編)
https://www.atmarkit.co.jp/fwin2k/winsv2008/10ts_03/10ts_03_01.html

上の記事でも紹介していますが、RemoteApp を使用すると、ターミナルサービス上にインストールされたアプリケーションを、あたかも手元のコンピュータにインストールされているかのように使用することができます。

Server Core にも、管理を目的としたターミナルサービスが実装されており、RemoteApp を使用することができます。Server Core の RemoteApp を使用すれば、Server Core上のコマンドプロンプトを手元のコンピュータ上から簡単に起動することができるため、私はこの方法が気に入っています。

Server Core をインストールすると自動的にサービスが有効化されるので、役割のインストールを行う必要はありませんが、既定ではリモートからの接続は禁止されています。

それでは、Server Core でRemoteAppを使用するための手順を以下に示します。

  1. ターミナルサービスへの接続を有効にする

    ターミナルサービスはインストール直後に起動はされていますが、以下の2つの設定によってリモートからの接続が抑止されています。

    • ファイアウォールの「リモートデスクトップ(TCP接続) 」 ルール
    • 以下のレジストリエントリの設定値
      System/CurrentControlSet/Control/Terminal Server 配下の fDenyTSConnections
      0:許可 1:拒否(規定値)

    上記を有効にするには、以下のコマンドをServer Core 上のコマンドプロンプトから実行します。

    scregedit /ar 0

    これで リモートからServer Core のターミナルサービスに接続することができるようになりました。他のポートを開く必要はありません。

  2. RemoteApp に CMD.EXE を登録する

    GUIが使用可能なリモートコンピュータから、 ターミナルサービスの RemoteApp マネージャを使用してアプリケーション(今回はCMD.EXE)を登録します。手順は、@IT の記事に書かれていますので、以下をご覧ください。

    第10回 ターミナル・サービスによるクライアントの仮想化(後編) - 3.ターミナル・サービス環境を整える(1)
    RemoteAppにアプリケーションを公開する

    リモートコンピュータが近くにない場合や、GUI が面倒という方は、以下のレジストリファイルをメモ帳等で作成し、拡張子 reg で保存後、Server Core 上で実行してください。もちろん、regedit を起動してから読み込むこともできます。

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\Applications\cmd]"CommandLineSetting"=dword:00000000"RequiredCommandLine"="""IconIndex"=dword:00000000"IconPath"="c:\\Windows\\System32\\cmd.exe""Path"="c:\\Windows\\System32\\cmd.exe""VPath"="""ShowInTSWA"=dword:00000001"Name"="cmd.exe"  

  3. rdp ファイルを作成する

    リモートコンピュータから Server Core のターミナルサービスに接続し、RemoteApp マネージャを使用して、上で作成した CMD.EXE 用の  rdp ファイルを作成します。rdp ファイルを自身のコンピュータ上のデスクトップに保存しておくことで、ダブルクリックするだけで Server Core のコマンドプロンプトを開くことができます。

    作成の手順についても、@IT の以下の記事に書かれていますのでご参照ください。

    第10回 ターミナル・サービスによるクライアントの仮想化(後編) - 4.ターミナル・サービス環境を整える(2)
    └ クライアントのデスクトップからRemoteAppを利用できるように構成する

    もし、リモートコンピュータから GUIで操作するのが面倒であれば、以下のファイルをコピペして、拡張子 rdp で自身のコンピュータ上に保存してください。太字部分は Server Core のIP アドレスですので、必要に応じて変更してください。

    redirectclipboard:i:1redirectposdevices:i:0redirectprinters:i:1redirectcomports:i:1redirectsmartcards:i:1devicestoredirect:s:*drivestoredirect:s:*redirectdrives:i:1session bpp:i:32span monitors:i:1prompt for credentials on client:i:1remoteapplicationmode:i:1server port:i:3389allow font smoothing:i:1promptcredentialonce:i:1authentication level:i:0gatewayusagemethod:i:2gatewayprofileusagemethod:i:0gatewaycredentialssource:i:0full address:s:192.168.7.21alternate shell:s:||cmdremoteapplicationprogram:s:||cmdgatewayhostname:s:remoteapplicationname:s:cmd.exeremoteapplicationcmdline:s:

 

これで準備は整いました。

rdp ファイルをダブルクリックすると、Server Core 上のコマンドプロンプトが開きます。初回はユーザーIDとパスワードの入力が求められますが、「資格情報の保存」をチェックしておけば、2回目以降問われることはありません。

ためしに、「 Set c 」を入力してみてください。%ComputerName% 環境変数に、Server Core のホスト名が格納されていることがわかるはずです。

で、この機能の便利で面白いところは、実はこれだけではありません。

コマンドプロンプトから、regedit や notepad を起動してみてください。

コマンドプロンプト上から起動したこれらのアプリケーションは、実は Server Core 上で動いています。notepad で「開く」や「保存」を選択すると、「懐かしいタイプのダイアログボックス」が開くことからも、Server Core 上の notepad であることがわかります。