With the help of PSTerminalservices module, we can query opened terminal services sessions on a server and close them.
In the following script I have asked all domain servers in the domain to look for opened sessions of my user. I save the result in a logfile...
In the following script I have asked all domain servers in the domain to look for opened sessions of my user. I save the result in a logfile...
#check opened terminal server sessions on servers import-module .\PSTerminalServices $ErrorActionPreference="SilentlyContinue" $usuario=read-host "Release TS sessions of user..." $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 foreachSo I can check in which servers I have opened a terminal server session.
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:10After checking the logfile I can close them massively:
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
Comments
Post a Comment