Cerrar sesiones de Terminal Server masivamente con Powershell

Con la ayuda del modulo PSTerminalservices podemos consultar las sesiones de terminal services abiertas en un servidor y cerrarlas.
Con el siguiente script he recorrido todos los servidores del dominio para buscar en que maquinas habia dejado mi usuario logueado. Guardo el resultado en un fichero log...
#chequeo de sesiones de terminal abiertas en servidores
import-module .\PSTerminalServices
$ErrorActionPreference="SilentlyContinue"
$usuario=read-host "Liberar sesiones de Terminal de usuario..."
$rootdse=[ADSI]""
$dnc=$rootDSE.distinguishedname
$domnetbios=$rootdse.name
$Dom='LDAP://' + $dnc
$objDomain   = New-Object System.DirectoryServices.DirectoryEntry $Dom
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 7000
$objSearcher.filter = "(&(objectCategory=Computer)(operatingsystem=*Server*))"
$machines=$objSearcher.FindAll()
out-file ".\TS_Session_Cleaner_Masivo.log" -input "server sessionid useraccount connectionstate connectTime DisconnectTime"
Foreach($machine in $machines) 
{
$machine=$machine.properties.name
$valor= Test-Connection -ComputerName $strComputer -Count 1 -BufferSize 16
 if ($? -eq $true)
 {   
 write-host "$machine" -fore green
 #consultamos sus sesiones de terminal abiertas
 $result=get-tssession -computername $machine -filter {$_.useraccount -eq "$domnetbios\$usuario"}
  if ($result -ne $null)
  {
  $result|ft sessionid,useraccount,connectionstate,connectTime,DisconnectTime
  out-file ".\TS_Session_Cleaner_Masivo.log" -input "$machine $($result.sessionid) $($result.useraccount) $($result.connectionstate) $($result.connectTime) $($result.DisconnectTime)" -append
  }
 #stop-tssession -computername $machine -id $session -force
 }#fin de ping
 else{write-host "$machine" -fore red}  
} #fin foreach
Para comprobar en que servidores tengo abierta una sesion de terminal server.
server sessionid useraccount connectionstate connectTime DisconnectTime
SERVERPXY01 1 DOMAIN\MV_admin Disconnected 05/22/2014 15:09:21 05/22/2014 18:27:14
SERVERAPI01 2 DOMAIN\MV_admin Disconnected 04/11/2014 12:12:28 04/11/2014 15:09:02
SERVERVDI08 2 DOMAIN\MV_admin Disconnected 05/14/2014 19:40:13 05/15/2014 19:40:52
SERVERWSUS01 2 DOMAIN\MV_admin Disconnected 05/06/2014 11:26:05 05/06/2014 18:19:33
SERVERAV52 2 DOMAIN\MV_admin Disconnected 04/23/2014 17:47:07 04/23/2014 17:58:10
Tras revisar el listado puedo cerrar las sesiones masivamente:
import-module .\PSTerminalServices
$ErrorActionPreference="SilentlyContinue"
$content=get-content("TS_Session_Cleaner_Masivo.log")
$content|%{
$campo=$_.split(" ")
$machine=$campo[0]
$session=$campo[1]
$useraccount=$campo[2]
$valor= Test-Connection -ComputerName $strComputer -Count 1 -BufferSize 16
 if ($? -eq $true)
 { 
 write-host "Cerrando sesion de $useraccount en $machine"
 stop-tssession -computername $machine -id $session -force
 }
}#fin content

Comentarios