ps/Modules/Alkami.PowerShell.Common/Public/Revoke-LogonUsers.ps1

80 lines
2.4 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Revoke-LogonUsers {
<#
.SYNOPSIS
Logs out all user sessions with an option to skip the current user
.DESCRIPTION
This function is used to log out all remote or local sessions from a computer
If passed with -skipMe, the current user's session will not be terminated
.PARAMETER skipMe
[switch] Skips the current user session. Optional.
.EXAMPLE
Revoke-LogonUsers
[Revoke-LogonUsers] : Logging Off Users:
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
sakbar 11 Disc 20:38 8/15/2019 9:07 PM
msatpathy 12 Disc 20:51 8/15/2019 9:15 PM
>dsage rdp-tcp#10 13 Active . 8/16/2019 4:45 PM
ccoane rdp-tcp#9 14 Active 19 8/16/2019 5:07 PM
Logging off session ID 11
Logging off session ID 12
Logging off session ID 13
<<Poof, your session disconnects>>
.EXAMPLE
Revoke-LogonUsers -skipMe
[Revoke-LogonUsers] : Logging Off Users:
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
sakbar 11 Disc 20:38 8/15/2019 9:07 PM
msatpathy 12 Disc 20:51 8/15/2019 9:15 PM
>dsage rdp-tcp#10 13 Active . 8/16/2019 4:45 PM
ccoane rdp-tcp#9 14 Active 19 8/16/2019 5:07 PM
Logging off session ID 11
Logging off session ID 12
[Revoke-LogonUsers] : Skipping Current User Session
Logging off session ID 14
#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$false)]
[switch]$skipMe
)
$logLead = (Get-LogLeadName);
if (Test-IsAdmin) {
$query = query user 2> $null
if($query) {
Write-Host "$logLead : Logging Off Users:"
$query
$users = query user | Select-Object -Skip 1 | Where-Object {($_ -split "\s+")[-5]}
foreach ($userLine in $users) {
if ($skipMe.IsPresent -and $userLine -match "$env:username") {
Write-Host "$logLead : Skipping Current User Session"
continue;
}
logoff ($userLine -split "\s+")[-6] /V
}
} else {
Write-Host ("$logLead : No User Sessions Found")
}
} else {
throw ("$logLead : Local Administrative Privileges are Required to Execute This Function")
}
}