Gestion des utilisateur en RDS
Avec le module RemoteDesktop
Lister les sessions
Import-Module RemoteDesktop
Get-RDUserSession -ConnectionBroker "broker.domaine.local" |
Select-Object UserName, HostServer, UnifiedSessionId, SessionState
Fermer (déconnecter l’utilisateur) une session précise
Invoke-RDUserLogoff -HostServer "RDSH01.domaine.local" -UnifiedSessionID 3 -Force
Fermer toutes les sessions d’un utilisateur
Get-RDUserSession -ConnectionBroker "broker.domaine.local" |
Where-Object { $_.UserName -eq "jdupont" } |
ForEach-Object {
Invoke-RDUserLogoff -HostServer $_.HostServer -UnifiedSessionID $_.UnifiedSessionId -Force
}
Fermer toutes les sessions déconnectées
Get-RDUserSession -ConnectionBroker "broker.domaine.local" |
Where-Object { $_.SessionState -eq "STATE_DISCONNECTED" } |
ForEach-Object {
Invoke-RDUserLogoff -HostServer $_.HostServer -UnifiedSessionID $_.UnifiedSessionId -Force
}
Avec les commandes natives
(sans Broker, fonctionne partout)
# Lister les sessions sur un serveur quser /server:RDSH01 # Fermer la session ID 3 logoff 3 /server:RDSH01 # Réinitialiser une session bloquée (plus brutal) rwinsta 3 /server:RDSH01
Exemple en PowerShell
$serveur = "RDSH01"
$user = "jdupont"
quser /server:$serveur 2>$null | Select-Object -Skip 1 | ForEach-Object {
$ligne = $_.Trim() -replace '\s{2,}', ','
$champs = $ligne -split ','
if ($champs[0] -replace '^>', '' -eq $user) {
# L'ID est en 2e ou 3e position selon que la session est active ou déconnectée
$id = ($champs | Where-Object { $_ -match '^\d+$' } | Select-Object -First 1)
logoff $id /server:$serveur
Write-Host "Session $id de $user fermée sur $serveur"
}
}
Attention : logoff et Invoke-RDUserLogoff ferment la session sans sauvegarde, donc le travail non enregistré de l’utilisateur est perdu. Il faut aussi des droits d’administrateur sur le serveur hôte.
