

¡Bienvenido a Power Remote Desktop para acceso de escritorio remoto en Pure PowerShell! Este módulo ofrece una solución única para controlar de forma remota una o múltiples pantallas utilizando solo PowerShell. A diferencia de otras herramientas de escritorio remotas que dependen de protocolos y software externos, nuestro módulo utiliza su propio protocolo de escritorio remoto.
El módulo consta de un cliente y un componente del servidor, los cuales están escritos completamente en PowerShell. Nuestro protocolo proporciona comunicación segura y cifrada utilizando TLS y ofrece autenticación de contraseña basada en desafíos y autenticación basada en certificados.
Además de proporcionar control completo del mouse y el teclado sobre el escritorio remoto, nuestro módulo también replica el icono del cursor del mouse para el espectador, sincroniza el portapapeles entre los sistemas locales y remotos, y más. A pesar de las limitaciones de PowerShell, hemos implementado técnicas para optimizar el tráfico de red y mejorar la experiencia de transmisión, lo que resulta en una experiencia de escritorio remota suave y eficiente.
Al momento de escribir, esta es la única aplicación de escritorio remota basada en PowerShell basada en PowerShell. Esperamos que lo encuentre útil y agradecemos cualquier comentario o sugerencia que pueda tener.
Probado en:
Versión actual: 4.0.0 Estable
Para un mejor rendimiento de transmisión y una experiencia general, recomendamos usar PowerShell 7 en lugar de PowerShell 5.
Puede instalar PowerShell 7 para Windows aquí

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "Si desea evitar el uso de su propio certificado y prefiere no pasar por el proceso de creación de uno, puede eliminar la opción 'Certificada' y ejecutar PowerShell como administrador.
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "Eso es todo
Hay varias formas de usar esta aplicación PowerShell. El método recomendado es instalar los componentes del servidor y el espectador utilizando la galería PowerShell. Alternativamente, puede instalarlos como módulos o importarlos como scripts manualmente. Elija el método que mejor se adapte a sus necesidades y preferencias.
Puede instalar Power Remote Desktop desde la Galería PowerShell, que es similar a la aptitud para Debian o Brew para MacOS. Para hacerlo, ejecute los siguientes comandos:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer AllowPrerelease sea obligatoria cuando la versión actual se marca como una prerelaseguible
Cuando ejecuta el comando, puede ver la siguiente advertencia en su símbolo del sistema:
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'?
Escriba 'Y' para confirmar y continúe con la instalación. Cuando se completa la instalación, ambos módulos deberían estar disponibles. Puede verificar esto ejecutando el siguiente comando:
Get-Module - ListAvailableSalida de ejemplo:
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..>
Si los módulos no aparecen, intente ejecutar los siguientes comandos y luego verifique nuevamente:
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_ViewerPara que un módulo esté disponible, debe ubicarse en una ruta de módulo registrada. Puede ver las rutas del módulo registradas ejecutando el siguiente comando:
Write-Output $ env: PSModulePathSalida de ejemplo:
C:UsersPhrozenDocumentsWindowsPowerShellModules;C:Program FilesWindowsPowerShellModules;C:WINDOWSsystem32WindowsPowerShellv1.0Modules
Repositorio de clon PowerRemotedesktop o descargue un paquete de lanzamiento de GitHub.
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
Copiar las carpetas PowerRemotedesktop_viewer y PowerRemotedesktop_Server a la ruta del módulo deseado
Ejemplo:
C:Users<USER>DocumentsWindowsPowerShellModules
Ambos módulos ahora deberían estar disponibles, puede verificar el comando:
Get-Module - ListAvailableSalida de ejemplo:
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..>
Si no los ve, ejecute los siguientes comandos y vuelva.
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewer Aviso: los archivos de manifiesto son opcionales ( *.psd1 ) y se pueden eliminar.
No es obligatorio instalar esta aplicación como un módulo PowerShell (incluso si la extensión del archivo es *.psm1 )
También puede cargarlo como un guión de PowerShell. Existen múltiples métodos que incluyen:
Invocar comandos usando:
IEX ( Get-Content .PowerRemoteDesktop_[ Server / Viewer ].psm1 - Raw)Carga de script desde una ubicación remota:
IEX ( New-Object Net.WebClient).DownloadString( ' http://127.0.0.1/PowerRemoteDesktop_[Server/Viewer].psm1 ' )etc...
PowerRemoteDesktop_Viewer.psm1 debe importarse / o instalar en la máquina local.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers Cree una nueva sesión de escritorio remota con un servidor de escritorio remoto de Power.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
| Servidor de servidor | Cadena | 127.0.0.1 | Host o dirección del servidor remoto |
| Servidor | Entero | 2801 | Número de puerto para el servidor remoto |
| SecurePassword | Securestring | Ninguno | Objeto Surestring que contiene la contraseña utilizada para autenticar con el servidor remoto (recomendado) |
| Contraseña | Cadena | Ninguno | Contraseña de texto sencillo utilizado para autenticar con el servidor remoto (no recomendado; use SecurePassword en su lugar))) |
| Desactivar laverbosidad | Cambiar | FALSO | Si se especifica, el programa suprimirá los mensajes de verbosidad |
| USETLSV1_3 | Cambiar | FALSO | Si se especifica, el programa usará TLS v1.3 en lugar de TLS v1.2 para cifrado (recomendado si ambos sistemas lo admiten) |
| Portapapeles | Enumer | Ambos | Especifique el modo de sincronización del portapapeles (las opciones incluyen 'ambas', 'deshabilitadas', 'enviar' y 'recibir'; ver a continuación para obtener más detalles) |
| ImageCompressionQuality | Entero (0-100) | 75 | Nivel de compresión JPEG que varía de 0 (calidad más baja) a 100 (más alta calidad) |
| Cambiar de tamaño | Cambiar | FALSO | Si se especifica, el escritorio remoto se redimensionará de acuerdo con la opción 'resoneratio' |
| Resonancia | Entero (30-99) | 90 | Utilizado junto con la opción 'cambiar el tamaño', especifique la relación de cambio de tamaño como porcentaje |
| Siempre tudopta | Cambiar | FALSO | Si se especifica, la ventana de escritorio virtual se mostrará sobre todos los demás Windows |
| Embalaje | Enumer | Size9216 | Especifique el tamaño del paquete de red para las transmisiones. Elija un tamaño que sea apropiado para sus restricciones de red. |
| Dimensionar | Enumer | Size64 | Especifique el tamaño de los bloques de cuadrícula de pantalla. Elija un tamaño apropiado para el tamaño de la pantalla remota y los recursos de la computadora (como CPU y capacidades de red) |
| Logonui | Cambiar | FALSO | Solicite el servidor que abra el escritorio Logonui/Winlogon en lugar del escritorio de usuario predeterminado (requiere privilegio del sistema en la sesión activa) |
| Valor | Descripción |
|---|---|
| Desactivado | La sincronización del portapapeles está deshabilitada en los lados del visor como del servidor |
| Recibir | Solo se permiten datos entrantes del portapapeles |
| Enviar | Solo se permiten datos salientes del portapapeles |
| Ambos | La sincronización del portapapeles está permitida tanto en los lados del visor como en el servidor |
| Valor | Descripción |
|---|---|
| Tamaño1024 | 1024 bytes (1kib) |
| Tamaño2048 | 2048 bytes (2kib) |
| Size4096 | 4096 bytes (4kib) |
| Size8192 | 8192 bytes (8kib) |
| Size9216 | 9216 bytes (9kib) |
| Size12288 | 12288 bytes (12kib) |
| Size16384 | 16384 bytes (16kib) |
| Valor | Descripción |
|---|---|
| Size32 | 32x32 |
| Size64 | 64x64 |
| Size96 | 96x96 |
| Size128 | 128x128 |
| Size256 | 256x256 |
| Size512 | 512x512 |
Se recomienda usar SecurePassword en lugar de una contraseña de texto sencillo, incluso si la contraseña de texto sencillo se está convirtiendo en SecureString
Abra una nueva sesión de escritorio remota a '127.0.0.1:2801' Uso de la contraseña 'urcompl3xp@ssw0rd'
Invoke-RemoteDesktopViewer - ServerAddress " 127.0.0.1 " - ServerPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)Al conectarse a un nuevo servidor remoto por primera vez, el espectador le preguntará si desea confiar en la huella digital del servidor. Si selecciona la opción de 'siempre' confiar en esta huella digital, se guardará en el registro de usuarios locales. Puede revocar la confianza de esta huella digital en cualquier momento utilizando la función apropiada.
Get-TrustedServersSalida de ejemplo:
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 debe importarse / o instalar en la máquina local.
Invoke-RemoteDesktopServer | Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
| Servidor de servidor | Cadena | 0.0.0.0 | Dirección IP que representa la dirección IP de la máquina local |
| Servidor | Entero | 2801 | El número de puerto sobre el cual escuchar las conexiones entrantes |
| SecurePassword | Securestring | Ninguno | Objeto Securestring que contiene la contraseña utilizada para autenticar a los espectadores remotos (recomendado) |
| Contraseña | Cadena | Ninguno | Contraseña de texto sencillo utilizado para autenticar los espectadores remotos (no se recomienda; use SecurePassword en su lugar) |
| Desactivar laverbosidad | Cambiar | FALSO | Si se especifica, el programa suprimirá los mensajes de verbosidad |
| USETLSV1_3 | Cambiar | FALSO | Si se especifica, el programa usará TLS v1.3 en lugar de TLS v1.2 para cifrado (recomendado si ambos sistemas lo admiten) |
| Portapapeles | Enumer | Ambos | Especifique el modo de sincronización del portapapeles (las opciones incluyen 'ambas', 'deshabilitadas', 'enviar' y 'recibir'; ver a continuación para obtener más detalles) |
| Certificado | Cadena | Ninguno | Un archivo que contiene información de certificado válido (X509) que incluye la clave privada |
| Codedcertificate | Cadena | Ninguno | Una representación codificada de base64 de todo el archivo de certificado, incluida la clave privada |
| Vista | Cambiar | FALSO | Si se especifica, el visor remoto solo podrá ver el escritorio y no tendrá acceso al mouse o teclado |
| Prevenircomputtos dreep | Cambiar | FALSO | Si se especifica, esta opción evitará que la computadora ingrese al modo de suspensión mientras el servidor está activo y espera nuevas conexiones |
| Word de Certificado | Securestring | Ninguno | Especifique la contraseña utilizada para acceder a un certificado X509 protegido por contraseña proporcionado por el usuario |
| Valor | Descripción |
|---|---|
| 127.0.0.1 | Solo escuche las conexiones del localhost (generalmente para fines de depuración) |
| 0.0.0.0 | Escuche las conexiones en todas las interfaces de red, incluida la red local e Internet |
| Valor | Descripción |
|---|---|
| Desactivado | La sincronización del portapapeles está deshabilitada en los lados del visor como del servidor |
| Recibir | Solo se permiten datos entrantes del portapapeles |
| Enviar | Solo se permiten datos salientes del portapapeles |
| Ambos | La sincronización del portapapeles está permitida tanto en los lados del visor como en el servidor |
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 " A partir de la versión 4.0.0, es posible capturar Logonui/Winlogon (indicador de UAC, ventana de inicio de sesión de Windows, Ctrl+Alt+del, etc.).
Sin embargo, para capturar el Logonui, el servidor debe ejecutarse en el contexto de 'Autoridad/Sistema NT' en la sesión activa actual.
Existen múltiples métodos para generar un proceso como usuario del sistema en la sesión activa (por ejemplo, PSEXEC, PROCESS HACKER), pero por simplicidad recomiendo usar mi proyecto PowerRunassystem (disponible en GitHub e instalable a través de la Galería PowerShell).
Install-Module - Name PowerRunAsSystemLuego ejecute el comando bellow como administrador.
Invoke-InteractiveSystemPowerShellUna nueva terminal de PowerShell debe aparecer en su escritorio como autoridad/sistema NT
Si sigue los pasos anteriores, debe aparecer un nuevo terminal de PowerShell en su escritorio que se ejecuta como el usuario de 'Autoridad/Sistema NT'.
Desde este terminal, puede ejecutar el comando Power Remote Desktop Server y habilitar la opción 'Logonui' para futuras conexiones de visor de escritorio remoto de alimentación.
Vale la pena señalar que si no usa su propio certificado X509, necesitará privilegios de administrador para crear un nuevo servidor. Sin embargo, puede crear fácilmente su propio certificado X509 utilizando herramientas como la herramienta OpenSSL Command Line.
openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt
Luego exporte el nuevo certificado ( debe incluir la clave privada ).
openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt
Use CertificateFile . Ejemplo: c:tlscertphrozen.crt
Codifica un certificado existente usando PowerShell
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))o en sistemas Linux / Mac
base64 -i /tmp/phrozen.p12
Luego puede pasar el archivo de certificado Base64 de salida al parámetro EncodedCertificate (una línea)


] y ) enviado e interpretado correctamente.? = Fácil? = Medio? = Duro
Hecho con ❤️ en ??