spaghettidba
4/3/2019 - 10:52 AM

Disconnect-RemoteSession #blog

Disconnect-RemoteSession #blog

[CmdletBinding()]
Param(
	[Parameter(Mandatory=$False,Position=1)]
	[string[]]$servers
)

if(-not $servers){
    $servers = Get-Content servers.txt
}


$servers | ForEach-Object {

    $serverName = $_

    $out = qwinsta /server $serverName 2>&1

    if($LASTEXITCODE -ne 0) {
        continue
    }

    $sessions = $out | ?{ $_ -notmatch '^ SESSIONNAME' } | %{
        $item = "" | Select "Active", "SessionName", "Username", "Id", "State", "Type", "Device"
        $item.Active = $_.Substring(0,1) -match '>'
        $item.SessionName = $_.Substring(1,18).Trim()
        $item.Username = $_.Substring(19,20).Trim()
        $item.Id = $_.Substring(39,9).Trim()
        $item.State = $_.Substring(48,8).Trim()
        $item.Type = $_.Substring(56,12).Trim()
        $item.Device = $_.Substring(68).Trim()
        $item
    } 

    foreach ($session in $sessions){
        if ($session.Username -ne "" -or $session.Username.Length -gt 1){
            if($session.Username -ceq $env:USERNAME){
                Write-Output "Logging off $($session.Username) from $serverName"
                logoff /server $serverName $session.Id    
            }
        }
    }

}