

歡迎使用純PowerShell的遠程桌面訪問遠程桌面!該模塊提供了一種獨特的解決方案,用於僅使用PowerShell遠程控制一個或多個屏幕。與其他依賴外部協議和軟件的遠程桌面工具不同,我們的模塊使用了自己的遠程桌面協議。
該模塊既由客戶端和服務器組件組成,它們都完全用PowerShell編寫。我們的協議使用TLS提供安全的加密通信,並提供基於挑戰的密碼身份驗證和基於證書的身份驗證。
除了在遠程桌面上提供完整的鼠標和鍵盤控件外,我們的模塊還為查看器複製了鼠標光標圖標,將剪貼板在本地和遠程系統之間同步,等等。儘管PowerShell受到了局限性,但我們已經實施了技術來優化網絡流量並改善流媒體體驗,從而帶來了流暢有效的遠程桌面體驗。
在撰寫本文時,這是唯一已知的完全基於PowerShell的遠程桌面應用程序。我們希望您發現它有用,我們歡迎您可能會有的任何反饋或建議。
測試:
當前版本: 4.0.0穩定
為了獲得更好的流媒體性能和整體體驗,我們建議使用PowerShell 7代替PowerShell 5。
您可以在此處安裝Windows的PowerShell 7

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畫廊中安裝Power Remote桌面,該桌麵類似於Debian或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存儲庫或下載GitHub版本包。
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
將PowerRemotedesktop_viewer和PowerRemotedesktop_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 ' )ETC...
PowerRemoteDesktop_Viewer.psm1需要導入 /或安裝在本地計算機上。
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers 使用電源遠程桌面服務器創建新的遠程桌面會話。
| 範圍 | 類型 | 預設 | 描述 |
|---|---|---|---|
| ServerAddress | 細繩 | 127.0.0.1 | 遠程服務器主機或地址 |
| ServerPort | 整數 | 2801 | 遠程服務器的端口號 |
| SecurePassword | Securestring | 沒有任何 | Securestring對象包含用於使用遠程服務器進行身份驗證的密碼(建議) |
| 密碼 | 細繩 | 沒有任何 | 用於使用遠程服務器進行身份驗證的普通文本密碼(不建議使用;改用SecurePassword) |
| 禁用 | 轉變 | 錯誤的 | 如果指定,該程序將抑制詳細消息 |
| USETLSV1_3 | 轉變 | 錯誤的 | 如果指定,該程序將使用TLS v1.3而不是TLS V1.2進行加密(如果兩個系統都支持,則建議使用) |
| 剪貼板 | 枚舉 | 兩個都 | 指定剪貼板同步模式(選項包括'''',disabled','send''和'receart';請參見下文以獲取更多詳細信息) |
| 想像壓縮 | 整數(0-100) | 75 | JPEG壓縮水平從0(質量最低)到100(最高質量)不等 |
| 調整大小 | 轉變 | 錯誤的 | 如果指定,將根據“ Resizeratio”選項調整遠程桌面大小 |
| resizeratio | 整數(30-99) | 90 | 與“調整大小”選項結合使用,將調整大小比率指定為百分比 |
| 始終是座 | 轉變 | 錯誤的 | 如果指定,虛擬桌面窗口將在所有其他窗口上方顯示 |
| packetsize | 枚舉 | 尺寸9216 | 指定流的網絡數據包大小。選擇適合您的網絡約束的大小。 |
| 阻止 | 枚舉 | 尺寸64 | 指定屏幕網格塊的大小。選擇適合遠程屏幕尺寸和計算機資源的尺寸(例如CPU和網絡功能) |
| logonui | 轉變 | 錯誤的 | 請求服務器打開logonui/winlogon桌面而不是默認用戶桌面(在活動會話中需要係統特權) |
| 價值 | 描述 |
|---|---|
| 禁用 | 剪貼板同步在查看器和服務器側都被禁用 |
| 收到 | 僅允許傳入的剪貼板數據 |
| 發送 | 僅允許傳出剪貼板數據 |
| 兩個都 | 在查看器和服務器側都允許剪貼板同步 |
| 價值 | 描述 |
|---|---|
| size1024 | 1024字節(1KIB) |
| 尺寸2048 | 2048字節(2KIB) |
| 尺寸4096 | 4096字節(4KIB) |
| 尺寸8192 | 8192字節(8KIB) |
| 尺寸9216 | 9216字節(9KIB) |
| 尺寸12288 | 12288字節(12KIB) |
| 尺寸16384 | 16384字節(16KIB) |
| 價值 | 描述 |
|---|---|
| 尺寸32 | 32x32 |
| 尺寸64 | 64x64 |
| 尺寸96 | 96x96 |
| 尺寸128 | 128x128 |
| 尺寸256 | 256x256 |
| 尺寸512 | 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: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-TrustedServersPowerRemoteDesktop_Server.psm1需要導入 /或安裝在本地計算機上。
Invoke-RemoteDesktopServer | 範圍 | 類型 | 預設 | 描述 |
|---|---|---|---|
| ServerAddress | 細繩 | 0.0.0.0 | IP地址表示本地機器的IP地址 |
| ServerPort | 整數 | 2801 | 聆聽傳入連接的端口號 |
| SecurePassword | Securestring | 沒有任何 | Securestring對象包含用於身份驗證遠程查看器的密碼(建議) |
| 密碼 | 細繩 | 沒有任何 | 用於身份驗證遠程查看器的普通文本密碼(不推薦;改用Securepassword) |
| 禁用 | 轉變 | 錯誤的 | 如果指定,該程序將抑制詳細消息 |
| USETLSV1_3 | 轉變 | 錯誤的 | 如果指定,該程序將使用TLS v1.3而不是TLS V1.2進行加密(如果兩個系統都支持,則建議使用) |
| 剪貼板 | 枚舉 | 兩個都 | 指定剪貼板同步模式(選項包括'''',disabled','send''和'receart';請參見下文以獲取更多詳細信息) |
| 證書文件 | 細繩 | 沒有任何 | 包含包括私鑰的有效證書信息(x509)的文件 |
| 編碼 | 細繩 | 沒有任何 | 整個證書文件的base64編碼表示形式,包括私鑰 |
| 視圖 | 轉變 | 錯誤的 | 如果指定,遠程查看器將只能查看桌面,並且無法訪問鼠標或鍵盤 |
| 預防computertosleep | 轉變 | 錯誤的 | 如果指定,此選項將阻止計算機在服務器處於活動狀態並等待新連接時進入睡眠模式 |
| 證書通信 | Securestring | 沒有任何 | 指定用於訪問用戶提供密碼保護的X509證書的密碼 |
| 價值 | 描述 |
|---|---|
| 127.0.0.1 | 僅聽當地主機的連接(通常是出於調試目的) |
| 0.0.0.0 | 聆聽所有網絡接口上的連接,包括本地網絡和Internet |
| 價值 | 描述 |
|---|---|
| 禁用 | 剪貼板同步在查看器和服務器側都被禁用 |
| 收到 | 僅允許傳入的剪貼板數據 |
| 發送 | 僅允許傳出剪貼板數據 |
| 兩個都 | 在查看器和服務器側都允許剪貼板同步 |
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,必須在當前活動會話中的“ nt授權/系統”的上下文下運行服務器。
有多種方法可以在活動會話中作為系統用戶(例如PSEXEC,Process Hacker)作為系統用戶,但是為簡單起見,我建議使用我的PowerRunassystem項目(可在Github上可用,可通過PowerShell Gallery安裝)。
Install-Module - Name PowerRunAsSystem然後運行Bellow命令作為管理員。
Invoke-InteractiveSystemPowerShell新的Powershell終端應在您的桌面上以NT權限/系統出現
如果您按照上述步驟進行操作,則應在桌面上以“ NT Authority/System”用戶的形式出現一個新的PowerShell終端。
在此終端中,您可以運行電源遠程桌面服務器命令,並啟用“ 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:tlscertphrozen.crt
使用PowerShell編碼現有證書
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))或在Linux / Mac系統上
base64 -i /tmp/phrozen.p12
然後,您可以將輸出base64證書文件傳遞到參數EncodedCertificate (一行)


]和)正確發送和解釋。? =容易? =中等? =硬
用❤️製成?