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