- Windows удаленный запуск службы
- Постановка задачи
- Методы активации доступа по RDP
- Как удаленно включить RDP
- Классический метод включения удаленного рабочего стола
- Как включить удаленный рабочий стол (RDP) через PowerShell
- Как удаленно включить RDP через групповую политику
- Управление службами Windows с помощью PowerShell
- Основные командлеты PowerShell для управления службами Windows
- Остановка, запуск, приостановка и перезапуск служб из PowerShell
- Set-Service – изменение настроек службы Windows
- Создание и удаление служб Windows c помощью PowerShell
- Изменение учетной записи для запуска службы
Windows удаленный запуск службы
Добрый день! Уважаемые читатели и гости, одного из ведущих компьютерных блогов рунета Pyatilistnik.org. В прошлый раз мы с вами успешно решили проблему со службами удаленного рабочего стола, когда они были заняты в настоящее время. Сегодня я бы хотел осветить, как включить RDP доступ на компьютерах и серверах Windows, так как меня об этом уже не первый раз спрашивают, поэтому проще написать подробную статью, чем постоянно отвечать на одни вопросы. В данном посте мы подробно разберем, как удаленно реализовать доступ по RDP, так как бывают и такие ситуации, меня это лично на практике выручало.
Постановка задачи
Разобрать все методы, позволяющие вам включать RDP доступ на Windows системах, понимать какие ключи реестра за это отвечают и как это можно применять на практике.
Методы активации доступа по RDP
Я могу выделить вот такие способы:
- Классический метод с использованием оснастки свойств системы Windows
- С помощью оболочки и командлетов PowerShell
- Удаленное включение, через реестр Windows
- Через GPO политику
Как удаленно включить RDP
И так начну с более интересного метода. Предположим, что у вас есть сервер или компьютер, от которого у вас есть учетные данные для входа, но не активен вход через удаленный рабочий стол. И вам хотели бы его активировать. Делается все это просто. Тут мы воспользуемся удаленным доступом через консоль. Откройте окно выполнить (Сочетание клавиш WIN и R одновременно) и в открывшемся окне введите:
Далее щелкаете по корню «Управление компьютера (локальным)» правым кликом и в открывшемся окне выберите пункт «Подключиться к другому компьютеру»
В окне выбора компьютера, вам необходимо нажать кнопку «Обзор», которое откроет второе окошко, где нужно выбрать необходимый компьютер, так как у меня доменная сеть, то мне еще проще. В моем примере это будет компьютер с операционной системой Windows 10 под DNS-именем W10-CL01. Нажимаем ок.
У вас будет произведено подключение к данному компьютеру. Если у вас выскочит ошибка:
В данном случае, нужно проверить две вещи:
- Доступен ли компьютер по сети, для этого проведите элементарный ping компьютера.
- Это нужно на этом компьютере в брандмауэре Windows разрешить «Удаленное управление журналом событий»
Про то как локально разрешать в брандмауэре службы и порты я говорил, посмотрите по ссылке. Если доступа нет, сделать, это локально, то ниже я приведу пример, как это сделать удаленно. Когда вы подключились к нужному компьютеру или серверу, вам необходимо перед удаленным включением RDP доступа, удостовериться, что у вас на вкладке службы, в активном состоянии запущен сервис «Удаленный реестр».
В моем примере я подключился к удаленным службам, через управление компьютером.
Если этого не сделать, то подключиться к реестру не получиться, и вы не сможете включить RDP по сети. Переходим в свойства данной службы и в типе запуска выставите вручную, после чего нажмите применить. После этого у вас станет активной кнопка запуска, нажимаем ее и проверяем, что сервис стартанул. После этого переходим к редактированию реестра по локальной сети.
В окне выполнить введите regedit и у вас откроется реестр Windows .
В самом верху есть меню файл, открыв его вам необходимо найти пункт «Подключить сетевой реестр».
У вас откроется окно поиска, где вам необходимо найти нужный вам сетевой компьютер или сервер, после чего нажать ок.
В итоге у вас в окне редактора реестра Windows появится еще один куст. Именно через данный реестр вы включите RDP службу на удаленной системе.
Теперь выбираем корень сетевого реестра Windows и нажимаем кнопку CTRL+F, у вас откроется форма поиска по нему. Тут вам необходимо найти ключ fDenyTSConnections.
Он также по сути должен лежать по пути:
Где ключу fDenyTSConnections вам необходимо изменить значение с 1 на 0, чтобы включить RDP доступ к удаленному компьютеру.
Пробуем произвести подключение, для этого откройте клиента подключения к удаленному рабочему столу (mstsc) и смотрим результат.
Если у вас будут закрыты порты, то вы увидите вот такую картину. При попытке подключиться у вас будет висеть инициализация удаленного подключения.
После чего вы увидите ошибку:
- Удаленному рабочему столу не удается подключиться к удаленному компьютеру по одной из следующих причин:
Не включен удаленный доступ к серверу - Удаленный компьютер выключен
- Удаленный компьютер не подключен к сети
Удостоверьтесь, что удаленный компьютер включен, подключен к сети и удаленный доступ к нему включен
Напоминаю, что вы можете проверить доступность порта , через утилиту Telnet. Проверять нам нужно порт 3389. Вероятнее всего он не ответит. Как я и писал выше откроем порты и создадим правило в брандмауэре. Для этого мы воспользуемся утилитой PSTools.
На выходе у вас будет архив с утилитами, который нужно будет распаковать через архиватор. Когда вы распакуйте его, зажмите клавишу Shift и кликните правым кликом по папке PSTools. Из контекстного меню выберите пункт «Открыть окно команд».
Введите вот такую команду:
Мой пример: PsExec.exe \\w10-cl01 -u root\Администратор -p пароль cmd
В итоге у вас будет произведено подключение к удаленному компьютеру, вы увидите в заголовке \\dns-имя: cmd. Это означает, что вы успешно подключены.
Далее вступает утилита командной строки netsh, благодаря ей мы создадим правило разрешающее входящие подключения по RDP.
Если вы до этого не включали через реестр доступ к удаленному рабочему столу, то так же это можно выполнить в PsExec.exe:
По идее все должно работать сразу и без перезагрузки, но если она требуется, то выполните команду:
Классический метод включения удаленного рабочего стола
С удаленным включением служб RDP мы разобрались, теперь напомню для новичков, как можно локально его активировать. По умолчанию данная служба, как я и писал не работает. Чтобы это исправить есть два метода. Универсальный метод для любой версии Windows, я буду показывать на десятке, но для семерки, восьмерки, все будет одинаково. Откройте проводник Windows. Найдите в левой части объект «Этот компьютер (Мой компьютер)». Кликните по нему правым кликом и из контекстного меню перейдите в пункт «Свойства».
У вас откроется окно система. В правой части нажмите пункт «Настройка удаленного доступа», которое вызовет окно свойств системы. НА вкладке «Удаленный доступ», чтобы активировать службы удаленных рабочих столов Windows, вам нужно активировать пункт «Разрешить удаленные подключения к этому компьютеру». После этого у вас в системе сразу будет работать RDP доступ.
А вот метод исключительно для Windows 10 или Windows Server 2016 и выше. Вы открываете параметры Windows. Переходите в пункт система. В системе будет пункт «Удаленный рабочий стол». Активируем ползунок «Включить удаленный рабочий стол». Выскочит окно с подтверждением, говорим «Подтвердить».
Все функционал RDP активен, можно подключаться с других компьютеров. Данный метод по сути ставит все тужу галку, что мы видели и в классическом окне системы.
Этот подход можно с натяжкой назвать удаленным методом включения RDP, так как на той стороне вам потребуются руки которыми вы будите управлять по телефоны.
Как включить удаленный рабочий стол (RDP) через PowerShell
Открываем на компьютере, где необходимо включить RDP службу оснастку PowerShell.
(Get-WmiObject Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTsConnections(1,1)
Вторая команда активирует галку «Разрешить подключение только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети»
(Get-WmiObject -Class «Win32_TSGeneralSetting» -Namespace root\cimv2\TerminalServices -Filter «TerminalName=’RDP-tcp'»).SetUserAuthenticationRequired(0)
Третья команда, включает правило в Брандмауэре
Enable-NetFirewallRule -DisplayGroup «Remote Desktop»
Данные команды вы можете собрать в скрипт и распространить его через групповую политику при включении компьютера или автологоне пользователя.
Как удаленно включить RDP через групповую политику
Данный метод включения удаленного рабочего стола на нужном компьютере возможен за счет домена Active Directory, благодаря централизованному управлению рабочих станций ваших сотрудников. Откройте редактор управления групповыми политиками. Создайте новую политику и прилинкуйте ее к нужному организационному подразделению, которое содержит нужный компьютер. После чего зайдите в свойства данной политики и измените ее настройки. Перейдите по пути:
Откройте эту настройку и включите ее. Не забываем после этого обновить групповую политику на нужном компьютере и не забываем там открыть порт для RDP. Так же политиками или локально.
Включив настройку вы можете указать конкретные ip-адреса откуда можно производить подключение или же ввести *, это будет означать, для всех.
Управление службами Windows с помощью PowerShell
В Windows вы можете управлять службами не только из графической консоли services.msc или утилиты командной строки Sc.exe (первоначальна включалась в пакет ресурсов Resource Kit), но и с помощью PowerShell. В этой статье мы смотрим различные сценарии управления службами Windows с помощью PowerShell.
Основные командлеты PowerShell для управления службами Windows
Существует восемь основных командлетов Service, предназначенных для просмотра состояния и управления службами Windows.
Чтобы получить весь список командлетов Service, введите команду:
- Get-Service — позволяет получить службы на локальном или удаленном компьютере, как запущенные, так и остановленные;
- New-Service – создать службу. Создает в реестре и базе данных служб новую запись для службы Windows;
- Restart-Service – перезапустить службу. Передает сообщение об перезапуске службы через Windows Service Controller
- Resume-Service – возобновить службы. Отсылает сообщение о возобновлении работы диспетчеру служб Windows;
- Set-Service — изменить параметры локальной или удаленной службы, включая состояние, описание, отображаемое имя и режим запуска. Этот командлет также можно использовать для запуска, остановки или приостановки службы;
- Start-Service – запустить службу;
- Stop-Service – остановить службу (отсылает сообщение об остановке диспетчеру служб Windows);
- Suspend-Service приостановить службу. Приостановленная служба по-прежнему выполняется, однако ее работа прекращается до возобновления работы службы, например с помощью командлета Resume-Service.
Получить подробное описание и примеры использования конкретного командлета можно через Get-help:
Get-Service: получаем список служб и их состояние
Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.
Если вы не знаете точное имя службы, есть возможность найти службы по отображаемому имени с помощью параметра –DisplayName. Можно использовать список значений и подстановочные знаки.
.
Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.
Get-Service spooler –ComputerName RM1,RM2
Вывести все свойства службы позволит командлет Select-Object:
Get-Service spooler | Select-Object *
Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
Командлет Get-Service имеет два параметра, которые позволяют получить зависимости служб:
- Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
- Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.
Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:
Get-Service –Name Spooler -RequiredServices
Следующая команда выводит службы, которые зависят от службы Spooler:
Get-Service –Name Spooler -DependentServices
При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:
Для вывода служб с типом запуска Manual, выполните команду
Проверить, что в системе имеется указанная служба:
if (Get-Service «ServiceTest» -ErrorAction SilentlyContinue)
<
Write-host «ServiceTest exists»
>
Остановка, запуск, приостановка и перезапуск служб из PowerShell
Остановить службу можно с помощью командлета Stop-Service. Чтобы остановить службу печати, выполните команду:
Stop-Service -Name spooler
Командлет Stop-Service не выводит никаких данных после выполнения. Чтобы увидеть результат выполнения команды, используйте параметр -PassThru.
Обратите внимание, что не каждую службу можно остановить. Если есть зависимые службы, то получите ошибку
Для принудительной остановки используйте параметр –Force. Вы должны помнить, что остановятся также все зависимые службы:
Stop-Service samss –Force -Passthru
Следующая команда остановит перечисленные службы (bits,spooler) со статусом ”Running”:
get-service bits,spooler | where <$_.status -eq 'running'>| stop-service –passthru
Командлет Start-Service запускает остановленные службы:
Start-Service -Name spooler -PassThru
Служба не запустится, если есть остановленные зависимые службы. Чтобы их найти и включить:
get-service samss | Foreach
Командлет Suspend-Service может приостанавливать службы, допускающие временную приостановку и возобновление. Для получения сведений о возможности временной приостановки конкретной службы используйте командлет Get-Service со свойством «CanPauseAndContinue«.
Get-Service samss | Format-List name, canpauseandcontinue
Чтобы отобразить список всех служб, работа которых может быть приостановлена, введите команду:
Приостановим службу SQLBrowser:
Suspend-Service -Name SQLBrowser
Для возобновления работы приостановленной службы служит командлет Resume-service:
Resume-Service -Name SQLBrowser
Следующая команда возобновляет работу всех приостановленных служб:
get-service | where-object <$_.Status -eq "Paused">| resume-service
Командлет Restart-Service перезапускает службу:
Restart-Service -Name spooler
Эта команда запускает все остановленные сетевые службы компьютера:
get-service net* | where-object <$_.Status -eq "Stopped">| restart-service
Параметр —ComputerName у этих командлетов отсутствует, но их можно выполнить на удаленном компьютере с помощью командлета Invoke-Command или через пайп:
Например, чтобы перезапустите очередь печати на удаленном компьютере RM1, выполните команду:
Get-Service Spooler -ComputerName RM1 | Start-Service
Set-Service – изменение настроек службы Windows
Командлет Set-Service позволяет изменить параметры или настройки служб на локальном или удаленном компьютере. Так как состояние службы является свойством, этот командлет можно использовать для запуска, остановки и приостановки службы. Командлет Set-Service имеет параметр -StartupType, позволяющий изменять тип запуска службы.
Изменим тип запуска службы spooler на автоматический:
Set-Service spooler –startuptype automatic –passthru
Можно перевести службу на ручной (manual) запуск:
Set-Service spooler –startuptype manual –passthru
Создание и удаление служб Windows c помощью PowerShell
New-Service – командлет для создания новой службы в Windows. Для новой службы требуется указать имя и исполняемый файл (вы можете запустить PowerShell скрипт как службу Windows).
В примере создадим новую службу с именем TestService.
new-service -name TestService -binaryPathName «C:\WINDOWS\System32\svchost.exe -k netsvcs»
С помощью параметра Get-WmiObject получим информацию о режиме запуска и описание службы
get-wmiobject win32_service -filter «name=’testservice'»
Изменить параметры новой службы можно командой
Set-Service -Name TestService -Description ‘My Service’ -StartupType Manual
Чтобы удалить службу используйте команду
(Get-WmiObject win32_service -Filter ″name=′TestService′″).delete()
Изменение учетной записи для запуска службы
Вы можете изменить учетную запись, из-под которой запускается служба. Получим имя учетной записи, которая используется для запуска службы TestService
get-wmiobject win32_service -filter «name=’TestService'» | Select name,startname
Для изменения имени и пароля учетной записи выполняем команды.
$svc = get-wmiobject win32_service -filter «name=’TestService'»
$svc.GetMethodParameters(«change»)
В результате получаем список параметров метода Change(). Считаем на каком месте находятся параметры StartName и StartPassword – 20 и 21 место соответственно.
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,»Administrator»,»P@ssw0rd»)
Либо вы можете указать имя gMSA аккаунта. Пароль при этом не указывается.
Как видите, PowerShell позволяет легко управлять службами Windows. Можно создавать, останавливать, запускать и возобновлять службы, менять их свойства. Большинство командлетов позволяют управлять службами на удаленных компьютерах.