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:
- Bilgisayar OU Bilgisi
- Bilgisayarın Active Directory’de hangi OU altında bulunduğunu listeler.
- 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.
- Son 30 Günde Giriş Yapan Kullanıcılar
Securityloglarını analiz eder.- Sadece Logon Type 2 (Interactive logon) kayıtlarını filtreler.
- Kullanıcıların listesi ve OU bilgileri raporlanır.
- 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 7gibi 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.