⚠️ 自2024年8月起,PowerRemoteDesktop已更名为Arcane,现可通过此官方仓库获取。当前仓库将不再维护。请务必收藏新仓库地址,如果觉得有用,请给个星标!
欢迎使用纯PowerShell编写的Power Remote Desktop远程桌面访问工具!本模块提供了一种独特的解决方案,仅使用PowerShell就能远程控制一个或多个屏幕。与其他依赖外部协议和软件的远程桌面工具不同,我们的模块使用自己的远程桌面协议。
该模块包含客户端和服务器组件,两者均完全用PowerShell编写。我们的协议使用TLS提供安全加密通信,并提供基于挑战的密码认证和基于证书的认证。
除了提供对远程桌面的完全鼠标和键盘控制外,我们的模块还为查看者复制鼠标光标图标,同步本地和远程系统之间的剪贴板,等等。尽管PowerShell存在限制,我们仍实施了优化网络流量和改善流媒体体验的技术,从而实现流畅高效的远程桌面体验。
据我们所知,这是目前唯一一个完全基于PowerShell的远程桌面应用。我们希望您能觉得它有用,也欢迎您提供任何反馈或建议。
测试通过平台:
当前版本:4.0.0 稳定版
为获得更好的流媒体性能和整体体验,我们建议使用PowerShell 7而非PowerShell 5。
您可以在这里为Windows安装PowerShell 7。
Install-Module -Name PowerRemoteDesktop_Server Invoke-RemoteDesktopServer -CertificateFile "<证书位置>"
如果您不想使用自己的证书,也不想创建一个,可以移除'CertificateFile'选项,并以管理员身份运行PowerShell。
Install-Module -Name PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer -ServerAddress "<IP地址>" -Password "<服务器显示的密码>"
就这么简单 😉
有几种方法可以使用这个PowerShell应用程序。推荐的方法是使用PowerShell Gallery安装服务器和查看器组件。或者,您可以将它们作为模块安装或手动导入它们作为脚本。选择最适合您需求和偏好的方法。
您可以从PowerShell Gallery安装Power Remote Desktop,类似于Debian的Aptitude或MacOS的Brew。要这样做,请运行以下命令:
Install-Module -Name PowerRemoteDesktop_Server Install-Module -Name PowerRemoteDesktop_Viewer
当当前版本标记为预发布时,AllowPrerelease
是必需的。
运行命令时,您可能会在命令提示符中看到以下警告:
不受信任的存储库
您正在从不受信任的存储库安装模块。如果您信任此存储库,请通过运行Set-PSRepository cmdlet更改其
InstallationPolicy值。您确定要从'PSGallery'安装模块吗?
输入'Y'确认并继续安装。安装完成后,两个模块都应该可用。您可以通过运行以下命令进行验证:
Get-Module -ListAvailable
示例输出:
PS C:\Users\Phrozen\Desktop> Get-Module -ListAvailable
目录:C:\Users\Phrozen\Documents\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..省略..>
如果模块没有显示出来,请尝试运行以下命令,然后再次检查:
Import-Module PowerRemoteDesktop_Server Import-Module PowerRemoteDesktop_Viewer
为了使模块可用,它必须位于已注册的模块路径中。您可以通过运行以下命令查看已注册的模块路径:
Write-Output $env:PSModulePath
示例输出:
C:\Users\Phrozen\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
克隆PowerRemoteDesktop仓库或下载Github发布包。
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
将PowerRemoteDesktop_Viewer和PowerRemoteDesktop_Server文件夹复制到所需的模块路径
示例:
C:\Users\<USER>\Documents\WindowsPowerShell\Modules
现在应该可以使用这两个模块了,可以使用以下命令进行验证:
Get-Module -ListAvailable
示例输出:
PS C:\Users\Phrozen\Desktop> Get-Module -ListAvailable
目录: C:\Users\Phrozen\Documents\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 PowerRemoteDesktop_Server Invoke-RemoteDesktopServer
Manifest 1.0.0 PowerRemoteDesktop_Viewer Invoke-RemoteDesktopViewer
<..省略..>
如果没有看到它们,运行以下命令并重新检查。
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
与Power Remote Desktop服务器创建新的远程桌面会话。
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
ServerAddress | 字符串 | 127.0.0.1 | 远程服务器主机或地址 |
ServerPort | 整数 | 2801 | 远程服务器的端口号 |
SecurePassword | SecureString | 无 | 包含用于远程服务器身份验证的密码的SecureString对象(推荐) |
Password | 字符串 | 无 | 用于远程服务器身份验证的明文密码(不推荐;请改用SecurePassword) |
DisableVerbosity | 开关 | False | 如果指定,程序将抑制详细输出消息 |
UseTLSv1_3 | 开关 | False | 如果指定,程序将使用TLS v1.3而不是TLS v1.2进行加密(如果两个系统都支持,则推荐使用) |
Clipboard | 枚举 | Both | 指定剪贴板同步模式(选项包括'Both'、'Disabled'、'Send'和'Receive';详见下文) |
ImageCompressionQuality | 整数 (0-100) | 75 | JPEG压缩级别,范围从0(最低质量)到100(最高质量) |
Resize | 开关 | False | 如果指定,远程桌面将根据'ResizeRatio'选项调整大小 |
ResizeRatio | 整数 (30-99) | 90 | 与'Resize'选项一起使用,指定调整大小的比例(百分比) |
AlwaysOnTop | 开关 | False | 如果指定,虚拟桌面窗口将显示在所有其他窗口之上 |
PacketSize | 枚举 | Size9216 | 指定流的网络数据包大小。选择适合您网络限制的大小。 |
BlockSize | 枚举 | Size64 | 指定屏幕网格块的大小。选择适合远程屏幕大小和计算机资源(如CPU和网络能力)的大小 |
LogonUI | 开关 | False | 请求服务器打开LogonUI/Winlogon桌面,而不是默认用户桌面(在活动会话中需要SYSTEM权限) |
值 | 描述 |
---|---|
Disabled | 在查看器和服务器端都禁用剪贴板同步 |
Receive | 只允许接收剪贴板数据 |
Send | 只允许发送剪贴板数据 |
Both | 在查看器和服务器端都允许剪贴板同步 |
值 | 描述 |
---|---|
Size1024 | 1024字节 (1KiB) |
Size2048 | 2048字节 (2KiB) |
Size4096 | 4096字节 (4KiB) |
Size8192 | 8192字节 (8KiB) |
Size9216 | 9216字节 (9KiB) |
Size12288 | 12288字节 (12KiB) |
Size16384 | 16384字节 (16KiB) |
值 | 描述 |
---|---|
Size32 | 32x32 |
Size64 | 64x64 |
Size96 | 96x96 |
Size128 | 128x128 |
Size256 | 256x256 |
Size512 | 512x512 |
建议使用SecurePassword而不是明文密码,即使明文密码正在转换为SecureString
使用密码'urCompl3xP@ssw0rd'打开到'127.0.0.1:2801'的新远程桌面会话
Invoke-RemoteDesktopViewer -ServerAddress "127.0.0.1" -ServerPort 2801 -SecurePassword (ConvertTo-SecureString -String "urCompl3xP@ssw0rd" -AsPlainText -Force)
首次连接到新的远程服务器时,查看器会询问是否信任服务器的指纹。如果选择"始终"信任此指纹,它将被保存在本地用户注册表中。您可以随时使用适当的函数撤销对此指纹的信任。
Get-TrustedServers
示例输出:
PS C:\Users\Phrozen\Desktop\Projects\PowerRemoteDesktop> Get-TrustedServers
详细信息 指纹
------ -----------
@{FirstSeen=2022/01/18 19:40:24} D9F4637463445D6BB9F3EFBF08E06BE4C27035AF
@{FirstSeen=2022/01/20 15:52:33} 3FCBBFB37CF6A9C225F7F582F14AC4A4181BED53
@{FirstSeen=2022/01/20 16:32:14} EA88AADA402864D1864542F7F2A3C49E56F473B0
@{FirstSeen=2022/01/21 12:24:18} 3441CE337A59FC827466FC954F2530C76A3F8FE4
### 永久删除受信任的服务器
```powershell
Remove-TrustedServer -Fingerprint "<目标指纹>"
```
### 永久删除所有受信任的服务器(清除)
```powershell
Clear-TrustedServers
```
---
### 服务器
需要在本地机器上导入或安装`PowerRemoteDesktop_Server.psm1`。
#### 可用的模块函数
```powershell
Invoke-RemoteDesktopServer
```
##### ⚙️ 支持的选项:
| 参数 | 类型 | 默认值 | 描述 |
|------------------------|------------------|------------|--------------|
| ServerAddress | 字符串 | 0.0.0.0 | 表示本地机器IP地址的IP地址 |
| ServerPort | 整数 | 2801 | 用于监听传入连接的端口号 |
| SecurePassword | SecureString | 无 | 包含用于验证远程查看器的密码的SecureString对象(推荐) |
| Password | 字符串 | 无 | 用于验证远程查看器的明文密码(不推荐;请使用SecurePassword) |
| DisableVerbosity | 开关 | False | 如果指定,程序将抑制详细信息消息 |
| UseTLSv1_3 | 开关 | False | 如果指定,程序将使用TLS v1.3而不是TLS v1.2进行加密(如果两个系统都支持,则推荐) |
| Clipboard | 枚举 | Both | 指定剪贴板同步模式(选项包括"Both"、"Disabled"、"Send"和"Receive";详细信息见下文) |
| CertificateFile | 字符串 | 无 | 包含有效证书信息(x509)的文件,包括私钥 |
| EncodedCertificate | 字符串 | 无 | 整个证书文件的base64编码表示,包括私钥 |
| ViewOnly | 开关 | False | 如果指定,远程查看器将只能查看桌面,无法访问鼠标或键盘 |
| PreventComputerToSleep | 开关 | False | 如果指定,此选项将在服务器处于活动状态并等待新连接时阻止计算机进入睡眠模式 |
| CertificatePassword | SecureString | 无 | 指定用于访问用户提供的受密码保护的x509证书的密码 |
##### 服务器地址示例
| 值 | 描述 |
|-------------------|--------------------------------------------------------------------------|
| 127.0.0.1 | 仅监听来自本地主机的连接(通常用于调试目的) |
| 0.0.0.0 | 监听所有网络接口的连接,包括本地网络和互联网 |
##### 剪贴板模式枚举属性
| 值 | 描述 |
|-------------------|----------------------------------------------------|
| Disabled | 在查看器和服务器端都禁用剪贴板同步 |
| Receive | 仅允许传入的剪贴板数据 |
| Send | 仅允许传出的剪贴板数据 |
| Both | 在查看器和服务器端都允许剪贴板同步 |
##### ⚠️ 重要提示
1. 建议使用SecurePassword而不是明文密码,即使明文密码正在转换为SecureString。
2. 如果您没有使用"CertificateFile"或"EncodedCertificate"指定自定义证书,将在本地机器上生成并安装默认的自签名证书(如果尚不存在)。这需要管理员权限。要使用非特权帐户运行服务器,您必须提供自己的证书位置。
3. 如果您没有指定SecurePassword或Password,将生成并在终端中显示一个随机的复杂密码(此密码是临时的)。
##### 示例
```powershell
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:\certs\phrozen.p12"
```
#### 如何捕获LogonUI
从4.0.0版本开始,可以捕获LogonUI/Winlogon(UAC提示、Windows登录窗口、CTRL+ALT+DEL等)。
但是,为了捕获LogonUI,服务器必须在当前活动会话中以"NT AUTHORITY/System"的上下文运行。
有多种方法可以在活动会话中以SYSTEM用户身份生成进程(例如PsExec、Process Hacker),但为了简单起见,我推荐使用我的PowerRunAsSystem项目(可在GitHub上获取,并可通过PowerShell Gallery安装)。
```powershell
Install-Module -Name PowerRunAsSystem
```
然后以管理员身份运行以下命令。
```powershell
Invoke-InteractiveSystemPowerShell
```
一个新的PowerShell终端应该会以**NT AUTHORITY/System**身份出现在您的桌面上。
如果您按照上述步骤操作,一个新的PowerShell终端应该会以"NT AUTHORITY/System"用户身份出现在您的桌面上。
从这个终端,您可以运行Power Remote Desktop服务器命令,并为将来的Power Remote Desktop查看器连接启用"LogonUI"选项。
值得注意的是,如果您不使用自己的X509证书,您将需要管理员权限来创建新服务器。但是,您可以使用诸如OpenSSL命令行工具等工具轻松创建自己的X509证书。
##### 生成您的证书
```
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:\tlscert\phrozen.crt`
##### 作为base64表示集成到服务器
使用PowerShell对现有证书进行编码
```powershell
[convert]::ToBase64String((Get-Content -path "c:\tlscert\phrozen.crt" -Encoding byte))
```
或在Linux / Mac系统上
```
base64 -i /tmp/phrozen.p12
```
然后您可以将输出的base64证书文件传递给参数`EncodedCertificate`(一行)
## 更新日志
### 2022年1月11日(1.0.1 Beta 2)
* 桌面图像现在以原始字节而非base64字符串传输,从而略微提升了性能。
* 协议发生了大幅改变。现在更易读且不易出错。
* 增加了TLS v1.3选项(某些系统可能不支持)。
* 进行了多项代码优化、重构和修复。
* 实施了密码复杂度检查,以避免使用简单密码。
* 可以禁用详细输出。
* 服务器和查看器版本同步。两者必须使用相同版本。
### 2022年1月12日(1.0.2 Beta 3)
* 完全支持HDPI。
### 2022年1月12日(1.0.3 Beta 4)
* 可以更改桌面图像质量。
* 如果远程机器有多个屏幕(显示器),可以选择要捕获的屏幕。
#### 多屏幕选择

