Tags: RDS, PowerShell, Remote-Verwaltung, WMI
Microsofts Remotedesktop ist nicht auf Terminal-Server beschränkt, sondern dient vielen Admins auch für die Fernwartung von Client-PCs. Dabei ist es oft notwendig, dieses Feature auf entfernten Rechnern erst zu aktivieren. Dies lässt sich über WMI erreichen.
Um RDP-Verbindungen auf dem lokalen PC unter Windows 7/8 zuzulassen, bietet sich die Verwendung der entsprechenden Funktion in der Systemsteuerung an. Sie schaltet nicht nur dieses Feature frei, sondern aktiviert zudem die erforderlichen Firewall-Regeln.
Möchte man Remotedesktop auf einer größeren Zahl von PCs aktivieren, also zum Beispiel auf allen Rechnern in einer OU oder Domäne, dann wird man dafür Gruppenrichtlinien verwenden (siehe dazu: Remotedesktop in Windows 7/8.x und Server 2012 (R2) mit GPO aktivieren).
Will man Remotedesktop nur auf einzelnen entfernten PCs zulassen oder auf solchen, die nicht Mitglied in einer Domäne sind, dann bietet sich WMI als Alternative an. In Workgroup-Umgebungen sollte man vorher sicherstellen, dass sich der Remote-PC über WMI verwalten lässt.
WMI-Aufruf über wmic
Ziemlich einfach ist in diesem Fall der Aufruf des Kommandozeilenprogramms wmic, weil dieses ein vordefiniertes Alias namens RDToggle mitbringt. Es erlaubt im ersten Schritt, den Remotedesktop-Status abzufragen:
wmic RDToggle get AllowTSConnections
Um den Status von Remotedesktop zu ändern, ruft man die Funktion SetAllowTSConnections auf. Mit dem ersten Parameter lässt man RDP-Verbindungen zu, wenn er den Wert 1 hat. Mit 0 blockiert man Remotedesktop-Verbindungen, wobei bestehende Sessions unterbrochen werden.
Der zweite Parameter legt fest, ob auf dem Zielrechner die Firewall-Regeln für Remotedesktop angepasst werden sollen. Folgender Aufruf aktiviert Remotedesktop plus die dazugehörige Firewall-Regel, um Verbindungen durchzulassen:
wmic /node:<Name-des-PCs> RDToggle where ServerName="<Name-des-PCs>" call SetAllowTSConnections 1, 1
Übergibt man die Parameter 0, 1 an SetAllowTSConnections, dann wird Remotedesktop deaktiviert und gleichzeitig die Firewall so zurückgesetzt, dass RDP-Verbindungen nicht durchgelassen werden.
WMI mit PowerShell
Alternativ zu wmic.exe kann man auch PowerShell verwenden, um Remotedesktop über WMI zu aktivieren. Zuständig ist dafür das Cmdlet Get-WmiObject, das über den Parameter -ComputerName auch entfernte Rechner ansprechen kann.
Sein Aufruf ist komplizierter als der von wmic, weil mangels eines Alias der Namespace und die WMI-Klasse explizit angegeben werden müssen. Der Namespace root\cimv2\TerminalServices wurde mit Vista eingeführt, so dass der folgende Befehl nicht unter XP funktioniert:
$RDC = Get-WmiObject -Namespace "root\cimv2\TerminalServices" `
-Class win32_terminalservicesetting -ComputerName <Remote-PC>
Nach dem Erzeugen des WMI-Objekts ruft man wie unter wmic.exe die Methode setAllowTSConnections auf, wobei die Parameter erwartungsgemäß die gleiche Bedeutung haben:
$RDC.setAllowTSConnections(1,1)
Ist der angezeigte Return-Code 0, dann ist die Operation geglückt. Man kann sich vom aktuellen Status durch den Aufruf von
Get-CimInstance -Namespace "root\cimv2\TerminalServices" `
-Class win32_terminalservicesetting -ComputerName <Remote-PC> |
select ServerName, AllowTSConnections
überzeugen.
Wenn der Aufruf von SetAllowTSConnections zur Fehlermeldung
Exception calling "SetAllowTSConnections" : "Invalid operation "
bzw. auf Deutsch
Ausnahme beim Aufrufen von "SetAllowTSConnections": "Der Vorgang ist ungültig."
führt, dann liegt das mit großer Wahrscheinlichkeit daran, dass diese Einstellung bereits über die Gruppenrichtlinien gesetzt wird und sich daher nicht über WMI ändern lässt.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Uptime von Windows über WMI und Powershell abfragen
- ThinPrint 13 unterstützt Microsofts V4-Druckertreiber und MMC
- Remotedesktop in Windows 11 und Server 2022 aktivieren (GUI, WAC, WMI, GPO)
- PowerShell 7.3: JEA über SSH, Cmdlet für Setup, erweiterte ARM-Unterstützung
- Programme (remote) mit PowerShell deinstallieren
Weitere Links
2 Kommentare
Im Artikel sind meines Erachtens zwei kleine Fehler im Abschnitt zur Powershell: Die Aktivierung erfolgt mit $RDC.setAllowTSConnections(1,1) und nicht (0,1). Die Kontrolle kann erst über die Variable durchgeführt werden, nachdem das WMI-Objekt erneut eingelesen wurde, ansonsten enthält sie den Ausgangswert.
Danke für den Hinweis! Klar, (0,1) deaktiviert auch bei PowerShell den RemoteDesktop-Zugriff, das muss natürlich (1,1) heißen. Habe ich korrigiert und für die Kontrollabfrage Get-CimInstance aufgerufen.