PowerShell : activer ou désactiver le protocole de bureau à distance (RDP) sur des postes de travail

Principaux points à retenir

  • Le protocole de bureau à distance, ou RDP pour Remote Desktop Protocol, est un outil essentiel pour les professionnels de l’informatique car il permet l’accès à distance aux ordinateurs.
  • Le script PowerShell fourni offre une méthode simplifiée pour activer ou désactiver ce protocole sur les postes de travail.
  • Deux actions principales sont effectuées : la modification des paramètres du registre et l’ajustement des règles du pare-feu.
  • Le script nécessite des droits d’administrateur et vérifie si la machine est un poste de travail.
  • Bien que le protocole RDP soit pratique, il peut présenter des risques de sécurité s’il est mal configuré.
  • Il est recommandé de surveiller et d’utiliser des méthodes d’authentification fortes pour sécuriser l’utilisation de RDP.
  • Des platesformes telles que NinjaOne sont un parfait complément au script en offrant une solution de gestion informatique complète.

Le protocole Remote Desktop Protocol (RDP) est un outil essentiel dans l’arsenal des professionnels de l’informatique, permettant aux utilisateurs de se connecter à distance à un autre ordinateur par le biais d’une connexion réseau. Mais, comme tout outil puissant, RDP nécessite une gestion prudente, notamment en raison des préoccupations croissantes en matière de sécurité. Ce blog se penche sur un script PowerShell conçu pour gérer et configurer les paramètres de Remote Desktop (RDP) sur les postes de travail.

Contexte

PowerShell est rapidement devenu un outil fondamental pour les administrateurs informatiques en raison de sa flexibilité et de tout ce qu’il permet de faire. Le script fourni exploite ce potentiel en offrant une méthode concise pour activer ou désactiver le protocole RDP pour les postes de travail. Les environnements informatiques devenant de plus en plus complexes, des solutions rationalisées comme ce script sont indispensables pour les fournisseurs de services gérés (MSP) et les professionnels de l’informatique. Il est essentiel de s’assurer que ce protocole est correctement implémenté, car toute mauvaise configuration peut exposer des vulnérabilités.

Le script

<#
.SYNOPSIS
    Enables or Disables RDP for workstations only.
.DESCRIPTION
    Enables or Disables RDP for workstations only.
.EXAMPLE
    -Disable
    Disables RDP for a workstation.
.EXAMPLE
    -Enable
    Enables RDP for a workstation.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>
[CmdletBinding(DefaultParameterSetName = "Disable")]
param (
    [Parameter(Mandatory = $true, ParameterSetName = "Enable")]
    [switch]
    $Enable,
    [Parameter(Mandatory = $true, ParameterSetName = "Disable")]
    [switch]
    $Disable
)

