

Bienvenue à Power Remote Desktop pour un accès à distance de bureau dans Pure PowerShell! Ce module offre une solution unique pour contrôler à distance un ou plusieurs écrans en utilisant uniquement PowerShell. Contrairement à d'autres outils de bureau à distance qui reposent sur des protocoles et des logiciels externes, notre module utilise son propre protocole de bureau distant.
Le module se compose à la fois d'un client et d'un composant de serveur, qui sont tous deux entièrement écrits dans PowerShell. Notre protocole fournit une communication sécurisée et cryptée à l'aide de TLS et propose à la fois une authentification de mot de passe basée sur le défi et une authentification basée sur le certificat.
En plus de fournir un contrôle complet de la souris et du clavier sur le bureau à distance, notre module reproduit également l'icône du curseur de la souris pour la visionneuse, synchronise le presse-papiers entre les systèmes locaux et distants, etc. Malgré les limites de PowerShell, nous avons mis en œuvre des techniques pour optimiser le trafic réseau et améliorer l'expérience de streaming, ce qui a entraîné une expérience de bureau à distance fluide et efficace.
Au moment de la rédaction du moment de la rédaction, il s'agit de la seule application de bureau distante entièrement basée à PowerShell. Nous espérons que vous le trouverez utile et nous accueillons tous les commentaires ou suggestions que vous pourriez avoir.
Testé sur:
Version actuelle: 4.0.0 Stable
Pour une meilleure performance en streaming et une expérience globale, nous vous recommandons d'utiliser PowerShell 7 au lieu de PowerShell 5.
Vous pouvez installer PowerShell 7 pour Windows ici

