jeudi 26 avril 2018

Powershell : fermeture de session inactives à distance

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.

Le script est disponible dans une version commentée sur mon miroir de téléchargement.

$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"
}

Aucun commentaire:

Enregistrer un commentaire