-
Notifications
You must be signed in to change notification settings - Fork 0
/
disconnect-idle-sessions.ps1
76 lines (59 loc) · 2.65 KB
/
disconnect-idle-sessions.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
param( [string] $VISRV)
#$idleLimit = 10080 #This is 7 days in minutes
$idleLimit = 1 #This is 2 days in minutes
#$idleLimit = 2880 #This is 2 days in minutes
#$idleLimit = 1440 #This is 1 days in minutes
$SMTPSRV = "mailserver.com" # Set the SMTP Server address
$EmailFrom = "sender@sender.com" # Set the Email address to recieve from
$EmailTo = "receiver@receiver.com" # Set the Email address to send the email to
# Import the necessary VMware modules
Get-Module -Name VMWare* -ListAvailable | Import-Module
# Import list of usernames that should never be disconnected
$users = Import-csv ".\protected-users.csv"
function Send-SMTPmail($to, $from, $subject, $smtpserver, $body) {
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
$msg.IsBodyHTML = $true
$mailer.send($msg)
}
$VIServer = Connect-VIServer $VISRV
If ($VIServer.IsConnected -ne $true){
# Fix for scheduled tasks not running.
$USER = $env:username
$APPPATH = "C:\Documents and Settings\" + $USER + "\Application Data"
#SET THE APPDATA ENVIRONMENT WHEN NEEDED
if ($env:appdata -eq $null -or $env:appdata -eq 0)
{
$env:appdata = $APPPATH
}
$VIServer = Connect-VIServer $VISRV
If ($VIServer.IsConnected -ne $true){
Write $VIServer
send-SMTPmail -to $EmailTo -from $EmailFrom -subject "ERROR: $VISRV vCheck" -smtpserver $SMTPSRV -body "The Connect-VISERVER Cmdlet did not work, please check you VI Server."
exit
}
}
$sessionMgr = Get-View $VIServer.ExtensionData.Client.ServiceContent.SessionManager
$allSessions = @()
$msg = @()
$sessionMgr.SessionList | foreach {
$session = New-Object -TypeName PSObject -Property @{
Key = $_.Key
UserName = $_.UserName
LoginTime = ($_.LoginTime).ToLocalTime()
LastActiveTime = ($_.LastActiveTime).ToLocalTime()
}
$session | Add-Member -MemberType NoteProperty -Name IdleMinutes -Value ([Math]::Round(((Get-Date) - ($_.LastActiveTime).ToLocalTime()).TotalMinutes))
$allSessions += $session
}
foreach ($session in $allSessions){
if ($session.IdleMinutes -gt $idleLimit){
# Check the username for the idle session
# if its in the protected-users.csv then it should not be disconnected
if ($users.Username -notcontains $session.UserName){
$msg += "Disconnecting session for $($session.UserName) which has been idle for $($session.IdleMinutes) minutes<br/>"
#$sessionMgr.TerminateSession($session.Key)
} else {$msg = "No Idle sessions found"}
}
}
send-SMTPmail -to $EmailTo -from $EmailFrom -subject "Disconnected vCenter Sessions - $($VISRV)" -smtpserver $SMTPSRV -body $msg