forked from pdxcat/Breaklock
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbreaklock.ps1
36 lines (35 loc) · 1.45 KB
/
breaklock.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
param(
[Parameter(Mandatory=$true)][String]$ComputerName,
[Switch]$Force
)
Import-Module CAT\LogonSession -ErrorAction Stop
$sessions = Get-LogonSession -ComputerName $ComputerName
if (-not $sessions) {
Write-Host "$ComputerName is not loggedon."
} else {
foreach ($session in $sessions) {
$status = if ($session.Locked) { 'Locked' } else { $session.ConnectionState }
$logondiff = ((Get-Date) - $($session.LoginTime)).TotalMinutes
$lockdiff = if ($session.LockTime) { "{0:N0}" -f ((Get-Date) - $($session.LockTime)).TotalMinutes } else { "0" }
Write-Host "Computer: $ComputerName"
Write-Host "Loggedon user: $($session.UserAccount)"
Write-Host "Status: $status"
Write-Host "Logon date/time: $($session.LoginTime)"
if ($session.Locked) { Write-Host "Lock duration: $($lockdiff)m" } else { Write-Host "Session is NOT locked." }
# Ask for confirmation, if needed.
if (-not $Force) {
Write-Host "Confirm breaklock (type n to cancel)? " -NoNewLine
$resp = (Read-Host).toLower()
if ($resp.StartsWith('n')) {
Write-Host "`nAborted.`n"
continue
}
}
try {
$session.Logoff()
Write-Host "`nLock broken for $($session.UserAccount) on $ComputerName.`n"
} catch {
Write-Error "`nBreaklock failed for $($session.UserAccount) on $ComputerName!`n"
}
}
}