Install-Module - Name PowerRemoteDesktop_Server
Invoke-RemoteDesktopServer - CertificateFile " <certificate_location> "Si vous souhaitez éviter d'utiliser votre propre certificat et préférez ne pas passer par le processus de création d'un, vous pouvez supprimer l'option «CertificateFile» et exécuter PowerShell en tant qu'administrateur à la place.
Install-Module - Name PowerRemoteDesktop_Viewer
Invoke-RemoteDesktopViewer - ServerAddress " <ip_address> " - Password " <the_one_displayed_on_server> "C'est ça
Il existe plusieurs façons d'utiliser cette application PowerShell. La méthode recommandée consiste à installer les composants du serveur et de la visionneuse à l'aide de la galerie PowerShell. Alternativement, vous pouvez les installer sous forme de modules ou les importer manuellement sous forme de scripts. Choisissez la méthode qui correspond le mieux à vos besoins et préférences.
Vous pouvez installer Power Remote Desktop à partir de la galerie PowerShell, qui est similaire à l'aptitude pour Debian ou Brew pour MacOS. Pour ce faire, exécutez les commandes suivantes:
Install-Module - Name PowerRemoteDesktop_Server
Install-Module - Name PowerRemoteDesktop_Viewer AllowPrerelease est obligatoire lorsque la version actuelle est marquée comme un préreasage
Lorsque vous exécutez la commande, vous pouvez voir l'avertissement suivant dans votre invite de commande:
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'?
Tapez «Y» pour confirmer et procéder à l'installation. Une fois l'installation terminée, les deux modules doivent être disponibles. Vous pouvez le vérifier en exécutant la commande suivante:
Get-Module - ListAvailableExemple de sortie:
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 les modules n'apparaissent pas, essayez d'exécuter les commandes suivantes, puis vérifiez:
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_ViewerPour qu'un module soit disponible, il doit être situé dans un chemin de module enregistré. Vous pouvez afficher les chemins de module enregistrés en exécutant la commande suivante:
Write-Output $ env: PSModulePathExemple de sortie:
C:UsersPhrozenDocumentsWindowsPowerShellModules;C:Program FilesWindowsPowerShellModules;C:WINDOWSsystem32WindowsPowerShellv1.0Modules
Clone PowerRemoteDesktop Repository ou téléchargez un package de version GitHub.
git clone https://github.com/DarkCoderSc/PowerRemoteDesktop.git
Copiez à la fois PowerRemoteDesktop_Viewer et PowerRemoteDeskTop_Server Lostaires sur le chemin du module souhaité
Exemple:
C:Users<USER>DocumentsWindowsPowerShellModules
Les deux modules doivent désormais être disponibles, vous pouvez vérifier à l'aide de la commande:
Get-Module - ListAvailableExemple de sortie:
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 vous ne les voyez pas, exécutez les commandes suivantes et revenez.
Import-Module PowerRemoteDesktop_Server
Import-Module PowerRemoteDesktop_Viewer AVIS: Les fichiers manifestes sont facultatifs ( *.psd1 ) et peuvent être supprimés.
Il n'est pas obligatoire d'installer cette application en tant que module PowerShell (même si l'extension du fichier est *.psm1 )
Vous pouvez également le charger comme un script PowerShell. Il existe plusieurs méthodes, notamment:
Invoquer les commandes en utilisant:
IEX ( Get-Content .PowerRemoteDesktop_[ Server / Viewer ].psm1 - Raw)Chargement du script à partir d'un emplacement distant:
IEX ( New-Object Net.WebClient).DownloadString( ' http://127.0.0.1/PowerRemoteDesktop_[Server/Viewer].psm1 ' )etc...
PowerRemoteDesktop_Viewer.psm1 doit être importé / ou installé sur la machine locale.
Invoke-RemoteDesktopViewer
Get-TrustedServers
Remove-TrustedServer
Clear-TrustedServers Créez une nouvelle session de bureau à distance avec un serveur de bureau à distance Power.
| Paramètre | Taper | Défaut | Description |
|---|---|---|---|
| Serveraddress | Chaîne | 127.0.0.1 | Hôte ou adresse de serveur distant |
| Serveur | Entier | 2801 | Numéro de port pour le serveur distant |
| SecurePassword | Lisse de sécurité | Aucun | Objet Securestring contenant le mot de passe utilisé pour l'authentification avec le serveur distant (recommandé) |
| Mot de passe | Chaîne | Aucun | Mot de passe en texte clair utilisé pour l'authentification avec le serveur distant (non recommandé; utilisez SecurePassword à la place)) |
| Désactiver | Changer | FAUX | Si spécifié, le programme supprimera les messages de verbosité |
| Usetlsv1_3 | Changer | FAUX | Si spécifié, le programme utilisera TLS v1.3 au lieu de TLS v1.2 pour le cryptage (recommandé si les deux systèmes le prennent en charge) |
| Presse-papiers | Énumérer | Les deux | Spécifiez le mode de synchronisation du presse-papiers (les options incluent «à la fois», «désactivé», «envoyer» et «recevoir»; voir ci-dessous pour plus de détails) |
| ImageCompressionquality | Entier (0-100) | 75 | Niveau de compression JPEG allant de 0 (qualité la plus basse) à 100 (la plus haute qualité) |
| Redimensionner | Changer | FAUX | S'il est spécifié, le bureau distant sera redimensionné en fonction de l'option «Resizeratio» |
| Resizeratio | Entier (30-99) | 90 | Utilisé conjointement avec l'option «redimensionner», spécifiez le ratio de redimensionnement en pourcentage |
| Toujours | Changer | FAUX | S'il est spécifié, la fenêtre de bureau virtuelle s'affiche au-dessus de toutes les autres fenêtres |
| Paquet | Énumérer | Taille9216 | Spécifiez la taille du paquet réseau pour les flux. Choisissez une taille appropriée pour vos contraintes de réseau. |
| Bloquer | Énumérer | Taille64 | Spécifiez la taille des blocs de grille d'écran. Choisissez une taille appropriée pour la taille de l'écran à distance et les ressources de l'ordinateur (telles que le processeur et les capacités réseau) |
| Logonui | Changer | FAUX | Demandez au serveur d'ouvrir le bureau Logonui / Winlogon au lieu du bureau d'utilisateur par défaut (nécessite un privilège système dans la session active) |
| Valeur | Description |
|---|---|
| Désactivé | La synchronisation du presse-papiers est désactivée sur les côtés de la visionneuse et du serveur |
| Recevoir | Seules les données entrantes du presse-papiers sont autorisées |
| Envoyer | Seules les données de presse-papiers sortantes sont autorisées |
| Les deux | La synchronisation du presse-papiers est autorisée à la fois sur les côtés de la visionneuse et du serveur |
| Valeur | Description |
|---|---|
| Size1024 | 1024 octets (1Kib) |
| Size2048 | 2048 octets (2Kib) |
| Taille4096 | 4096 octets (4KIB) |
| Taille8192 | 8192 octets (8Kib) |
| Taille9216 | 9216 octets (9KIB) |
| Taille12288 | 12288 octets (12KIB) |
| Taille16384 | 16384 octets (16KIB) |
| Valeur | Description |
|---|---|
| Taille32 | 32x32 |
| Taille64 | 64x64 |
| Taille96 | 96x96 |
| Taille128 | 128x128 |
| Size256 | 256x256 |
| Taille512 | 512x512 |
Il est recommandé d'utiliser SecurePassword au lieu d'un mot de passe en texte ordinaire, même si le mot de passe en texte clair est converti en un Securestring
Ouvrez une nouvelle session de bureau à distance à '127.0.0.1:2801' Utilisation du mot de passe 'urcomp3xp @ ssw0rd'
Invoke-RemoteDesktopViewer - ServerAddress " 127.0.0.1 " - ServerPort 2801 - SecurePassword ( ConvertTo-SecureString - String " urCompl3xP@ssw0rd " - AsPlainText - Force)Lors de la connexion à un nouveau serveur distant pour la première fois, la visionneuse demandera si vous souhaitez faire confiance à l'empreinte digitale du serveur. Si vous sélectionnez l'option pour «toujours» confiance à cette empreinte digitale, elle sera enregistrée dans le registre des utilisateurs locaux. Vous pouvez révoquer la confiance de cette empreinte digitale à tout moment en utilisant la fonction appropriée.
Get-TrustedServersExemple de sortie:
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 doit être importé / ou installé sur la machine locale.
Invoke-RemoteDesktopServer | Paramètre | Taper | Défaut | Description |
|---|---|---|---|
| Serveraddress | Chaîne | 0.0.0.0 | Adresse IP représentant l'adresse IP de la machine locale |
| Serveur | Entier | 2801 | Le numéro de port sur lequel écouter les connexions entrantes |
| SecurePassword | Lisse de sécurité | Aucun | Objet Securestring contenant le mot de passe utilisé pour authentifier les visionneuses à distance (recommandée) |
| Mot de passe | Chaîne | Aucun | Mot de passe en texte clair utilisé pour authentifier les téléspectateurs distants (non recommandés; utilisez SecurePassword à la place) |
| Désactiver | Changer | FAUX | Si spécifié, le programme supprimera les messages de verbosité |
| Usetlsv1_3 | Changer | FAUX | Si spécifié, le programme utilisera TLS v1.3 au lieu de TLS v1.2 pour le cryptage (recommandé si les deux systèmes le prennent en charge) |
| Presse-papiers | Énumérer | Les deux | Spécifiez le mode de synchronisation du presse-papiers (les options incluent «à la fois», «désactivé», «envoyer» et «recevoir»; voir ci-dessous pour plus de détails) |
| Certificat | Chaîne | Aucun | Un fichier contenant des informations de certificat valides (x509) qui incluent la clé privée |
| Certificat codé | Chaîne | Aucun | Une représentation codée de base64 de l'ensemble du fichier de certificat, y compris la clé privée |
| Afficher | Changer | FAUX | S'il est spécifié, la visionneuse distante ne pourra afficher que le bureau et n'aura pas accès à la souris ou au clavier |
| Empêcher la complément de sommeil | Changer | FAUX | S'il est spécifié, cette option empêchera l'ordinateur d'entrer le mode de sommeil pendant que le serveur est actif et attend de nouvelles connexions |
| CertificatePassword | Lisse de sécurité | Aucun | Spécifiez le mot de passe utilisé pour accéder à un certificat X509 protégé par mot de passe fourni par l'utilisateur |
| Valeur | Description |
|---|---|
| 127.0.0.1 | Écoutez uniquement les connexions du Host local (généralement à des fins de débogage) |
| 0.0.0.0 | Écoutez les connexions sur toutes les interfaces réseau, y compris le réseau local et Internet |
| Valeur | Description |
|---|---|
| Désactivé | La synchronisation du presse-papiers est désactivée sur les côtés de la visionneuse et du serveur |
| Recevoir | Seules les données entrantes du presse-papiers sont autorisées |
| Envoyer | Seules les données de presse-papiers sortantes sont autorisées |
| Les deux | La synchronisation du presse-papiers est autorisée à la fois sur les côtés de la visionneuse et du serveur |
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 " À partir de la version 4.0.0, il est possible de capturer le logonui / winlogon (invite UAC, fenêtre de connexion Windows, Ctrl + Alt + Del, etc.).
Cependant, afin de capturer le logonui, le serveur doit être exécuté dans le contexte de «NT Authority / System» dans la session active actuelle.
Il existe plusieurs méthodes pour reprendre un processus en tant qu'utilisateur du système dans la session active (par exemple, psexec, pirate de processus), mais pour la simplicité, je recommande d'utiliser mon projet PowerRunassystem (disponible sur github et installable via la galerie PowerShell).
Install-Module - Name PowerRunAsSystemExécutez ensuite la commande ci-dessous en tant qu'administrateur.
Invoke-InteractiveSystemPowerShellUn nouveau terminal PowerShell devrait apparaître sur votre bureau en tant qu'autorité / système NT
Si vous suivez les étapes ci-dessus, un nouveau terminal PowerShell doit apparaître sur votre bureau en fonction de l'utilisateur «nt autorité / système».
À partir de ce terminal, vous pouvez exécuter la commande Power Remote Desktop Server et activer l'option «Logonui» pour les connexions de la visionneuse de bureau Remote Future Power.
Il convient de noter que si vous n'utilisez pas votre propre certificat X509, vous aurez besoin de privilèges d'administrateur pour créer un nouveau serveur. Cependant, vous pouvez facilement créer votre propre certificat X509 à l'aide d'outils tels que l'outil de ligne de commande OpenSSL.
openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 -keyout phrozen.key -out phrozen.crt
Ensuite, exportez le nouveau certificat ( doit inclure la clé privée ).
openssl pkcs12 -export -out phrozen.p12 -inkey phrozen.key -in phrozen.crt
Utilisez CertificateFile . Exemple: c:tlscertphrozen.crt
Encoder un certificat existant à l'aide de PowerShell
[ convert ]::ToBase64String(( Get-Content - path " c:tlscertphrozen.crt " - Encoding byte))ou sur les systèmes Linux / Mac
base64 -i /tmp/phrozen.p12
Vous pouvez ensuite passer le fichier de certificat de sortie Base64 en sortie en paramètre EncodedCertificate (une ligne)


] et ) envoyé et interprété correctement.? = Facile? = Moyen? = Dur
Fait avec ❤️ dans ??