2011-11-25 16 views
5

Todas nuestras cajas de prueba se ejecutan en máquinas virtuales (servidor de Windows 2003/08) y los verificadores acceden a ellas solo a través del escritorio remoto.¿Cómo desactivar Windows Remote-Desktop con Powershell?

Algunos pasos de mantenimiento requieren expulsar a todos los usuarios del sistema y desactivar el acceso a través del escritorio remoto.

Comencé a escribir las secuencias de comandos de mantenimiento en PowerShell y estoy buscando una forma de desactivar temporalmente el escritorio remoto. ¿Es eso posible, alguna solución directa a esto?

Lo que he intentado hasta ahora:

  • Un colega recomendado de desconexión del servicio de Inicio de sesión, pero puedo todavía sesión con escritorio remoto.
  • Otro colega recomienda deshabilitar el bloqueo del puerto de
    de escritorio remoto con el servidor de seguridad, pero de alguna manera que no se siente
    bien para mí (?) Porque no quiero cambiar una parte de un sistema de afectar otra parte. ¿Soy demasiado exigente ...? ;)

Cualquier sugerencia muy apreciada.

Saludos, Tobi

Respuesta

1

Ahora he encontrado una solución que funciona perfecto para mí. Windows Server 2008 incluye una característica llamada "Terminal Services Server Drain Mode"

... el modo de drenaje servidor TS impide que nuevos usuarios inicien sesión en el servidor, permitiendo al mismo tiempo que ha iniciado sesión en usuarios conectarse de nuevo a sus sesiones existentes. Al esperar que los usuarios existentes guarden su trabajo y cierren la sesión, el administrador puede tomar un servidor de terminal para realizar tareas de mantenimiento sin causar la pérdida de datos del usuario.

Antes activo el modo de drenaje que asegurarse de que nadie está conectado y luego activa el modo de drenaje con el siguiente código:

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

Aunque estoy cambiando una clave de registro, no estoy requerido para reiniciar el servidor para que los cambios sean efectivos. Esto funciona sin un reinicio.

Cuando termino de realizar el trabajo de mantenimiento desactivo el modo de drenaje con "-Valor 0" y los usuarios pueden volver a iniciar sesión.

¡Funciona como un encanto!


Mi respuesta original:

Mi solución Perferred que he encontrado a través de extensa búsqueda en la web es la siguiente (también no probado):

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

Otros fragmentos de código posibles e interesantes , o variaciones sobre el tema, que he encontrado:

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

o

Set-WmiInstance -namespace “rootCIMV2TerminalServices” -class Win32_Terminal -ComputerName “ComputerName” -Authentication PacketPrivacy -Argument @{fEnableTerminal=0}

o

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

1

Es necesario configurar

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

a 1 por defecto para desactivar el escritorio remoto, pero tiene que reiniciar el sistema.

Otra forma en que parecen no necesitan reinicio (no probado):

$ts=get-WMIObject Win32_TerminalServiceSetting -computername remotemachinename 

$ts.SetAllowTSConnections(0) 
+0

Hola Christian, muchas gracias. Esa es la solución que estaba buscando. Desafortunadamente no puedo usar esta solución en nuestro entorno debido a varias políticas de grupo y problemas de derechos. – Tobias

0

utilizo este código gwmi frecuencia:

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

y para habilitar los inicios de sesión

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

en lugar de Invoke-Command() porque RCP Nead openned y conexión RPC son desactivados por defecto en las ventanas

Cuestiones relacionadas