begin {
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        # Do not output errors and continue
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        if (-not $(Test-Path -Path $Path)) {
            # Check if path does not exist and create the path
            New-Item -Path $Path -Force | Out-Null
        }
        if ((Get-ItemProperty -Path $Path -Name $Name)) {
            # Update property and print out what it was changed from and changed to
            $CurrentValue = Get-ItemProperty -Path $Path -Name $Name
            try {
                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "$Path$Name changed from $CurrentValue to $Value"
        }
        else {
            # Create property with value
            try {
                New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "Set $Path$Name to $Value"
        }
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
    }
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    # Registry settings
    $Path = 'HKLM:\System\CurrentControlSet\Control\Terminal Server'
    $Name = "fDenyTSConnections"
    $RegEnable = 0
    $RegDisable = 1

    $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem
    $IsWorkstation = if ($osInfo.ProductType -eq 1) {
        $true
    }
    else {
        $false
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    if (-not $IsWorkstation) {
        # System is a Domain Controller or Server
        Write-Error "System is a Domain Controller or Server. Skipping."
        exit 1
    }

    # Registry
    if ($Disable) {
        $RegCheck = $null
        $RegCheck = $(Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction SilentlyContinue)
        if ($null -eq $RegCheck) {
            $RegCheck = 0
        }
        if ($RegDisable -ne $RegCheck) {
            Set-ItemProp -Path $Path -Name $Name -Value $RegDisable
            Write-Host "Disabled $Path$Name"
        }
        else {
            Write-Host "$Path$Name already Disabled."
        }
    }
    elseif ($Enable) {
        $RegCheck = $null
        $RegCheck = $(Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction SilentlyContinue)
        if ($null -eq $RegCheck) {
            $RegCheck = 0
        }
        if ($RegEnable -ne $RegCheck) {
            Set-ItemProp -Path $Path -Name $Name -Value $RegEnable
            Write-Host "Enabled $Path$Name"
        }
        else {
            Write-Host "$Path$Name already Enabled."
        }
    }
    else {
        Write-Error "Enable or Disable was not specified."
        exit 1
    }

    # Firewall
    if ($Disable) {
        # Disable if was enabled and Disable was used
        try {
            Disable-NetFirewallRule -DisplayGroup "Remote Desktop" -ErrorAction Stop
        }
        catch {
            Write-Error $_
            Write-Host "Remote Desktop firewall group is missing?"
        }
        Write-Host "Disabled Remote Desktop firewall rule groups."
    }
    elseif ($Enable) {
        # Enable if was disabled and Enable was used
        try {
            Enable-NetFirewallRule -DisplayGroup "Remote Desktop" -ErrorAction Stop
        }
        catch {
            Write-Error $_
            Write-Host "Remote Desktop firewall group is missing?"
        }
        Write-Host "Enabled Remote Desktop firewall rule groups."
    }
    else {
        Write-Error "Enable or Disable was not specified."
        exit 1
    }
}
end {}

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Description détaillée

  • Paramètres : Le script utilise deux paramètres, Enable (activer) et Disable (désactiver), qui indiquent si le protocole de bureau à distance doit être activé ou désactivé. Ils s’excluent mutuellement : un seul peut être utilisé à la fois.
  • Fonctions d’assistance : Deux fonctions contribuent à l’accomplissement de la tâche principale :
  • Set-ItemProp : Met à jour ou crée des propriétés du registre, en gérant les erreurs potentielles et en tenant l’utilisateur informé.
  • Test-IsElevated : Vérifie si le script est exécuté avec des droits d’administrateur.
  • Processus : C’est le cœur du script. Il commence par vérifier les droits d’administrateur et si la machine est un poste de travail. Il procède ensuite aux actions suivantes :
  • Modifie les paramètres du registre pour activer ou désactiver le protocole RDP.
  • Ajuste les paramètres du pare-feu pour autoriser ou bloquer le trafic du protocole de bureau à distance.

Cas d’utilisation potentiels

Imaginez une entreprise de taille moyenne disposant de plusieurs postes de travail pour ses employés. Pour des raisons de sécurité, le service informatique a désactivé le protocole RDP sur toutes les machines. Cependant, un consultant externe a besoin d’accéder à distance à un poste de travail pour effectuer des diagnostics. À l’aide de ce script, l’administrateur informatique peut activer le protocole RDP sur ce poste de travail spécifique et le désactiver une fois la tâche accomplie.

Comparaisons

Bien qu’il existe des outils basés sur une interface graphique et d’autres méthodes pour gérer ce protocole, le script fourni présente les avantages suivants :

  • Évolutivité : Peut être exécuté sur plusieurs postes de travail par le biais d’un script ou d’un planificateur de tâches.
  • Flexibilité : Facilement intégrable dans des flux de travail informatiques plus étendus.
  • Transparence : Le script étant open-source, l’équipe informatique peut le valider et l’ajuster pour répondre à des besoins spécifiques.

FAQ PowerShell et RDP

  • Ce script peut-il être exécuté sur des serveurs ?
    Non, le script vérifie spécifiquement si la machine est un poste de travail avant de s’exécuter.
  • Que se passe-t-il si le script est exécuté sans les privilèges de l’administrateur ?
    Un message d’erreur s’affiche, invitant l’utilisateur à exécuter le script avec des droits d’administrateur.

Implications

Si l’activation d’un protocole RDP est pratique, ce dernier peut représenter un risque important pour la sécurité s’il est exposé. Les cybercriminels exploitent souvent des protocoles de bureau à distance mal configurés. Il est donc impératif de trouver un équilibre entre commodité et sécurité.

Recommandations

  • Désactivez toujours ce protocole lorsque vous ne l’utilisez pas.
  • Surveillez les journaux de protocole RDP pour détecter toute activité suspecte.
  • Utilisez des méthodes d’authentification forte lorsque le protocole de bureau à distance est activé.

Conclusion

Des outils comme NinjaOne améliorent les opérations informatiques en offrant une plateforme centralisée pour gérer et surveiller les réseaux, les appareils, etc. Lors de l’intégration de solutions telles que le script PowerShell évoqué dans des cadres informatiques plus larges, des plateformes comme NinjaOne apportent une supervision et une efficacité précieuses.

En comprenant et en déployant des scripts PowerShell comme celui présenté ci-dessus, les professionnels de l’informatique peuvent renforcer leur efficacité et la sécurité de leur environnement de travail. En associant ce script à des outils puissants comme NinjaOne, la gestion informatique devient encore plus performante.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).