

Pure PowerShell의 원격 데스크탑 액세스를위한 Power Remote Desktop 에 오신 것을 환영합니다! 이 모듈은 PowerShell 만 사용하여 하나 또는 여러 화면을 원격으로 제어하기위한 고유 한 솔루션을 제공합니다. 외부 프로토콜 및 소프트웨어에 의존하는 다른 원격 데스크탑 도구와 달리 당사의 모듈은 자체 원격 데스크탑 프로토콜을 사용합니다.
이 모듈은 클라이언트와 서버 구성 요소 모두로 구성되며, 둘 다 PowerShell에 완전히 작성됩니다. 당사의 프로토콜은 TLS를 사용하여 안전하고 암호화 된 통신을 제공하며 챌린지 기반 비밀번호 인증 및 인증서 기반 인증을 모두 제공합니다.
원격 데스크탑에 대한 완전한 마우스 및 키보드 제어를 제공하는 것 외에도 모듈은 뷰어의 마우스 커서 아이콘을 복제하고 로컬 및 원격 시스템 간의 클립 보드를 동기화합니다. PowerShell의 한계에도 불구하고, 우리는 네트워크 트래픽을 최적화하고 스트리밍 경험을 향상시키는 기술을 구현하여 원격 데스크톱 경험을 원활하게 만들었습니다.
글을 쓰는 시점에서 이것은 전적으로 알려진 PowerShell 기반 원격 데스크탑 응용 프로그램입니다. 우리는 그것이 당신이 그것이 유용하다는 것을 알기를 바랍니다. 그리고 우리는 당신이 가질 수있는 모든 피드백이나 제안을 환영합니다.
테스트 :
현재 버전 : 4.0.0 안정
더 나은 스트리밍 성능과 전반적인 경험을 위해 PowerShell 5 대신 PowerShell 7을 사용하는 것이 좋습니다.
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 Gallery에서 Power Remote Desktop을 설치할 수 있습니다. PowerShell Gallery는 Debian의 적성 또는 MacOS 용 Brew와 유사합니다. 그렇게하려면 다음 명령을 실행하십시오.
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 ' )등...
PowerRemoteDesktop_Viewer.psm1 로컬 컴퓨터에서 가져 오거나 설치해야합니다.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers 전원 원격 데스크탑 서버로 새로운 원격 데스크톱 세션을 만듭니다.
| 매개 변수 | 유형 | 기본 | 설명 |
|---|---|---|---|
| ServerAddress | 끈 | 127.0.0.1 | 원격 서버 호스트 또는 주소 |
| 서버 포트 | 정수 | 2801 | 원격 서버의 포트 번호 |
| SecurePassword | 보안 | 없음 | 원격 서버로 인증하는 데 사용되는 비밀번호가 포함 된 Securestring 객체 (권장) |
| 비밀번호 | 끈 | 없음 | 원격 서버로 인증하는 데 사용되는 일반 텍스트 비밀번호 (권장되지 않음; 대신 SecurePassword를 사용)) |
| 비활성화 | 스위치 | 거짓 | 지정된 경우 프로그램은 진실성 메시지를 억제합니다 |
| USETLSV1_3 | 스위치 | 거짓 | 지정된 경우 프로그램은 암호화에 TLS v1.2 대신 TLS v1.3을 사용합니다 (두 시스템 모두 지원하는 경우 권장). |
| 클립 보드 | 열거적 | 둘 다 | 클립 보드 동기화 모드를 지정하십시오 (옵션은 '둘 다', '비활성화', '보내기'및 '수신', 자세한 내용은 아래를 참조하십시오). |
| imagecompressionquality | 정수 (0-100) | 75 | JPEG 압축 레벨은 0 (최저 품질)에서 100 (최고 품질) 범위입니다. |
| 크기를 조정하십시오 | 스위치 | 거짓 | 지정된 경우 원격 데스크탑은 'Resizeratio'옵션에 따라 크기가 조정됩니다. |
| resizeratio | 정수 (30-99) | 90 | '크기 조정'옵션과 함께 사용되며 크기 조정 비율을 백분율로 지정하십시오. |
| 항상 | 스위치 | 거짓 | 지정된 경우 가상 데스크탑 창이 다른 모든 창 위에 표시됩니다. |
| 패킷 크기 | 열거적 | 크기 9216 | 스트림의 네트워크 패킷 크기를 지정하십시오. 네트워크 제약에 적합한 크기를 선택하십시오. |
| 블록 크기 | 열거적 | 크기 64 | 화면 그리드 블록의 크기를 지정하십시오. 원격 화면 크기와 컴퓨터 리소스 (예 : CPU 및 네트워크 기능)에 적합한 크기를 선택하십시오. |
| logonui | 스위치 | 거짓 | 기본 사용자 데스크탑 대신 Logonui/Winlogon 데스크탑을 열도록 서버에 요청하십시오 (활성 세션에서 시스템 권한이 필요함) |
| 값 | 설명 |
|---|---|
| 장애가 있는 | 클립 보드 동기화는 뷰어와 서버 측 모두에서 비활성화됩니다. |
| 받다 | 들어오는 클립 보드 데이터 만 허용됩니다 |
| 보내다 | 나가는 클립 보드 데이터 만 허용됩니다 |
| 둘 다 | 클립 보드 동기화는 뷰어와 서버 측 모두에서 허용됩니다. |
| 값 | 설명 |
|---|---|
| size1024 | 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 |
일반 텍스트 비밀번호가 Securestring으로 변환되는 경우에도 일반 텍스트 비밀번호 대신 SecurePassword를 사용하는 것이 좋습니다.
'127.0.0.1:2801'으로 새 원격 데스크톱 세션을 열어 '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-TrustedServers PowerRemoteDesktop_Server.psm1 로컬 컴퓨터에서 가져 오거나 설치해야합니다.
Invoke-RemoteDesktopServer | 매개 변수 | 유형 | 기본 | 설명 |
|---|---|---|---|
| ServerAddress | 끈 | 0.0.0.0 | 로컬 머신의 IP 주소를 나타내는 IP 주소 |
| 서버 포트 | 정수 | 2801 | 들어오는 연결을들을 수있는 포트 번호 |
| SecurePassword | 보안 | 없음 | 원격 시청자를 인증하는 데 사용되는 비밀번호가 포함 된 보안 객체 (권장) |
| 비밀번호 | 끈 | 없음 | 원격 시청자를 인증하는 데 사용되는 일반 텍스트 비밀번호 (권장되지 않음; 대신 SecurePassword를 사용하십시오) |
| 비활성화 | 스위치 | 거짓 | 지정된 경우 프로그램은 진실성 메시지를 억제합니다 |
| USETLSV1_3 | 스위치 | 거짓 | 지정된 경우 프로그램은 암호화에 TLS v1.2 대신 TLS v1.3을 사용합니다 (두 시스템 모두 지원하는 경우 권장). |
| 클립 보드 | 열거적 | 둘 다 | 클립 보드 동기화 모드를 지정하십시오 (옵션은 '둘 다', '비활성화', '보내기'및 '수신', 자세한 내용은 아래를 참조하십시오). |
| 증명서 파일 | 끈 | 없음 | 개인 키가 포함 된 유효한 인증서 정보 (x509)가 포함 된 파일 |
| encodedcertificate | 끈 | 없음 | 개인 키를 포함하여 전체 인증서 파일의 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 Login Window, Ctrl+Alt+Del 등)을 캡처 할 수 있습니다.
그러나 Logonui를 캡처하려면 서버는 현재 활성 세션에서 'NT Authority/System'의 맥락에서 실행해야합니다.
활성 세션 (예 : PSEXEC, 프로세스 해커)의 시스템 사용자로서 프로세스를 산란하는 방법은 여러 가지가 있지만 단순화하기 위해서는 PowerRunassystem 프로젝트 (GitHub에서 PowerShell 갤러리를 통해 설치할 수 있음)를 사용하는 것이 좋습니다.
Install-Module - Name PowerRunAsSystem그런 다음 Bellow 명령을 관리자로 실행하십시오.
Invoke-InteractiveSystemPowerShellNT Authority/System 으로 데스크탑에 새로운 PowerShell 터미널이 나타나야합니다.
위의 단계를 따르면 'NT Authority/System'사용자로 실행중인 데스크탑에 새로운 PowerShell 터미널이 나타나야합니다.
이 터미널에서 Power Remote Desktop Server 명령을 실행하고 향후 전원 원격 데스크탑 뷰어 연결을위한 '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 인증서 파일을 Parameter EncodedCertificate (한 줄)로 전달할 수 있습니다.


] 및 ) 올바르게 전송되고 해석되었습니다.? = 쉬운가요? = 중간? = 단단합니다
❤️으로 만들어 졌습니까 ??