Windows ServerでRDSドレインモードを管理する方法 – リアルトーク
リモートデスクトップセッションホスト(RDS)の管理は、特に全員のセッションを切断せずにパッチやアップデートを適用する必要がある場合、時に少々厄介な場合があります。ドレインモードとは、Windows の基本的な機能で、サーバーに「新規ユーザーは入れないけど、既存ユーザーはそのままにしておいてください」と指示を出すことができます。ユーザーがログインしている状態でメンテナンス作業に取り掛かろうとしたところを目撃された経験があれば、これがどれほど救世主となるかお分かりいただけるでしょう。しかし、GUI、コマンドライン、PowerShell、グループポリシーなど、Microsoft が様々なオプションを提供しているため、必ずしも簡単ではありません。そこで、ドレインモードの実現方法、注意すべき落とし穴、そして実際に役立つヒントを、簡潔かつ率直にご紹介します。 —
RDS ホストでドレイン モードを有効にして使用する方法
方法 1: サーバー マネージャー (GUI) を使用する
クリックして操作するのが好きな場合、これが最も簡単な方法です。ファームをすばやく更新する場合や、コマンドラインを使い慣れていない場合は最適です。基本的に、Server Managerにアクセスして、次の操作を行います。 –すべてのサーバー→ RDS サーバーがまだない場合は追加します (この手順を忘れると、空のコンソールが表示されることがあります)。 -左側のペインで[リモート デスクトップ サービス]をクリックし、RDS コレクションを選択します。 – [ホスト サーバー]で、ドレイン モードにするサーバーを右クリックします。 – [新しい接続を許可しない]を選択します。 これが役立つ理由: 新しいセッションはブロックされますが、現在のセッションはアクティブなままです。通常、これは突然の切断なしにパッチ適用または更新できることを意味します。正直な結果を期待してください。一部のセットアップでは GUI が常に即座に更新されるとは限らないため、確認のために更新をクリックするか、ログアウトしてから再度ログインする必要がある場合があります。 —
方法 2: `change logon` を使用したコマンドライン (組み込みおよびクイック)
これは古典的な方法で、簡単なターミナル ハックが好きなら、まさにこれです。管理者コマンド プロンプトまたは PowerShell から、次を実行します。 – 新しいログインを拒否する (既存のセッションは続行できます) には、次の行を実行します。 bash change logon /drain – 新しいログインを再度許可するには、次の行を実行します。 bash change logon /enable – 再起動するまでサーバーをドレイン モードにするには (再起動時に一時的に解除する場合に便利です)、次の行を実行します。 bash change logon /drainuntilrestart – ログオンを完全に無効にするには (永久にシャットダウンする場合に適しています)、次の行を実行します。 bash change logon /disable 役立つ理由: 高速で、スクリプト化されており、セットアップによっては GUI よりもうまく機能します。1 台のマシンでは最初は異常が発生しましたが、別のマシンでは再起動するか、数回の試行が必要でした。サーバーがドレイン モードになっていることを示すメッセージ (特に `/disable`) を含むポップアップまたはイベント ログ エントリが表示されることを想定してください。 「このマシンのグループ ポリシーによって接続は現在有効になっており、変更できません」と表示される場合は、GPO が邪魔になっています。—
方法 3: PowerShell を使用する (より高度な制御とフィードバック)
もっと深く掘り下げてみたい方は、PowerShell を使うのがおすすめです。まず、RemoteDesktop モジュールをインポートします。powershell Import-Module RemoteDesktop – ドレインモード(新規接続を拒否)を設定するには、powershell Set-RDSessionHost -SessionHost “servername” -NewConnectionAllowed No -ConnectionBroker “brokername” を実行します。 – 再度接続を許可するには、powershell Set-RDSessionHost -SessionHost “servername” -NewConnectionAllowed Yes -ConnectionBroker “brokername” を実行します。注意点:このコマンドは、` HKLM\System\CurrentControlSet\Control\Terminal Server ` と ` HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon ` のレジストリ値を変更します。モードを切り替えると、` WinStationsDisabled ` や ` TSServerDrainMode `などの値が変更されることに注意してください。変更はすぐに反映される場合もあれば、再起動後に反映される場合もあります。 PowerShell で状態を確認するには、次のコマンドを使用します: powershell Get-WmiObject win32_terminalservicesetting -Namespace “root\cimv2\terminalservices” | % { if ($_. Logons -eq 1) { “Disabled” } Else { switch ($_. SessionBrokerDrainMode) { 0 { “Enabled” } 1 { “DrainUntilRestart” } 2 { “Drain” } default { “error” } } } } ドレイン モードをオンにするには、次のコマンドを使用します: powershell $temp = Get-WmiObject -Namespace “root\cimv2\terminalservices” -Class win32_terminalservicesetting $temp.sessionbrokerdrainmode = 2 $temp. Put() 通常の状態に戻すには、次のコマンドを使用します: powershell $temp.sessionbrokerdrainmode = 0 $temp.logons = 0 $temp. Put() より細かく指定できますが、特に GPO やその他のポリシーによって変更がブロックされている場合は、魔法のように感じられることがあります。動作しない場合は、管理用テンプレート > Windows コンポーネント > リモート デスクトップ サービス > リモート デスクトップ セッション ホスト > 接続 の GPO 設定を再確認してください。ユーザーがリモート デスクトップ サービスを使用してリモート接続できるようにする を探します。—
うまくいかないとき: GPO または予期しない設定
「このマシンのグループポリシーによって接続が有効になっています。変更できません」といったエラーが発生する場合は、ポリシーがコマンドを上書きしている可能性があります。通常、これは管理用テンプレート – Windowsコンポーネント – リモートデスクトップサービスにリンクされているGPOが原因です。手動ドレインモードを強制する必要がある場合は、このGPOを無効にするか、未構成に設定してください。—
まとめ
この方法は完璧ではありません。Windowsは特定の設定をGPOの背後に隠したり、バージョン間でコマンドの動作を変えたりするのが好きです。しかし、ドレインモードへの対応は、特にメンテナンス期間中にスムーズに動作を維持しようとする場合には、必要悪と言えるでしょう。設定によっては、モード設定後に再起動が必要になる場合があり、GPOやレジストリの再確認が必要になる場合もあることを覚えておいてください。全体として、これはバランスを取る作業であり、コマンドと設定の場所を把握しておくことは大きな違いを生みます。—
まとめ
- GUI クイック切り替えにはサーバー マネージャーを使用する
- コマンドプロンプトで実行して
change logon /drain、すばやく切り替える - PowerShellを活用して制御とスクリプトを強化
- 変更をブロックするGPOに注意してください
- 何かおかしいことがあったら、必ずサーバーログを確認してください
まとめ
このドレインモードは、特にWindowsのバージョンやポリシーが異なる場合は扱いが難しい場合があります。しかし、一度に全員を退出させずにアップデートを実行する必要がある場合には、頼りになるツールです。ただし、ある程度の試行錯誤は覚悟しておきましょう。コマンドが期待通りに動作しない場合は、GPOを確認してください。これで少しでも時間とストレスが軽減されることを願っています。私が経験したいくつかの環境ではうまくいったので、皆さんにも役立つかもしれません。