1. Anasayfa
  2. Active Directory

PowerShell ile Bilgisayar Kullanıcılarını, OU Bilgilerini ve Son 30 Günlük Logon Kayıtlarını Tespit Edilmesi


Kurumsal bir ortamda BT yöneticilerinin en çok ihtiyaç duyduğu bilgilerden biri bir bilgisayarın kim tarafından kullanıldığı, hangi Organizational Unit (OU) altında bulunduğu ve son dönemde hangi kullanıcıların giriş yaptığıdır. Özellikle denetim (audit), güvenlik (security) ve kullanıcı takibi süreçlerinde bu bilgilere hızlıca ulaşmak oldukça önemlidir.

Bu makalede PowerShell kullanarak bir bilgisayarın detaylı kullanıcı ve Active Directory bilgilerini nasıl elde edebileceğinizi inceleyeceğiz.

Script’in Sağladığı Özellikler

Hazırlanan PowerShell script aşağıdaki bilgileri kolayca raporlamanızı sağlar:

  1. Bilgisayar OU Bilgisi
    • Bilgisayarın Active Directory’de hangi OU altında bulunduğunu listeler.
  2. ManagedBy Alanı (Bilgisayar Yöneticisi)
    • Eğer bilgisayara AD üzerinde bir kullanıcı atanmışsa, bu kişinin bilgilerini (isim, kullanıcı adı ve OU) gösterir.
  3. Son 30 Günde Giriş Yapan Kullanıcılar
    • Security loglarını analiz eder.
    • Sadece Logon Type 2 (Interactive logon) kayıtlarını filtreler.
    • Kullanıcıların listesi ve OU bilgileri raporlanır.
  4. Bilgisayar Açıklaması (Description)
    • AD üzerinde bilgisayara yazılmış açıklama bilgisi varsa, ekranda gösterilir.

Script’in Kullanımı

Script’i CheckComputer.ps1 adıyla kaydedin. Ardından PowerShell üzerinden şu şekilde çalıştırın:

.\CheckComputer.ps1 COMPUTER1923

Eğer yardım almak isterseniz:

.\CheckComputer.ps1 /?

Örnek Çıktı

Çalıştırıldığında elde edilecek tipik bir çıktı şu şekilde olacaktır:

===========================================
Bilgisayar Bilgileri: COMPUTER1923
===========================================

Bilgisayar OU'su:
  OU=Workstations,OU=IT,DC=domain,DC=com

Bilgisayar Yöneticisi:
  Kullanıcı: Ahmet Şahan (ahmet.sahan)
  Kullanıcı OU'su: OU=IT,OU=Users,DC=domain,DC=com

Bilgisayarı Kullanan Aktif Kullanıcılar:
----------------------------------------
  Kullanıcı: veli.kozan
  OU: OU=Accounting,OU=Users,DC=domain,DC=com

  Kullanıcı: ayse.kara
  OU: OU=HR,OU=Users,DC=domain,DC=com

Bilgisayar Açıklaması:
  Muhasebe Departmanı - Laptop

===========================================
İşlem tamamlandı.
===========================================

Bu rapor sayesinde hem bilgisayarın kime ait olduğu, hem de son 30 gün içerisinde kimlerin giriş yaptığı kolayca anlaşılır.

Script Kodu

(Sizin verdiğiniz kod, anlaşılır olması için küçük düzenlemelerle sunulmuştur.)

param(
    [Parameter(Mandatory=$false)]
    [string]$ComputerName
)

# Yardım Mesajı
if ($ComputerName -eq "/?" -or $ComputerName -eq "" -or $ComputerName -eq $null) {
    Write-Host "Kullanım: CheckComputer.ps1 ComputerName" -ForegroundColor Yellow
    Write-Host "Örnek: CheckComputer.ps1 COMPUTER01" -ForegroundColor Green
    exit
}

