PowershellでWindowsリモートデスクトップを無効にする方法

すべてのテストボックスはVM(Windows Server 2003/08)上で動作し、テスターはリモートデスクトップ経由でのみアクセスします。

いくつかのメンテナンス手順では、すべてのユーザーをシステムから追い払い、リモートデスクトップ経由でアクセスを無効にする必要があります。

私はPowerShellで保守スクリプトを書き始め、一時的にリモートデスクトップを非アクティブにする方法を探しています。それは可能ですか、これに対する直接的な解決策ですか?

これまで私が試したことは:

  • 同僚はnetlogon-serviceを無効にすることを推奨しましたが、 リモートデスクトップではまだログオンしています。
  • もう1人の同僚が、 ファイアウォールとリモートデスクトップが、何とかそれは感じることはありません
    私の右の(?)私はシステムの一部を変更したくないので 他の部分に影響を与える。私はあまりにもかわいいですか...? ;)

どんなヒントも高く評価されています。

乾杯、 トビ

5

4 答え

あなたは設定する必要があります

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections 

デフォルトでは値を1に設定してリモートデスクトップを無効にしますが、再起動が必要です。

再起動を必要としない別の方法(テストされていない):

$ts=get-WMIObject Win32_TerminalServiceSetting  -computername remotemachinename

$ts.SetAllowTSConnections(0)
1
追加された
こんにちはクリスチャン、ありがとう。それが私が探していた解決策です。残念ながら私はこのソリューションをいくつかのグループポリシーと権利問題のために使用することはできません。
追加された 著者 Tobias,

今私は完璧に働く解決策を見つけました。 Windows Server 2008には、「ターミナルサービスサーバーのドレインモード"

... TSサーバーのドレインモードは、新規ユーザーがサーバーにログオンするのを防ぎますが、現在ログオンしているユーザーは既存のセッションに再接続できます。既存のユーザーが作業を保存してログオフするのを待つことによって、管理者はユーザーデータの損失を引き起こすことなくメンテナンスのためにターミナルサーバーを停止することができます。

ドレインモードをアクティブにする前に、誰もログインしていないことを確認してから、次のコードでドレインモードをアクティブにします。

Invoke-Command -ComputerName myServerHostName -ScriptBlock
{
   Set-ItemProperty -Path "HKLM:\SYSTEM\Currentcontrolset\control\Terminal Server" -Name TSServerDrainMode -Value 1
}

レジストリキーを変更していますが、変更を有効にするためにサーバーを再起動する必要はありません。再起動せずに動作します。

メンテナンス作業が終了したら、 " - 値0"のドレイン・モードを無効にすると、ユーザーは再びログインできます。

魅力的な作品!


私の元の回答:

広範なWeb検索を通じて私が見つけた私の思い通りの解決策は次の通りです(また、テストされていません):

$Terminal = Get-WmiObject Win32_Terminal –Computer “ComputerName”
$Terminal.Enable($True)

他にも可能性のある興味深いコードスニペット、またはトピックのバリエーションが見つかりました:

$ myWmiObject = Get-WmiObject -namespace "rootCIMV2TerminalServices" -class Win32_Terminal -Computer "ComputerName" -Authentication PacketPrivacy

または

Set-WmiInstance -namespace "rootCIMV2TerminalServices" -class Win32_Terminal -ComputerName "ComputerName" -Authhentication PacketPrivacy -Argument @ {fEnableTerminal = 0}

または

Get-WmiObject -ComputerName "ComputerName" -namespace root/cimv2/terminalservices -class Win32_Terminal -Authentication PacketPrivacy

1
追加された

今朝何か他のものを探して(偶然にも)私はこれを見ました: " PowerShellを使用したリモートデスクトップの確認と有効化。"

要約:レジストリの操作が必要です。

0
追加された
こんにちはリチャード、ありがとう。はい、それは動作しますが、残念ながらシステムを再起動しないでください。
追加された 著者 Tobias,

私はこのgWmiコードを頻繁に使用します:

#Remote change logon /disable
$TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy
$TS_Connector.Logons=1
$TS_Connector.Put()

ログオンを有効にする

#Remote change logon /enable
$TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy
$TS_Connector.Logons=0
$TS_Connector.Put()

ウィンドウのデフォルトではnead RCP opennedとRPC connexionが無効になっているため、Invoke-command()ではなく

0
追加された