Windows server da son 24 saatte hangi kullanıcılar hangi ip den bağlantı yapmışlar bu aşağıdaki script ile görebiliriz.
$Baslangic = (Get-Date).AddHours(-24)
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
StartTime = $Baslangic
ID = 4624,4634,4647
} -ErrorAction SilentlyContinue
$oturumlar = @()
foreach ($ev in $events) {
$xml = [xml]$ev.ToXml()
$data = @{}
foreach ($d in $xml.Event.EventData.Data) {
$data[$d.Name] = $d.'#text'
}
switch ($ev.Id) {
4624 {
if ($data.LogonType -eq '10') {
$oturumlar += [PSCustomObject]@{
LogonID = $data.TargetLogonId
Kullanici = "$($data.TargetDomainName)\$($data.TargetUserName)"
Giris = $ev.TimeCreated
Cikis = $null
Disconnect = $null
IP = $data.IpAddress
Durum = "Bağlı"
}
}
}
4634 {
$session = $oturumlar |
Where-Object { $_.LogonID -eq $data.TargetLogonId } |
Select-Object -Last 1
if ($session -and !$session.Cikis) {
$session.Cikis = $ev.TimeCreated
$session.Durum = "Çıkış Yapmış"
}
}
4647 {
$session = $oturumlar |
Where-Object { $_.LogonID -eq $data.TargetLogonId } |
Select-Object -Last 1
if ($session -and !$session.Cikis) {
$session.Cikis = $ev.TimeCreated
$session.Durum = "Logoff"
}
}
}
}
$oturumlar |
Select-Object `
Kullanici,
Giris,
Disconnect,
Cikis,
@{
Name='Sure';
Expression={
if ($_.Cikis) {
New-TimeSpan -Start $_.Giris -End $_.Cikis
}
else {
New-TimeSpan -Start $_.Giris -End (Get-Date)
}
}
},
IP,
Durum |
Sort-Object Giris -Descending |
Format-Table -AutoSize
Aşağıda da hangi kullanıcılar bağlanıp nekadar bağlı kalmışlar onu görebiliriz.
$baslangic = (Get-Date).AddHours(-24)
$events = Get-WinEvent -FilterHashtable @{
LogName = @(
'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
)
StartTime = $baslangic
} -ErrorAction SilentlyContinue
$oturumlar = @{}
foreach ($e in $events | Sort-Object TimeCreated) {
switch ($e.Id) {
# Login
21 {
if ($e.Properties.Count -ge 2) {
$user = $e.Properties[0].Value
$sessionId = $e.Properties[1].Value
$oturumlar[$sessionId] = [PSCustomObject]@{
SessionID = $sessionId
Kullanici = $user
Giris = $e.TimeCreated
Disconnect = $null
Cikis = $null
Durum = 'Bağlı'
}
}
}
# Disconnect
24 {
$sessionId = $e.Properties[0].Value
if ($oturumlar.ContainsKey($sessionId)) {
$oturumlar[$sessionId].Disconnect = $e.TimeCreated
$oturumlar[$sessionId].Durum = 'Disconnected'
}
}
# Reconnect
25 {
$sessionId = $e.Properties[0].Value
if ($oturumlar.ContainsKey($sessionId)) {
$oturumlar[$sessionId].Durum = 'Tekrar Bağlandı'
}
}
# Logoff
23 {
$sessionId = $e.Properties[0].Value
if ($oturumlar.ContainsKey($sessionId)) {
$oturumlar[$sessionId].Cikis = $e.TimeCreated
$oturumlar[$sessionId].Durum = 'Çıkış Yapmış'
}
}
}
}
$oturumlar.Values |
Select-Object `
Kullanici,
SessionID,
Giris,
Disconnect,
Cikis,
@{
Name='Sure'
Expression={
if ($_.Cikis) {
(New-TimeSpan $_.Giris $_.Cikis).ToString("dd\.hh\:mm\:ss")
}
else {
(New-TimeSpan $_.Giris (Get-Date)).ToString("dd\.hh\:mm\:ss")
}
}
},
Durum |
Sort-Object Giris -Descending |
Format-Table -AutoSize
Kodlar Powershell dir, powershell in ne olduğun bilmiyorsanız zaten size lazım da değildir. 🙂