

Bem -vindo ao Power Remote Desktop para acesso a desktop remoto em Pure PowerShell! Este módulo oferece uma solução exclusiva para controlar remotamente uma ou várias telas usando apenas o PowerShell. Ao contrário de outras ferramentas de desktop remotas que dependem de protocolos e software externos, nosso módulo utiliza seu próprio protocolo de desktop remoto.
O módulo consiste em um componente de cliente e servidor, ambos escritos inteiramente no PowerShell. Nosso protocolo fornece comunicação segura e criptografada usando o TLS e oferece autenticação de senha baseada em desafios e autenticação baseada em certificado.
Além de fornecer controle completo de mouse e teclado sobre a área de trabalho remota, nosso módulo também replica o ícone do cursor do mouse para o espectador, sincroniza a prancha entre os sistemas local e remota e muito mais. Apesar das limitações do PowerShell, implementamos técnicas para otimizar o tráfego da rede e melhorar a experiência de streaming, resultando em uma experiência remota de desktop remota suave e eficiente.
No momento da redação deste artigo, este é o único aplicativo de desktop remoto de desktop remoto totalmente conhecido. Esperamos que você ache útil e recebamos qualquer feedback ou sugestão que possa ter.
Testado em:
Versão atual: 4.0.0 estável
Para um melhor desempenho de streaming e experiência geral, recomendamos o uso do PowerShell 7 em vez do PowerShell 5.
Você pode instalar o PowerShell 7 para o Windows aqui

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "Se você deseja evitar usar seu próprio certificado e preferir não passar pelo processo de criação de um, pode remover a opção 'CertificateFile' e executar o PowerShell como administrador.
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "É isso
Existem várias maneiras de usar esse aplicativo PowerShell. O método recomendado é instalar os componentes do servidor e do visualizador usando a Galeria PowerShell. Como alternativa, você pode instalá -los como módulos ou importá -los como scripts manualmente. Escolha o método que melhor atenda às suas necessidades e preferências.
Você pode instalar o Power Remote Desktop na Galeria PowerShell, que é semelhante à aptidão para o Debian ou Brew para MacOS. Para fazer isso, execute os seguintes comandos:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer AllowPrerelease é obrigatório quando a versão atual é marcada como um pré -lançamento
Ao executar o comando, você pode ver o seguinte aviso em seu prompt de comando:
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'?
Digite 'y' para confirmar e prosseguir com a instalação. Quando a instalação estiver concluída, os dois módulos devem estar disponíveis. Você pode verificar isso executando o seguinte comando:
Get-Module - ListAvailableExemplo de saída:
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..>
Se os módulos não estiverem aparecendo, tente executar os seguintes comandos e verifique novamente:
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_ViewerPara que um módulo esteja disponível, ele deve estar localizado em um caminho de módulo registrado. Você pode visualizar os caminhos do módulo registrado executando o seguinte comando:
Write-Output $ env: PSModulePathExemplo de saída:
C:UsersPhrozenDocumentsWindowsPowerShellModules;C:Program FilesWindowsPowerShellModules;C:WINDOWSsystem32WindowsPowerShellv1.0Modules
CLONE PowerRemoteSktop Repositório ou faça o download de um pacote de lançamento do GitHub.
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
Copie as pastas PowerRemotesktop_Viewer e PowerRemotesktop_server para o caminho do módulo desejado
Exemplo:
C:Users<USER>DocumentsWindowsPowerShellModules
Agora, os dois módulos devem estar disponíveis, você pode verificar usando o comando:
Get-Module - ListAvailableExemplo de saída:
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..>
Se você não os vir, execute os seguintes comandos e volte.
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewer Aviso: os arquivos de manifesto são opcionais ( *.psd1 ) e podem ser removidos.
Não é obrigatório instalar este aplicativo como um módulo PowerShell (mesmo que a extensão do arquivo seja *.psm1 )
Você também pode carregá -lo como um script do PowerShell. Existem vários métodos, incluindo:
Invocando comandos usando:
IEX ( Get-Content .PowerRemoteDesktop_[ Server / Viewer ].psm1 - Raw)Carregando o script de um local remoto:
IEX ( New-Object Net.WebClient).DownloadString( ' http://127.0.0.1/PowerRemoteDesktop_[Server/Viewer].psm1 ' )etc ...
PowerRemoteDesktop_Viewer.psm1 precisa ser importado / ou instalado na máquina local.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers Crie uma nova sessão de desktop remota com um servidor de desktop Power Remote.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| ServerAddress | Corda | 127.0.0.1 | Host ou endereço do servidor remoto |
| Serverport | Inteiro | 2801 | Número da porta para o servidor remoto |
| SecurePassword | Securestring | Nenhum | Objeto securestring que contém a senha usada para autenticar com o servidor remoto (recomendado) |
| Senha | Corda | Nenhum | Senha de texto simples usado para autenticação com o servidor remoto (não recomendado; use o seguro seguro))) |
| Desabilitar verbosidade | Trocar | Falso | Se especificado, o programa suprimirá as mensagens de verbosidade |
| USetlsv1_3 | Trocar | Falso | Se especificado, o programa usará o TLS v1.3 em vez do TLS v1.2 para criptografia (recomendado se ambos os sistemas suportarem) |
| Praça de transferência | Enum | Ambos | Especifique o modo de sincronização da área de transferência (as opções incluem 'ambos', 'desabilitados', 'send' e 'recebem'; veja abaixo para obter mais detalhes) |
| ImageCompression Quality | Inteiro (0-100) | 75 | Nível de compressão JPEG variando de 0 (qualidade mais baixa) a 100 (mais alta qualidade) |
| Redimensionar | Trocar | Falso | Se especificado, a área de trabalho remota será redimensionada de acordo com a opção 'Resoração' |
| Resoraza | Inteiro (30-99) | 90 | Usado em conjunto com a opção 'redimensionar', especifique a relação redimensionamento como uma porcentagem |
| Sempre tontop | Trocar | Falso | Se especificado, a janela da área de trabalho virtual será exibida acima de todas as outras janelas |
| Packetsize | Enum | Size9216 | Especifique o tamanho do pacote de rede para fluxos. Escolha um tamanho apropriado para suas restrições de rede. |
| Blocksize | Enum | Tamanho64 | Especifique o tamanho dos blocos de grade de tela. Escolha um tamanho apropriado para o tamanho da tela remota e os recursos do computador (como CPU e recursos de rede) |
| Logonui | Trocar | Falso | Solicite ao servidor para abrir a área de trabalho do Logonui/WinLogon em vez da área de trabalho do usuário padrão (requer privilégio do sistema na sessão ativa) |
| Valor | Descrição |
|---|---|
| Desabilitado | A sincronização da área de transferência está desativada nos lados do visualizador e do servidor |
| Receber | Somente os dados da área de transferência recebidos são permitidos |
| Enviar | Apenas dados de deslocamento de transferência de saída são permitidos |
| Ambos | A sincronização da área de transferência é permitida nos lados do espectador e do servidor |
| Valor | Descrição |
|---|---|
| Size1024 | 1024 bytes (1kib) |
| Size2048 | 2048 bytes (2kib) |
| Size4096 | 4096 bytes (4kib) |
| Size8192 | 8192 bytes (8kib) |
| Size9216 | 9216 bytes (9kib) |
| Size12288 | 12288 bytes (12kib) |
| Size16384 | 16384 Bytes (16kib) |
| Valor | Descrição |
|---|---|
| Tamanho32 | 32x32 |
| Tamanho64 | 64x64 |
| Tamanho96 | 96x96 |
| Size128 | 128x128 |
| Tamanho256 | 256x256 |
| Size512 | 512x512 |
Recomenda-se usar o SecurePassword em vez de uma senha de texto simples, mesmo que a senha de texto simples esteja sendo convertida em um taco
Abra uma nova sessão de desktop remota para '127.0.0.1:2801' Usando a senha 'urcompl3xp@ssw0rd'
Invoke-RemoteDesktopViewer - ServerAddress " 127.0.0.1 " - ServerPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)Ao se conectar a um novo servidor remoto pela primeira vez, o espectador perguntará se você deseja confiar na impressão digital do servidor. Se você selecionar a opção de 'sempre' confiar nessa impressão digital, ela será salva no registro local do usuário. Você pode revogar o Trust para esta impressão digital a qualquer momento usando a função apropriada.
Get-TrustedServersExemplo de saída:
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 precisa ser importado / ou instalado na máquina local.
Invoke-RemoteDesktopServer | Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| ServerAddress | Corda | 0.0.0.0 | Endereço IP representando o endereço IP da máquina local |
| Serverport | Inteiro | 2801 | O número da porta para ouvir as conexões de entrada |
| SecurePassword | Securestring | Nenhum | Objeto secuestring que contém a senha usada para autenticar os espectadores remotos (recomendado) |
| Senha | Corda | Nenhum | Senha de texto simples usado para autenticar os espectadores remotos (não recomendados; use o seguro seguro) |
| Desabilitar verbosidade | Trocar | Falso | Se especificado, o programa suprimirá as mensagens de verbosidade |
| USetlsv1_3 | Trocar | Falso | Se especificado, o programa usará o TLS v1.3 em vez do TLS v1.2 para criptografia (recomendado se ambos os sistemas suportarem) |
| Praça de transferência | Enum | Ambos | Especifique o modo de sincronização da área de transferência (as opções incluem 'ambos', 'desabilitados', 'send' e 'recebem'; veja abaixo para obter mais detalhes) |
| CertificateFile | Corda | Nenhum | Um arquivo que contém informações de certificado válido (x509) que inclui a chave privada |
| CodedCertificate | Corda | Nenhum | Uma representação codificada por Base64 de todo o arquivo de certificado, incluindo a chave privada |
| Viewonly | Trocar | Falso | Se especificado, o visualizador remoto só poderá visualizar a área de trabalho e não terá acesso ao mouse ou teclado |
| PreventComputerTerSleep | Trocar | Falso | Se especificado, esta opção impedirá o computador de entrar no modo de suspensão enquanto o servidor estiver ativo e aguardando novas conexões |
| CertatePassword | Securestring | Nenhum | Especifique a senha usada para acessar um certificado X509 protegido por senha fornecido pelo usuário |
| Valor | Descrição |
|---|---|
| 127.0.0.1 | Ouça apenas as conexões do host local (geralmente para fins de depuração) |
| 0.0.0.0 | Ouça as conexões em todas as interfaces de rede, incluindo a rede local e a Internet |
| Valor | Descrição |
|---|---|
| Desabilitado | A sincronização da área de transferência está desativada nos lados do visualizador e do servidor |
| Receber | Somente os dados da área de transferência recebidos são permitidos |
| Enviar | Apenas dados de deslocamento de transferência de saída são permitidos |
| Ambos | A sincronização da área de transferência é permitida nos lados do espectador e do 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 da versão 4.0.0, é possível capturar o logonui/winlogon (prompt de UAC, janela de login do Windows, ctrl+alt+del, etc.).
No entanto, para capturar o logonui, o servidor deve ser executado sob o contexto de 'NT Authority/System' na sessão ativa atual.
Existem vários métodos para gerar um processo como usuário do sistema na sessão ativa (por exemplo, psexec, hacker de processo), mas, por simplicidade, recomendo usar meu projeto PowerRunassystem (disponível no Github e instalável na Galeria PowerShell).
Install-Module - Name PowerRunAsSystemEm seguida, execute o comando abaixo como administrador.
Invoke-InteractiveSystemPowerShellUm novo terminal PowerShell deve aparecer em sua área de trabalho como autoridade/sistema NT
Se você seguir as etapas acima, um novo terminal PowerShell deve aparecer na sua área de trabalho em execução como o usuário 'NT Authority/System'.
A partir deste terminal, você pode executar o comando Power Remote Remote Desktop Server e ativar a opção 'Logonui' para futuras conexões de visualizador de desktop remoto de energia.
Vale a pena notar que, se você não usar seu próprio certificado X509, precisará de privilégios de administrador para criar um novo servidor. No entanto, você pode criar facilmente seu próprio certificado X509 usando ferramentas como a ferramenta de linha de comando OpenSSL.
openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt
Em seguida, exporte o novo certificado ( deve incluir a chave privada ).
openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt
Use o CertificateFile . Exemplo: c:tlscertphrozen.crt
Codificar um certificado existente usando PowerShell
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))ou em sistemas Linux / Mac
base64 -i /tmp/phrozen.p12
Você pode passar o arquivo de certificado Base64 de saída para o parâmetro EncodedCertificate (uma linha)


] e ) enviado e interpretado corretamente.? = Fácil? = Médio? = Difícil
Feito com ❤️ em ??