Suite à un besoin récurrent, j'ai développé un script Powershell permettant de mettre fin à tous les sessions déclarées comme inactives sur un serveur Windows distant. Il est constitué d'une fonction qui est chargée de terminer les sessions et de quelques instructions appelant cette fonction ; une fois un serveur traité, le script demande si l'utilisateur souhaite traiter un autre serveur.
A noter qu'il faut naturellement des droits d'administration sur les serveurs sur lesquels une session doit être terminée.
$kick = "Y" function Kick { param ($srv) $quout = quser /server:$srv $status = "Disc" $indexs = 2 $indexu = 1 $sid = (($quout | Where-Object { $_ -match $status }) -split ' +')[2] while ($sid -ne $null) { $username = (($quout | Where-Object { $_ -match $status }) -split ' +')[$indexu] $sid = (($quout | Where-Object { $_ -match $status }) -split ' +')[$indexs] if ($sid -eq $null) { break } Write-Host "User :"$username Invoke-RDUserLogoff -HostServer $srv -Unifiedsid $sid -Force $indexu = $indexu+8 $indexs = $indexs+8 Write-Host "Session has been terminated." Start-Sleep -Seconds 3 } } Write-Host "Force close disconnected session script for Windows 2008 and 2012" while ($kick -eq "Y") { $srv = Read-Host "Server Name" kick($srv) $kick = Read-Host "Do you want to process another server ? Y/N" }