

ยินดีต้อนรับสู่ Power Remote Desktop สำหรับการเข้าถึงเดสก์ท็อประยะไกลใน Pure PowerShell! โมดูลนี้นำเสนอโซลูชันที่ไม่ซ้ำกันสำหรับการควบคุมหน้าจอหนึ่งหรือหลายหน้าจอจากระยะไกลโดยใช้ PowerShell เท่านั้น ซึ่งแตกต่างจากเครื่องมือเดสก์ท็อประยะไกลอื่น ๆ ที่พึ่งพาโปรโตคอลและซอฟต์แวร์ภายนอกโมดูลของเราใช้โปรโตคอลเดสก์ท็อประยะไกลของตัวเอง
โมดูลประกอบด้วยทั้งไคลเอนต์และส่วนประกอบเซิร์ฟเวอร์ซึ่งทั้งสองอย่างนี้เขียนไว้ใน PowerShell โปรโตคอลของเราให้การสื่อสารที่ปลอดภัยและเข้ารหัสโดยใช้ TLS และเสนอทั้งการตรวจสอบรหัสผ่านตามความท้าทายและการรับรองความถูกต้องตามใบรับรอง
นอกเหนือจากการให้เมาส์และแป้นพิมพ์เต็มรูปแบบเหนือเดสก์ท็อประยะไกลโมดูลของเรายังจำลองไอคอนเคอร์เซอร์เมาส์สำหรับผู้ชมโดยซิงโครไนซ์คลิปบอร์ดระหว่างระบบท้องถิ่นและระยะไกลและอื่น ๆ แม้จะมีข้อ จำกัด ของ PowerShell แต่เราได้นำเทคนิคมาใช้เพื่อเพิ่มประสิทธิภาพการรับส่งข้อมูลเครือข่ายและปรับปรุงประสบการณ์การสตรีมมิ่งส่งผลให้ประสบการณ์เดสก์ท็อประยะไกลที่ราบรื่นและมีประสิทธิภาพ
ในช่วงเวลาของการเขียนนี่เป็นแอพพลิเคชั่นเดสก์ท็อประยะไกลที่ใช้ PowerShell ที่รู้จักกันดีเท่านั้น เราหวังว่าคุณจะพบว่ามีประโยชน์และเรายินดีรับข้อเสนอแนะหรือข้อเสนอแนะที่คุณมี
ทดสอบ:
เวอร์ชันปัจจุบัน: 4.0.0 เสถียร
เพื่อประสิทธิภาพการสตรีมที่ดีขึ้นและประสบการณ์โดยรวมเราขอแนะนำให้ใช้ PowerShell 7 แทน PowerShell 5
คุณสามารถติดตั้ง PowerShell 7 สำหรับ Windows ได้ที่นี่

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "หากคุณต้องการหลีกเลี่ยงการใช้ใบรับรองของคุณเองและไม่ต้องการผ่านกระบวนการสร้างคุณสามารถลบตัวเลือก 'CertificateFile' และเรียกใช้ PowerShell ในฐานะผู้ดูแลระบบแทน
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "นั่นคือมัน
มีหลายวิธีในการใช้แอปพลิเคชัน PowerShell นี้ วิธีที่แนะนำคือการติดตั้งทั้งส่วนประกอบเซิร์ฟเวอร์และผู้ชมโดยใช้แกลเลอรี PowerShell หรือคุณสามารถติดตั้งเป็นโมดูลหรือนำเข้าเป็นสคริปต์ด้วยตนเอง เลือกวิธีการที่เหมาะกับความต้องการและความชอบของคุณมากที่สุด
คุณสามารถติดตั้งเดสก์ท็อประยะไกลจาก PowerShell Gallery ซึ่งคล้ายกับความถนัดสำหรับ Debian หรือ Brew สำหรับ MacOS ในการทำเช่นนั้นให้เรียกใช้คำสั่งต่อไปนี้:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer อนุญาตให้มีการ AllowPrerelease เมื่อเวอร์ชันปัจจุบันถูกทำเครื่องหมายว่าเป็น preerlease
เมื่อคุณเรียกใช้คำสั่งคุณอาจเห็นคำเตือนต่อไปนี้ในพรอมต์คำสั่งของคุณ:
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
โคลน PowerRemotedesktop repository หรือดาวน์โหลดแพ็คเกจ GitHub Release
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 ข้อสังเกต: ไฟล์ Manifest เป็นตัวเลือก ( *.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 | โฮสต์หรือที่อยู่เซิร์ฟเวอร์ระยะไกล |
| เซิร์ฟเวอร์ | จำนวนเต็ม | 2801 | หมายเลขพอร์ตสำหรับเซิร์ฟเวอร์ระยะไกล |
| securepassword | การรักษาความปลอดภัย | ไม่มี | วัตถุ Securestring ที่มีรหัสผ่านที่ใช้สำหรับการตรวจสอบความถูกต้องกับเซิร์ฟเวอร์ระยะไกล (แนะนำ) |
| รหัสผ่าน | สาย | ไม่มี | รหัสผ่านข้อความธรรมดาที่ใช้สำหรับการตรวจสอบกับเซิร์ฟเวอร์ระยะไกล (ไม่แนะนำให้ใช้ securepassword แทน)) |
| ความปิดบัง | สวิตช์ | เท็จ | หากระบุโปรแกรมจะระงับข้อความการใช้คำย่ำแย่ |
| USETLSV1_3 | สวิตช์ | เท็จ | หากระบุโปรแกรมจะใช้ TLS v1.3 แทน TLS v1.2 สำหรับการเข้ารหัส (แนะนำหากทั้งสองระบบรองรับ) |
| คลิปบอร์ด | enum | ทั้งคู่ | ระบุโหมดการซิงโครไนซ์คลิปบอร์ด (ตัวเลือกรวมทั้ง 'ทั้งสอง', 'ปิดใช้งาน', 'ส่ง' และ 'รับ'; ดูรายละเอียดเพิ่มเติมด้านล่าง) |
| imageCompressionquality | จำนวนเต็ม (0-100) | 75 | ระดับการบีบอัด JPEG ตั้งแต่ 0 (คุณภาพต่ำสุด) ถึง 100 (คุณภาพสูงสุด) |
| ปรับขนาด | สวิตช์ | เท็จ | หากระบุเดสก์ท็อประยะไกลจะถูกปรับขนาดตามตัวเลือก 'resizeratio' |
| Resizeratio | จำนวนเต็ม (30-99) | 90 | ใช้ร่วมกับตัวเลือก 'ปรับขนาด' ระบุอัตราส่วนการปรับขนาดเป็นเปอร์เซ็นต์ |
| มักจะตอบสนองเสมอ | สวิตช์ | เท็จ | หากระบุหน้าต่างเดสก์ท็อปเสมือนจริงจะปรากฏขึ้นเหนือหน้าต่างอื่น ๆ ทั้งหมด |
| แพ็คเก็ต | enum | ขนาด 9216 | ระบุขนาดแพ็คเก็ตเครือข่ายสำหรับสตรีม เลือกขนาดที่เหมาะสมสำหรับข้อ จำกัด เครือข่ายของคุณ |
| บล็อกขนาด | enum | ขนาด 64 | ระบุขนาดของบล็อกกริดหน้าจอ เลือกขนาดที่เหมาะสมสำหรับขนาดหน้าจอระยะไกลและทรัพยากรของคอมพิวเตอร์ (เช่น CPU และความสามารถในเครือข่าย) |
| Logonui | สวิตช์ | เท็จ | ขอให้เซิร์ฟเวอร์เปิดเดสก์ท็อป Logonui/Winlogon แทนเดสก์ท็อปผู้ใช้เริ่มต้น (ต้องใช้สิทธิ์ระบบในเซสชันที่ใช้งานอยู่) |
| ค่า | คำอธิบาย |
|---|---|
| พิการ | การซิงโครไนซ์คลิปบอร์ดถูกปิดใช้งานทั้งด้านดูและเซิร์ฟเวอร์ |
| รับ | อนุญาตให้ใช้ข้อมูลคลิปบอร์ดที่เข้ามาเท่านั้น |
| ส่ง | อนุญาตให้ใช้ข้อมูลคลิปบอร์ดขาออกเท่านั้น |
| ทั้งคู่ | อนุญาตให้ซิงโครไนซ์คลิปบอร์ดได้ทั้งด้านดูและเซิร์ฟเวอร์ |
| ค่า | คำอธิบาย |
|---|---|
| ขนาด 1024 | 1024 ไบต์ (1kib) |
| Size2048 | 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
เปิดเซสชันเดสก์ท็อประยะไกลใหม่เป็น '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 ของเครื่องในเครื่อง |
| เซิร์ฟเวอร์ | จำนวนเต็ม | 2801 | หมายเลขพอร์ตที่จะฟังการเชื่อมต่อที่เข้ามา |
| securepassword | การรักษาความปลอดภัย | ไม่มี | วัตถุ Securestring ที่มีรหัสผ่านที่ใช้สำหรับตรวจสอบความถูกต้องของผู้ชมระยะไกล (แนะนำ) |
| รหัสผ่าน | สาย | ไม่มี | รหัสผ่านข้อความธรรมดาที่ใช้สำหรับการตรวจสอบผู้ชมระยะไกล (ไม่แนะนำให้ใช้ securepassword แทน) |
| ความปิดบัง | สวิตช์ | เท็จ | หากระบุโปรแกรมจะระงับข้อความการใช้คำย่ำแย่ |
| USETLSV1_3 | สวิตช์ | เท็จ | หากระบุโปรแกรมจะใช้ TLS v1.3 แทน TLS v1.2 สำหรับการเข้ารหัส (แนะนำหากทั้งสองระบบรองรับ) |
| คลิปบอร์ด | enum | ทั้งคู่ | ระบุโหมดการซิงโครไนซ์คลิปบอร์ด (ตัวเลือกรวมทั้ง 'ทั้งสอง', 'ปิดใช้งาน', 'ส่ง' และ 'รับ'; ดูรายละเอียดเพิ่มเติมด้านล่าง) |
| ใบรับรอง | สาย | ไม่มี | ไฟล์ที่มีข้อมูลใบรับรองที่ถูกต้อง (x509) ที่มีคีย์ส่วนตัว |
| เข้ารหัส | สาย | ไม่มี | การแสดงฐาน 64 ที่เข้ารหัสของไฟล์ใบรับรองทั้งหมดรวมถึงคีย์ส่วนตัว |
| อย่างเดียว | สวิตช์ | เท็จ | หากระบุไว้ผู้ชมระยะไกลจะสามารถดูเดสก์ท็อปเท่านั้นและจะไม่สามารถเข้าถึงเมาส์หรือคีย์บอร์ดได้ |
| PreventComputertosleep | สวิตช์ | เท็จ | หากระบุตัวเลือกนี้จะป้องกันไม่ให้คอมพิวเตอร์เข้าสู่โหมดสลีปในขณะที่เซิร์ฟเวอร์ทำงานอยู่และรอการเชื่อมต่อใหม่ |
| CertificatePassword | การรักษาความปลอดภัย | ไม่มี | ระบุรหัสผ่านที่ใช้ในการเข้าถึงใบรับรอง 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 เซิร์ฟเวอร์จะต้องทำงานภายใต้บริบทของ 'NT Authority/System' ในเซสชันที่ใช้งานปัจจุบัน
มีหลายวิธีในการวางไข่กระบวนการในฐานะผู้ใช้ระบบในเซสชันที่ใช้งานอยู่ (เช่น PSEXEC, กระบวนการแฮ็กเกอร์) แต่เพื่อความง่ายฉันขอแนะนำให้ใช้โครงการ PowerRunassystem ของฉัน (มีอยู่ใน GitHub และติดตั้งผ่าน PowerShell Gallery)
Install-Module - Name PowerRunAsSystemจากนั้นเรียกใช้คำสั่ง Bellow ในฐานะผู้ดูแลระบบ
Invoke-InteractiveSystemPowerShellเทอร์มินัล PowerShell ใหม่ควรปรากฏบนเดสก์ท็อปของคุณเป็น หน่วยงาน/ระบบ NT
หากคุณทำตามขั้นตอนข้างต้นเทอร์มินัล PowerShell ใหม่ควรปรากฏบนเดสก์ท็อปของคุณที่ทำงานเป็นผู้ใช้ 'NT Authority/System'
จากเทอร์มินัลนี้คุณสามารถเรียกใช้คำสั่ง Power Remote 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 เอาต์พุตไปยังพารามิเตอร์ EncodedCertificate (หนึ่งบรรทัด)


] และ ) ส่งและตีความอย่างถูกต้อง- = ง่าย? = ปานกลาง? = ยาก
ทำด้วย❤ใน ??