### 2022年1月14日(1.0.4 Beta 5)
* 查看器中的密码以SecureString形式存储。我认为在服务器端实现SecureString没有意义,如果你认为有必要,请说服我。
* 服务器指纹验证。
* 可以为当前PowerShell实例信任服务器,或使用本地存储持久信任。
* 可以管理受信任的服务器(列出、删除、删除所有)
#### 指纹验证

### 2022年1月18日(1.0.5 Beta 6)
* 多项代码改进以支持传入/传出事件。
* 实现了全局光标状态同步(现在虚拟桌面鼠标光标与远程服务器相同)。
* 修复了密码生成器算法。
* 虚拟键盘的`]`和`)`键可正确发送和解释。
* 添加了查看器 <-> 服务器的剪贴板同步。
* 服务器支持新选项,仅显示桌面(在此模式下禁用鼠标移动、点击、滚轮和键盘控制)。
### 2022年1月21日(1.0.6)
* 移除了TransportMode选项。
* 提高了桌面流的性能/速度。
### 2022年1月28日(2.0.0)
* 协议完全重新设计,现在更稳定和模块化。
* 现在支持会话并发,多个查看器可以同时连接到一个服务器。
* 可以使用CTRL+C停止服务器
* 图像质量现在由查看器请求。
* 桌面重新调整大小现在在服务器端进行。
* 查看器现在可以强制请求桌面重新调整大小。
* 修复了虚拟桌面居中的故障。
* 握手调用(身份验证 + 会话/工作器协商)现在会超时,以避免可能的死锁。
* 虚拟桌面窗体现在可以始终置于其他窗体之上。
* 服务器最终使用安全字符串来处理密码认证。
### 2022年2月9日(3.0.0)
* 防止服务器端计算机进入睡眠状态。
* 首次支持动作更新,以提高桌面流速度。
* 在某些情况下鼠标移动如预期工作。
* 改进了键盘模拟。
* 各种优化和修复。
### 2022年2月10日(3.1.0)
* 代码重构和改进。
* 改进桌面流以获得更多FPS。
* 支持密码保护的外部x509证书。
### 2022年3月10日(4.0.0)
* 大幅优化桌面流,FPS提高65%(如果调整BlockSize,甚至更多)
* 桌面重新调整大小现在在查看器端自动进行,以简化代码和提高效率。
* 不再需要FastResize选项。
* 各种代码优化/修复。
* 支持WIN键盘键。
* 虚拟桌面窗口在终端之上打开。
* 服务器现在支持LogonUI / Winlogon(测试版)
### 想法和待办事项列表
* 🟢 SSL/TLS的相互认证(客户端证书)
* 🟠 当本地分辨率发生变化时中断会话。
* 🔴 LogonUI支持。
🟢 = 简单
🟠 = 中等
🔴 = 困难
用❤️在🇫🇷制作
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不 再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松 获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语 音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号