1. Anasayfa
  2. Active Directory

Active Directory Bilgisayar Hesabından, O Bilgisayarı Kullanan Kullanıcının Hesap Bilgilerini Çekmek


Kurumsal ortamlarda bir bilgisayarın kim tarafından kullanıldığını bu kullanıcının hangi OU içinde olduğunu ve bilgisayar nesnesinin AD’deki konumunu hızla görmek operasyonu ciddi biçimde hızlandırır.

CheckComputer.ps1 tek komutla şu bilgileri bir araya getirir. Verilen bilgisayarın Computer OU’su, bilgisayar nesnesinde ManagedBy tanımlıysa, yöneticinin adı/SAM hesabı ve User OU’su, Son 30 günde o bilgisayara etkileşimli (Logon Type = 2) giriş yapan kullanıcı adları ve her birinin User OU’su, (Varsa eger ) bilgisayar nesnesinin Description alanı sizlere raporlar.

Aşağıdaki scirpt içeriğini CheckComputer.ps1 adıyla kaydediniz. PowerShell’i açın ve şu şekilde sorgulayınız.

.\CheckComputer.ps1 COMPUTER1923
Aşağıdaki PowerShell Script ile bilgisayar adından, o bilgisayarı kullanan kişinin user name'ini, user OU'sunu ve computer OU'sunu bulabilirsiniz.

Scripti CheckComputer.ps1 olarak kaydebilirsiniz 

Kullanım için PowerShell'den CheckComputer.ps1 COMPUTER1923 gibi sorgulayabilirsiniz.

Son 30 günde bilgisayara giriş yapan kullanıcıları tespit eder,
Windows Event Log'dan Logon Type 2 (Interactive logon) kayıtlarını analiz eder,
Her kullanıcının hangi OU'da olduğunu gösterir.

# CheckComputer.ps1......................

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ın bilgilerini al
        $computer = Get-ADComputer $CompName -Properties DistinguishedName, ManagedBy, Description
        
        if ($computer) {
            # Bilgisayarın OU'sunu göster
            $computerOU = $computer.DistinguishedName -replace "^CN=[^,]+,", ""
            Write-Host "`nBilgisayar OU'su:" -ForegroundColor Yellow
            Write-Host "  $computerOU" -ForegroundColor White
            
            # Bilgisayarın yöneticisini (ManagedBy) kontrol et
            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 Orange
            }
            
            # Alternatif olarak bilgisayarı kullanan aktif kullanıcıları bul
            Write-Host "`nBilgisayarı Kullanan Aktif Kullanıcılar:" -ForegroundColor Yellow
            Write-Host "----------------------------------------" -ForegroundColor Gray
            
            # Son 30 günde giriş yapan kullanıcıları bul
            $thirtyDaysAgo = (Get-Date).AddDays(-30)
            $users = Get-WinEvent -ComputerName $CompName -FilterHashtable @{LogName='Security'; ID=4624; StartTime=$thirtyDaysAgo} -MaxEvents 100 -ErrorAction SilentlyContinue | 
                     Where-Object { $_.Message -match 'Logon Type:\s+2' } |
                     ForEach-Object { 
                         if ($_.Message -match 'Account Name:\s+([^\s]+)') {
                             $matches[1]
                         }
                     } | 
                     Where-Object { $_ -ne $env:COMPUTERNAME -and $_ -ne 'SYSTEM' -and $_ -ne '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 {
                        # Kullanıcı bulunamazsa sessizce devam et
                    }
                }
            }
            else {
                Write-Host "  Event log'dan aktif kullanıcı bilgisi alınamadı." -ForegroundColor Orange
                Write-Host "  (WinRM servisi kapalı olabilir veya uzak erişim izni yoktur)" -ForegroundColor Orange
            }
            
            # Bilgisayar açıklaması varsa göster
            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 işlev çağrısı
CheckComputer $ComputerName

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

Kaynak : https://github.com/epicsystem/MyScripts/blob/main/CheckComputer.ps1

Script paylaşımı için Ahmet ŞAHAN’e teşekkürler.