Dość często zdarzają się sytuacjie (nawet mi), gdy chcemy połączyć się zdalnie z jakimś komputerem, niemniej po chwili dostajemy ładny komunikat:
Główna przyczyna to brak skonfigurowanego RDP po stronie zdalnego systemu.
Co wtedy ?? Albo idziemy na piechotę do maszyny by włączyć obsługę RDP, albo zdalnie włączamy zdalny pulpit. Możemy tego dokonać poprzez zdalne podłączenie się do rejestru obcego systemu. Aby w ogóle móc coś takiego zrobić trzeba mieć jednak dostęp do lokalizacji \\host\c$ oraz musi być włączona usługa „Rejestru zdalnego”. Wymagane będzie również podanie nazwy użytkownika i hasła dla konta z uprawnieniami administratora zdalnego systemu.
PowerShell sam w sobie nie umożliwia obsługi zdalnego rejestru niemniej jednak możemy skorzystać z gotowej przystawki PSRemoteRegistry stworzonej do tego właśnie celu. Rozpakowujemy przystawkę oraz podpisujemy skrypty by móc je wykonywać, a następnie ładujemy moduł.
Import-Module PSRemoteRegistry
Parametr odpowiadający za stan usługi zdalnego pulpity znajduje się w kluczu HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server pod wartością fDenyTSConnections.
Modyfikujemy wpis ustawiając wartość 0. Trzeba pamiętać, iż parametr pyta się o Deny dlatego wartość 1 – wyłączony, 0 – włączony.
Get-RegValue -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server" -Value fDenyTSConnections -Ping
Lub w przypadku wielu maszyn
Get-RegValue -ComputerName “10.10.10.8”,“10.10.10.9”,“10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server" -Value fDenyTSConnections -Ping
I ustawiamy nową wartość parametru.
Set-RegDWord -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server" -Value fDenyTSConnections -Data 0x01 -Ping
Opcjonalnie możemy ograniczyć dostęp przez poszczególne karty sieciowe. Aby tak zrobić odnajdujemy klucz: HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces i kopiujemy nazwę klucza odpowiadającego interesującego nas interfejsu sieciowego w celu uzyskania jego GUIDa.
Get-RegKey -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" –Ping | Format-List
Przechodzimy znów do HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server i tworzymy podklucz lanatable. W nim tworzymy kolejny podklucz o nazwie odpowiadającej wcześniej skopiowanemu GUIDowi (bez początkowej ścieżki klucza). Wewnątrz tworzymy parametr wartości DWORD o nazwie LanaID i o wartości 1
New-RegKey -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server" -Name lanatable New-RegKey -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server\lanatable " -Name {GUID} Set-RegDWord -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server\lanatable\{GUID}" -Value LanaID -Data 0x01 -Ping
Następnie szukamy klucza HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstation\RDP-Tcp i dla wartości LanAdapter wpisujemy wcześniej utworzone ID czyli 1. (Domyślnie jest 0 czy udostępnienie RDP dla wszystkich interfejsów).
Set-RegDWord -ComputerName “10.10.10.10” -Key "SYSTEM\CurrentControlSet\Control\Terminal Server\Winstation\RDP-Tcp" -Value LanAdapter -Data 0x01 -Ping
Ostatnim krokiem jest uruchomienie usługi zdalnego pulpitu. Można tego dokonać po prostu zdalnie restartując maszynę.
shutdown /r /t 0 /m 10.10.10.10
Tak zdalnie zmodyfikowany rejestr pozwoli nam na podłączenie się przez protokół RDP do maszyny zdalnej.
Źródła
http://support.microsoft.com/kb/924927
http://technet.microsoft.com/en-us/library/cc778860(WS.10).aspx
http://code.msdn.microsoft.com/PSRemoteRegistry
Bardzo ciekawe, ale jak zwykle, żeby to działało nie tylko u Pana…
Mam postawiony serwer IIS 7.5 na WinXPHomeSP3 i chciałbym mieć możliwość zdalnego podglądu co się tam dzieje z poziomu Win7Pro, bo taki mam na laptopie.
Niestety nawet nie zacząłem ponieważ:
„Import-Module: The specified module .. was not loaded because no valid module file waz found in any module directory”
To co, mam PS z niepełną instalacją? Nie może sobie ściągnąć modułu z netu?
No niestety, nie ma jednej bazy oficjalnych modułów do PowerShella. Zwykle są one tworzone przez prywatne osoby (sam opublikowałem kilka), więc ciężko, aby PowerShell wiedział skąd je samodzielnie pobierać.
Wracając do tematu moduł PSRemoteRegistry możesz pobrać ze strony http://code.msdn.microsoft.com/PSRemoteRegistry. Proces „instalacji” moduły znajduje się na stronie.
Dzięki, zainstalowałem. Jeszcze tylko jedno pytanie, bo nie znalazłem odpowiedzi na nie w get-help ani na http://archive.msdn.microsoft.com/PSRemoteRegistry:
Geter i seter -RegValue ma jako argument tablicę stringów dla -ComputerName, standardowo dla localhosta. Czy te stringi MUSZĄ mieć postać adresu IP jak w twoim przykładzie, czy może to być domena np. moj.zdalny.net?, Próbowałem przed chwilą i wywaliło mi że „nie można odnaleźć ścieżki sieciowej”