function CheckComputer {
    param([string]$CompName)
    
    try {
        Write-Host "===========================================" -ForegroundColor Cyan
        Write-Host "Bilgisayar Bilgileri: $CompName" -ForegroundColor Cyan
        Write-Host "===========================================" -ForegroundColor Cyan
        
        # Bilgisayar Bilgilerini Al
        $computer = Get-ADComputer $CompName -Properties DistinguishedName, ManagedBy, Description
        
        if ($computer) {
            # Bilgisayar OU Bilgisi
            $computerOU = $computer.DistinguishedName -replace "^CN=[^,]+,", ""
            Write-Host "`nBilgisayar OU'su:" -ForegroundColor Yellow
            Write-Host "  $computerOU" -ForegroundColor White
            
            # ManagedBy Kontrolü
            if ($computer.ManagedBy) {
                try {
                    $manager = Get-ADUser $computer.ManagedBy -Properties DistinguishedName, Name, SamAccountName
                    $managerOU = $manager.DistinguishedName -replace "^CN=[^,]+,", ""
                    
                    Write-Host "`nBilgisayar Yöneticisi:" -ForegroundColor Yellow
                    Write-Host "  Kullanıcı: $($manager.Name) ($($manager.SamAccountName))" -ForegroundColor Green
                    Write-Host "  Kullanıcı OU'su: $managerOU" -ForegroundColor White
                }
                catch {
                    Write-Host "`nBilgisayar yöneticisi bilgisi alınamadı." -ForegroundColor Red
                }
            }
            else {
                Write-Host "`nBu bilgisayarda ManagedBy alanı boş." -ForegroundColor DarkYellow
            }
            
            # Son 30 Günde Giriş Yapan Kullanıcılar
            Write-Host "`nBilgisayarı Kullanan Aktif Kullanıcılar:" -ForegroundColor Yellow
            Write-Host "----------------------------------------" -ForegroundColor Gray
            
            $thirtyDaysAgo = (Get-Date).AddDays(-30)
            $users = Get-WinEvent -ComputerName $CompName -FilterHashtable @{LogName='Security'; ID=4624; StartTime=$thirtyDaysAgo} -MaxEvents 200 -ErrorAction SilentlyContinue | 
                     Where-Object { $_.Message -match 'Logon Type:\s+2' } |
                     ForEach-Object { 
                         if ($_.Message -match 'Account Name:\s+([^\s]+)') {
                             $matches[1]
                         }
                     } | 
                     Where-Object { $_ -notin @($env:COMPUTERNAME,'SYSTEM','ANONYMOUS LOGON') } |
                     Sort-Object -Unique
            
            if ($users) {
                foreach ($username in $users) {
                    try {
                        $user = Get-ADUser $username -Properties DistinguishedName -ErrorAction SilentlyContinue
                        if ($user) {
                            $userOU = $user.DistinguishedName -replace "^CN=[^,]+,", ""
                            Write-Host "  Kullanıcı: $username" -ForegroundColor Green
                            Write-Host "  OU: $userOU" -ForegroundColor White
                            Write-Host ""
                        }
                    }
                    catch {}
                }
            }
            else {
                Write-Host "  Kullanıcı bilgisi alınamadı." -ForegroundColor DarkYellow
                Write-Host "  (WinRM kapalı olabilir veya Security Log erişim izni yoktur)" -ForegroundColor DarkYellow
            }
            
            # Bilgisayar Açıklaması
            if ($computer.Description) {
                Write-Host "`nBilgisayar Açıklaması:" -ForegroundColor Yellow
                Write-Host "  $($computer.Description)" -ForegroundColor White
            }
        }
        else {
            Write-Host "`nBilgisayar bulunamadı!" -ForegroundColor Red
        }
    }
    catch {
        Write-Host "Hata: Bilgisayar '$CompName' bulunamadı veya erişim sorunu var." -ForegroundColor Red
        Write-Host "Detay: $($_.Exception.Message)" -ForegroundColor Red
    }
}

# Ana İşlev Çağrısı
CheckComputer $ComputerName

Write-Host "`n===========================================" -ForegroundColor Cyan
Write-Host "İşlem tamamlandı." -ForegroundColor Cyan
Write-Host "===========================================" -ForegroundColor Cyan

Bu script haliyle oldukça işlevsel. Ancak geliştirmek için şu eklemeler yapılabilir:

  • CSV/Excel Çıktısı → Raporu dosya olarak kaydedip yöneticilere mail ile gönderebilirsiniz.
  • Parametre ile Tarih Seçimi → Son 30 gün yerine, -Days 7 gibi parametreyle istenen süre girilebilir.
  • Toplu Bilgisayar Desteği → Birden fazla bilgisayarı liste halinde verip topluca rapor oluşturabilirsiniz.
  • Planlı Görev Olarak Çalıştırma → Günlük ya da haftalık otomatik rapor üretilebilir.