public/Disconnect-RemoteSession.ps1
function Disconnect-RemoteSession { Param ( [string[]] $ComputerName, $UserName, [switch] $Force, [System.Management.Automation.PSCredential] $Credential ) $scriptblock1 = { Write-Host "$env:Computername - CONNECTED!" -ForegroundColor Green $Users = query user $Users = $Users | ForEach-Object { (($_.trim() -replace ">" -replace "(?m)^([A-Za-z0-9-._]{3,20})\s+(\d+\s+\w+)", '$1 none $2' -replace "\s{2,}", "," -replace "none", $null)) } | ConvertFrom-Csv return $users }# end script block $scriptblock2 = { Write-Host "$env:Computername - Logging off $using:user = Session# $using:id" -ForegroundColor Yellow logoff $using:id }# end script block $sessions = Invoke-Command -ComputerName $ComputerName -ScriptBlock $scriptblock1 -Credential $Credential if ($UserName){ $closesessions = $sessions | Where-Object {$_.Username -eq $UserName} } else{ $closesessions = $sessions | Out-GridView -PassThru -Title "Select Sessions you would like to Terminate." } if ($closesessions){ if (!($Force)){ $closesessions | Select-Object pscomputername,username,id,sessionname,state,idletime,'logon time' | Format-Table $confirm = Read-Host "Are you sure you want to close these sessions? (Y/N) (Blank=N)" }#end if else{ $confirm = "Y" }#end else if($confirm -match "Y"){ foreach ($session in $closesessions){ $id = $null $user = $null $id = $session.id $user = $session.username Invoke-Command -ComputerName $session.pscomputername -ScriptBlock $scriptblock2 -Credential $Credential }#end foreach return $closesessions }#end if $confirm else { Write-Host "Disconnect Sessions Cancelled" -ForegroundColor Yellow } }#end if $closesessions else { Write-Verbose "No sessions selected, exiting now" break } } |