Debugage RDS (Powershell)

Charger le module et vérifier le déploiement

Import-Module RemoteDesktop

$Broker = "$env:COMPUTERNAME.$env:USERDNSDOMAIN"   # ou le FQDN du broker

# Tous les serveurs du déploiement et leurs rôles
Get-RDServer -ConnectionBroker $Broker

# Collections de sessions
Get-RDSessionCollection -ConnectionBroker $Broker

# Hôtes de session d'une collection (NewConnectionAllowed indique le mode drain)
Get-RDSessionHost -CollectionName "MaCollection" -ConnectionBroker $Broker

# Sessions utilisateurs actives
Get-RDUserSession -ConnectionBroker $Broker | Select-Object UserName, HostServer, SessionState, CollectionName

Vérifier la configuration (licences, passerelle, HA, certificats)

Get-RDLicenseConfiguration -ConnectionBroker $Broker
Get-RDDeploymentGatewayConfiguration -ConnectionBroker $Broker
Get-RDConnectionBrokerHighAvailability -ConnectionBroker $Broker   # si broker en haute dispo
Get-RDCertificate -ConnectionBroker $Broker                         # expiration des certificats
Get-RDRemoteApp -CollectionName "MaCollection" -ConnectionBroker $Broker

Tester la connectivité réseau vers les hôtes

# RDP vers un Session Host
Test-NetConnection -ComputerName "RDSH01.domaine.local" -Port 3389

# Autres ports utiles
Test-NetConnection -ComputerName "RDWEB01"   -Port 443    # RD Web / Gateway
Test-NetConnection -ComputerName $Broker     -Port 5504   # RD Web -> Broker
Test-NetConnection -ComputerName "RDLIC01"   -Port 135    # Serveur de licences (RPC)
Test-NetConnection -ComputerName "SQL01"     -Port 1433   # Base SQL du broker en HA

# Résolution DNS et WinRM
Resolve-DnsName "RDSH01.domaine.local"
Test-WSMan -ComputerName "RDSH01.domaine.local"

Vérifier les services

# Sur le broker
Get-Service Tssdis, TermService

# Sur un Session Host à distance
Get-Service -ComputerName "RDSH01" -Name TermService, SessionEnv, UmRdpService

# Serveur de licences / passerelle
Get-Service -ComputerName "RDLIC01" -Name TermServLicensing
Get-Service -ComputerName "RDGW01"  -Name TSGateway

Vérifier que les connexions RDP sont autorisées sur l’hôte

# AllowTSConnections = 1 : connexions autorisées
Get-CimInstance -ComputerName "RDSH01" -Namespace root\cimv2\TerminalServices `
  -ClassName Win32_TerminalServiceSetting | Select-Object PSComputerName, AllowTSConnections

# UserAuthenticationRequired = 1 : NLA activé
Get-CimInstance -ComputerName "RDSH01" -Namespace root\cimv2\TerminalServices `
  -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-tcp'" |
  Select-Object PSComputerName, UserAuthenticationRequired, SSLCertificateSHA1Hash

# Sessions ouvertes sur un hôte (commandes natives)
quser /server:RDSH01
qwinsta /server:RDSH01

Consulter les journaux d’évènements

# Côté broker : redirections et erreurs
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-SessionBroker/Operational" -MaxEvents 50

# Côté Session Host : connexions / ouvertures de session
Get-WinEvent -ComputerName "RDSH01" -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" -MaxEvents 50
Get-WinEvent -ComputerName "RDSH01" -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" -MaxEvents 50
Get-WinEvent -ComputerName "RDSH01" -LogName "Microsoft-Windows-TerminalServices-SessionBroker-Client/Operational" -MaxEvents 50

Script de test global de tous les Session Hosts

Import-Module RemoteDesktop
$Broker = "BROKER01.domaine.local"

$hosts = Get-RDServer -ConnectionBroker $Broker | Where-Object Roles -contains "RDS-RD-SERVER"

foreach ($h in $hosts) {
    $srv  = $h.Server
    $rdp  = Test-NetConnection -ComputerName $srv -Port 3389 -WarningAction SilentlyContinue
    $svc  = Get-Service -ComputerName $srv -Name TermService -ErrorAction SilentlyContinue
    $cfg  = Get-CimInstance -ComputerName $srv -Namespace root\cimv2\TerminalServices `
              -ClassName Win32_TerminalServiceSetting -ErrorAction SilentlyContinue

    [PSCustomObject]@{
        Serveur        = $srv
        Ping           = $rdp.PingSucceeded
        Port3389       = $rdp.TcpTestSucceeded
        TermService    = $svc.Status
        RDPAutorise    = $cfg.AllowTSConnections
        Sessions       = (Get-RDUserSession -ConnectionBroker $Broker | Where-Object HostServer -eq $srv).Count
    }
} | Format-Table -AutoSize