Powershell: Uzun süre aktif olmayan pc lerin silinmesi

Active Directory yapınızda, kayıtlı ancak uzun süre kullanılmayan bilgisayarlar zamanla karışıklığa ve performans düşüklüğüne neden olabilir; bu nedenle bunların belirlenerek silinmesi önemlidir. Aktif olmayan bilgisayarları sadece active directory den değil ayrıca dns ten de silmemiz gerekir. Gerçekte artık ağımızda bulunmayan bir bilgisayarın dns kaydımızda bulunması karışıklığa neden olabilir.

Aşağıda paylaştığımız scriptimizde işletim sistemi Server olmayan, belirlenen gün sayısı kadar aktif olmamış bilgisayarları belirleyip, bunları hem active directory’den hem de dns ten siliyoruz. Yaptığımız işlemlerden etkilenecek olan bilgisayarların isimlerini de bir log dosyasına kayıt etmeyi ihmal etmiyoruz. Bir bilgisayarın en son nezaman aktif olduğu bilgisini, bilgisayarın <lastLogonDate> attribute’ tünden sorguluyoruz. Yararlı olması ümidiyle:

removeInactivePcs.ps1
Clear-Host

$fn = (Get-Date).tostring("ddMMyyyy") + ".csv"
$file ="c:\scripts\reports\RemovedInactiveComputers-" + $fn
$log = "c:\scripts\logs\deletedComputers.txt"

$remove = $true # inactive bilgisyarların silinip silinmeyeceği
$days = 90 # kaç gün boyunca aktif olmayan pcler aranıyor?
$numberOfDays = (Get-Date).AddDays(-$days) # bugünkü tarihten $days gün öncesi hangi tarihe geliyor?

$DNSServer = "dc1"
$DNSZone = "test.local"
$logDNS = "c:\scripts\logs\removedFromDNS.txt"

Import-Module ActiveDirectory

Get-ADComputer -Property Name, lastLogonDate, OperatingSystem -Filter {lastLogonDate -lt $numberOfDays -and OperatingSystem -notlike "*Server*"} |
Sort lastLogonDate | Export-Csv $file # işletim sistemi Server olmayan, enson aktif olduğu tarih $numberOfDays gününden önce olan bilgisayarları csv dosyasına export et.

$computers = Import-Csv $file # export ettiğin csv dosyasını değişkene ata
$removedPcs =@() # silinecek olan bilgisyarların ekleneceği değişken.

if($remove -and $computers.length -gt 0) {
foreach($comp in $computers){
$pc = Get-ADComputer $comp.Name -Properties DistinguishedName | Select-Object DistinguishedName
$recordName = $comp.Name
$recordType = "A"
Remove-ADObject -Identity $comp.DistinguishedName -Recursive -Confirm:$false # bilgisayarı active directory'den sil.
$removedPcs += $pc | silinen bilgisayar adını diziye ekle
# active directory den silinen bilgisayarı dns'ten de siliyoruz.
$cmdDelete = "dnscmd $DNSServer /RecordDelete $DNSZone $recordName $recordType /f" # bilgisayarın dns kaydını silmek için
try{
$aRecord = [System.Net.DNS]::GetHostByName($recordName).HostName | # silinecek olan bilgisayarın dns kaydı mevcut mu?
Write-Host "info :$recordName dns kaydı bulundu, şimdi siliniyor..."
try{
Invoke-Expression $cmdDelete
write-host "info:$recordName dns kaydı silindi!"
$recordName | Out-File $logDNS -Append # dns kaydı silinen bilgisayarların isimlerini bir log dosyasına kayıt ediyoruz.
}catch{ "hata: $recordName dns kaydını silemiyorum!" }
}catch{"hata: $recordName dns kaydı bulunamadı!"}

} #foreach loop
$removedPcs | Out-File $log -Append # active directory'den silinen bilgisayarların isimlerini bir log dosyasına kayıt ediyoruz.
} # if statement
else{ Write-Host "aktif olmayan bilgisayar yok!"}
<pre>

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


bir + 1 =

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Yandex.Metrica