-
Notifications
You must be signed in to change notification settings - Fork 0
/
idle_connection_monitor2.ps1
59 lines (50 loc) · 1.97 KB
/
idle_connection_monitor2.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
# Script para monitorar conexões ociosas no servidor SMB Windows
# Autor: Francisco Luvisari Scavassa
# Data: 2024-11-18
# Versão: 1.1
# Configuração inicial
$continue = "S"
$set_session_time = 300 # Tempo máximo de existência da sessão (em segundos)
$set_session_idle = 30 # Tempo máximo de ociosidade permitido (em segundos)
# Função para fechar sessões antigas ou ociosas
function Close-IdleSessions {
# Obtem todas as sessões SMB
$sessions = Get-SmbSession
foreach ($session in $sessions) {
# Fecha sessões ociosas
if ($session.NumOpens -eq 0 -and $session.SecondsExists -gt $set_session_time -and $session.SecondsIdle -gt $set_session_idle) {
Write-Host "Fechando sessão ociosa: ID $($session.SessionId), Usuário $($session.ClientUserName)"
Close-SmbSession -SessionId $session.SessionId -Force
}
}
# Verifica se o número total de sessões ultrapassou o limite e fecha a mais antiga
if ($sessions.Count -gt 20) {
$oldestSession = $sessions | Sort-Object SecondsExists -Descending | Select-Object -First 1
Write-Host "Fechando sessão mais antiga: ID $($oldestSession.SessionId), Usuário $($oldestSession.ClientUserName)"
Close-SmbSession -SessionId $oldestSession.SessionId -Force
}
}
# Loop de monitoramento
do {
# Obtem o número de sessões abertas
$session_count = (Get-SmbSession | Measure-Object).Count
if ($session_count -eq 0) {
# Pergunta ao administrador se deseja continuar monitorando
$continue = Read-Host "Nenhuma sessão aberta. Deseja monitorar novamente? (S/N)"
if ($continue -eq "N") {
Write-Host "Monitoramento encerrado."
break
}
elseif ($continue -ne "S") {
Write-Host "Opção inválida. Por favor, digite S ou N."
$continue = "S"
}
}
else {
Write-Host "Sessões abertas detectadas: $session_count"
Close-IdleSessions
}
# Pausa o monitoramento por 60 segundos
Start-Sleep -Seconds 60
} while ($continue -eq "S")
Write-Host "Script encerrado."