

Добро пожаловать на Power Remote Desktop для удаленного доступа на рабочем столе в Pure PowerShell! Этот модуль предлагает уникальное решение для удаленного управления одним или несколькими экранами с использованием только PowerShell. В отличие от других удаленных инструментов для настольных компьютеров, которые полагаются на внешние протоколы и программное обеспечение, наш модуль использует свой собственный протокол удаленного рабочего стола.
Модуль состоит из клиента и серверного компонента, оба из которых написаны полностью в PowerShell. Наш протокол обеспечивает безопасную, зашифрованную связь с использованием TLS и предлагает как аутентификацию на основе задач, так и аутентификацию на основе сертификатов.
В дополнение к обеспечению полного управления мышью и клавиатурой над удаленным рабочим столом, наш модуль также повторяет значок курсора мыши для зрителя, синхронизирует буфер обмена между локальными и удаленными системами и многое другое. Несмотря на ограничения PowerShell, мы внедрили методы для оптимизации сетевого трафика и улучшения потокового опыта, что приводит к плавному и эффективному удаленному опыту настольного компьютера.
На момент написания, это единственное известное, совершенно лишь PowerShell, на основе удаленного настольного приложения на основе PowerShell. Мы надеемся, что вы найдете это полезным, и мы приветствуем любые отзывы или предложения, которые у вас могут быть.
Протестировано на:
Текущая версия: 4.0.0 стабильная
Для лучшей потоковой работы и общего опыта мы рекомендуем использовать PowerShell 7 вместо PowerShell 5.
Вы можете установить PowerShell 7 для Windows здесь

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "Если вы хотите избежать использования своего собственного сертификата и предпочитаете не проходить процесс его создания, вы можете удалить опцию «сертификат» и вместо этого запустить PowerShell в качестве администратора.
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "Вот и все
Есть несколько способов использовать это приложение PowerShell. Рекомендуемый метод состоит в том, чтобы установить как сервер, так и компоненты просмотра с помощью галереи PowerShell. В качестве альтернативы, вы можете установить их в виде модулей или импортировать в качестве сценариев вручную. Выберите метод, который наилучшим образом соответствует вашим потребностям и предпочтениям.
Вы можете установить удаленный рабочий стол в галерее PowerShell, которая аналогична способности Debian или Brew для MacOS. Для этого запустите следующие команды:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer AllowPrerelease является обязательной, когда текущая версия помечена как предварительнаяеляаза
Когда вы запустите команду, вы можете увидеть следующее предупреждение в своей командной строке:
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
Введите «Y», чтобы подтвердить и продолжить установку. Когда установка завершена, оба модуля должны быть доступны. Вы можете проверить это, выполнив следующую команду:
Get-Module - ListAvailableПример вывода:
PS C:UsersPhrozenDesktop> Get-Module -ListAvailable
Directory: C:UsersPhrozenDocumentsWindowsPowerShellModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..snip..>
Если модули не отображаются, попробуйте запустить следующие команды, а затем проверьте снова:
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_ViewerЧтобы модуль был доступен, он должен быть расположен в зарегистрированном пути модуля. Вы можете просмотреть пути зарегистрированного модуля, выполнив следующую команду:
Write-Output $ env: PSModulePathПример вывода:
C:UsersPhrozenDocumentsWindowsPowerShellModules;C:Program FilesWindowsPowerShellModules;C:WINDOWSsystem32WindowsPowerShellv1.0Modules
Clone PowerRemotedesktop Repository или загрузите пакет выпуска GitHub.
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
Скопируйте папки PowerRemoteSktop_viewer и PowerRemoteSktop_server для желаемого пути модуля
Пример:
C:Users<USER>DocumentsWindowsPowerShellModules
Оба модуля теперь должны быть доступны, вы можете проверить, используя команду:
Get-Module - ListAvailableПример вывода:
PS C:UsersPhrozenDesktop> Get-Module -ListAvailable
Directory: C:UsersPhrozenDocumentsWindowsPowerShellModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..snip..>
Если вы их не видите, запустите следующие команды и проверьте обратно.
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewer УВЕДОМЛЕНИЕ: Манифестные файлы являются необязательными ( *.psd1 ) и могут быть удалены.
Не обязательно установить это приложение в качестве модуля PowerShell (даже если расширение файла составляет *.psm1 )
Вы также можете загрузить его как сценарий PowerShell. Существует несколько методов, включая:
Вызывая команды, используя:
IEX ( Get-Content .PowerRemoteDesktop_[ Server / Viewer ].psm1 - Raw)Загрузка сценария из удаленного места:
IEX ( New-Object Net.WebClient).DownloadString( ' http://127.0.0.1/PowerRemoteDesktop_[Server/Viewer].psm1 ' )и т. д...
PowerRemoteDesktop_Viewer.psm1 должен быть импортирован / или установлен на локальной машине.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers Создайте новый сеанс удаленного рабочего стола с сервером удаленного рабочего стола.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| ServerAddress | Нить | 127.0.0.1 | Удаленный хост сервера или адрес |
| Serverport | Целое число | 2801 | Номер порта для удаленного сервера |
| SecurePassword | Северно -серия | Никто | Объект Securestring, содержащий пароль, используемый для аутентификации с удаленным сервером (рекомендуется) |
| Пароль | Нить | Никто | Простой текст пароль, используемый для аутентификации с удаленным сервером (не рекомендуется; вместо этого используйте SecurePassword))) |
| Отключить | Выключатель | ЛОЖЬ | Если указана, программа подаст сообщения условности |
| USETLSV1_3 | Выключатель | ЛОЖЬ | Если указана, программа будет использовать TLS V1.3 вместо TLS V1.2 для шифрования (рекомендуется, если обе системы поддерживают его) |
| Буфер обмена | Перевозить | Оба | Укажите режим синхронизации буфера обмена (параметры включают в себя «оба», «отключить», «отправить» и «получить»; см. Ниже подробнее) см. Ниже) |
| ImageCompressionQuality | Целое число (0-100) | 75 | Уровень сжатия JPEG в диапазоне от 0 (наименьшее качество) до 100 (самое высокое качество) |
| Изменение размера | Выключатель | ЛОЖЬ | Если указано, удаленный рабочий стол будет изменен в соответствии с опцией «Resizeratio» |
| Resizeratio | Целое число (30-99) | 90 | Используется в сочетании с опцией «resize», укажите коэффициент изменения размера в процентах |
| Всегда | Выключатель | ЛОЖЬ | Если указано, виртуальное окно рабочего стола будет отображаться выше всех других окон |
| Упаковывать | Перевозить | Размер 9216 | Укажите размер пакета сети для потоков. Выберите размер, который подходит для ваших сетевых ограничений. |
| Блокируется | Перевозить | Размер 64 | Укажите размер блоков сетки экрана. Выберите размер, который подходит для удаленного размера экрана и ресурсов компьютера (например, процессора и сетевые возможности) |
| Logonui | Выключатель | ЛОЖЬ | Запросите сервер, чтобы открыть настольный компьютер Logonui/Winlogon вместо рабочего стола пользователя по умолчанию (требует привилегии системы в активном сеансе) |
| Ценить | Описание |
|---|---|
| Неполноценный | Синхронизация буфера обмена отключена как на стороне просмотра, так и на серверных сторонах |
| Получать | Разрешены только входящие данные об буфере обмена |
| Отправлять | Разрешены только исходящие данные об буфере обмена |
| Оба | Синхронизация буфера обмена разрешена как на стороне просмотра, так и на серверных сторонах |
| Ценить | Описание |
|---|---|
| Размер 1024 | 1024 байт (1kib) |
| Size2048 | 2048 байт (2kib) |
| Размер 4096 | 4096 байтов (4KIB) |
| Размер 8192 | 8192 байт (8 киб) |
| Размер 9216 | 9216 байтов (9 киб) |
| Размер 12288 | 12288 байт (12 киб) |
| Размер 16384 | 16384 байт (16 киб) |
| Ценить | Описание |
|---|---|
| Размер32 | 32x32 |
| Размер 64 | 64x64 |
| Размер 96 | 96x96 |
| Размер 128 | 128x128 |
| Размер 256 | 256x256 |
| Размер 512 | 512x512 |
Рекомендуется использовать SecurePassword вместо пароля с простого текста, даже если пароль с простым текстом конвертируется в Securestring
Откройте новый сеанс удаленного рабочего стола в 127.0.0.1:2801 ', используя пароль' urcompl3xp@ssw0rd '
Invoke-RemoteDesktopViewer - ServerAddress " 127.0.0.1 " - ServerPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)При первом подключении к новому удаленному серверу зритель спросит, хотите ли вы доверять отпечаткам сервера. Если вы выберете опцию «всегда» доверять этому отпечаткам пальца, он будет сохранен в локальном реестре пользователей. Вы можете отозвать доверие к этому отпечаткам в любое время, используя соответствующую функцию.
Get-TrustedServersПример вывода:
PS C:UsersPhrozenDesktopProjectsPowerRemoteDesktop> Get-TrustedServers
Detail Fingerprint
------ -----------
@{FirstSeen=18/01/2022 19:40:24} D9F4637463445D6BB9F3EFBF08E06BE4C27035AF
@{FirstSeen=20/01/2022 15:52:33} 3FCBBFB37CF6A9C225F7F582F14AC4A4181BED53
@{FirstSeen=20/01/2022 16:32:14} EA88AADA402864D1864542F7F2A3C49E56F473B0
@{FirstSeen=21/01/2022 12:24:18} 3441CE337A59FC827466FC954F2530C76A3F8FE4
Remove-TrustedServer - Fingerprint " <target_ingerprint> " Clear-TrustedServers PowerRemoteDesktop_Server.psm1 должен быть импортирован / или установлен на локальной машине.
Invoke-RemoteDesktopServer | Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| ServerAddress | Нить | 0.0.0.0 | IP -адрес, представляющий IP -адрес локальной машины |
| Serverport | Целое число | 2801 | Номер порта, на котором можно прослушать входящие соединения |
| SecurePassword | Северно -серия | Никто | Объект Securestring, содержащий пароль, используемый для аутентификации удаленных зрителей (рекомендуется) |
| Пароль | Нить | Никто | Простой текст пароль, используемый для аутентификации удаленных зрителей (не рекомендуется; вместо этого используйте SecurePassword) |
| Отключить | Выключатель | ЛОЖЬ | Если указана, программа подаст сообщения условности |
| USETLSV1_3 | Выключатель | ЛОЖЬ | Если указана, программа будет использовать TLS V1.3 вместо TLS V1.2 для шифрования (рекомендуется, если обе системы поддерживают его) |
| Буфер обмена | Перевозить | Оба | Укажите режим синхронизации буфера обмена (параметры включают в себя «оба», «отключить», «отправить» и «получить»; см. Ниже подробнее) см. Ниже) |
| Сертификационный файл | Нить | Никто | Файл, содержащий действительную информацию о сертификате (x509), который включает в себя закрытый ключ |
| Кодировщик | Нить | Никто | Base64-кодированное представление всего файла сертификата, включая закрытый ключ |
| Viewonly | Выключатель | ЛОЖЬ | Если указано, удаленный просмотрщик сможет просматривать только рабочий стол и не будет иметь доступ к мышью или клавиатуре |
| Предотвратить Computertosleep | Выключатель | ЛОЖЬ | Если указано, эта опция не позволит компьютеру входить в режим сна, пока сервер активен и ждет новых подключений |
| Сертификатписное слово | Северно -серия | Никто | Укажите пароль, используемый для доступа к сертификату x509, защищенным паролем, предоставленным пользователем |
| Ценить | Описание |
|---|---|
| 127.0.0.1 | Слушайте только соединения из Localhost (обычно для целей отладки) |
| 0.0.0.0 | Слушайте подключения на всех сетевых интерфейсах, включая локальную сеть и Интернет |
| Ценить | Описание |
|---|---|
| Неполноценный | Синхронизация буфера обмена отключена как на стороне просмотра, так и на серверных сторонах |
| Получать | Разрешены только входящие данные об буфере обмена |
| Отправлять | Разрешены только исходящие данные об буфере обмена |
| Оба | Синхронизация буфера обмена разрешена как на стороне просмотра, так и на серверных сторонах |
Invoke-RemoteDesktopServer - ListenAddress " 0.0.0.0 " - ListenPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)
Invoke-RemoteDesktopServer - ListenAddress " 0.0.0.0 " - ListenPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force) - CertificateFile " c:certsphrozen.p12 " Начиная с версии 4.0.0, можно запечатлеть Logonui/Winlogon (приглашение UAC, окно входа в систему Windows, Ctrl+Alt+Del и т. Д.).
Однако для того, чтобы захватить LogonUI, сервер должен работать в контексте «Authority/System/System» в текущем активном сеансе.
Существует несколько методов нереста процесса в качестве пользователя системы в активном сеансе (например, Psexec, Process Hacker), но для простоты я рекомендую использовать свой проект PowerRunassystem (доступный на GitHub и можно установить через галерею PowerShell).
Install-Module - Name PowerRunAsSystemЗатем запустите команду Bellow в качестве администратора.
Invoke-InteractiveSystemPowerShellНовый терминал PowerShell должен появиться на вашем рабочем столе в качестве авторитета/системы NT
Если вы выполните приведенные выше шаги, на вашем рабочем столе должен появиться новый терминал PowerShell.
Из этого терминала вы можете запустить команду Power Demote Desktop Server и включить опцию Logonui для будущих подключений с удаленным рабочим столом.
Стоит отметить, что если вы не используете свой собственный сертификат X509, вам понадобятся привилегии администратора для создания нового сервера. Тем не менее, вы можете легко создать свой собственный сертификат X509, используя такие инструменты, как инструмент командной строки OpenSSL.
openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt
Затем экспортируйте новый сертификат ( должен включать закрытый ключ ).
openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt
Используйте CertificateFile . Пример: c:tlscertphrozen.crt
Кодировать существующий сертификат, используя PowerShell
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))или в системах Linux / Mac
base64 -i /tmp/phrozen.p12
Затем вы можете перенести файл сертификата Base64 Base64 к параметрам EncodedCertificate (одна строка)


] и ) правильно отправлено и интерпретируется.? = Легко? = Средний? = Жесткий
Сделано с ❤ в ??