PowerShell ile Group Policy yönetimi; GPO envanteri çıkarma, raporlama, yedekleme, geri yükleme, yeni GPO oluşturma ve OU bağlantılarını otomatikleştirme işlemlerini tekrar edilebilir hale getirir. Özellikle çok sayıda GPO bulunan Active Directory ortamlarında komut tabanlı yönetim hem denetlenebilirliği hem de standardizasyonu artırır.
Amaç ve Kapsam
Bu rehberde GroupPolicy PowerShell modülüyle GPO’ları listeleme, raporlama, yedekleme, restore/import, yeni GPO oluşturma, link ekleme ve temel doğrulama adımlarını ele alıyorum.
Ön Koşullar
- Active Directory ve Group Policy temel bilgisi
- GPMC veya RSAT Group Policy Management bileşenleri
- İlgili GPO’ları okuyacak veya değiştirecek yetki
- Yedekleme ve raporlar için güvenli bir dosya yolu
- Üretim değişikliklerinden önce test GPO’su veya lab ortamı
GroupPolicy Modülünü Kontrol Etme
Get-Module -ListAvailable GroupPolicy
Modül yüklüyse gerektiğinde doğrudan içe aktarabilirsiniz:
Import-Module GroupPolicy
Windows Server üzerinde GPMC bileşenini eklemek gerektiğinde:
Install-WindowsFeature GPMC
GPO Envanteri Çıkarma
Tüm GPO’ları listelemek için:
Get-GPO -All
Daha kullanışlı bir envanter çıktısı:
Get-GPO -All |
Select-Object DisplayName, Id, GpoStatus, CreationTime, ModificationTime |
Sort-Object DisplayName
Belirli bir GPO’yu görüntülemek için:
Get-GPO -Name 'Default Domain Policy'
GPO Raporu Oluşturma
Bir GPO’yu HTML olarak raporlamak:
Get-GPOReport `
-Name 'Default Domain Policy' `
-ReportType Html `
-Path 'C:\Reports\DefaultDomainPolicy.html'
Tüm GPO’lar için XML raporu üretmek:
Get-GPOReport `
-All `
-ReportType Xml `
-Path 'C:\Reports\All-GPOs.xml'
Bu raporlar ayar karşılaştırma, değişiklik öncesi kayıt ve denetim süreçlerinde oldukça kullanışlıdır.
GPO Yedekleme
Tüm GPO’ları yedeklemek için:
$BackupPath = 'C:\GPO-Backups'
New-Item -Path $BackupPath -ItemType Directory -Force | Out-Null
Backup-GPO -All -Path $BackupPath
Tek bir GPO için:
Backup-GPO `
-Name 'Password Policy' `
-Path 'C:\GPO-Backups'
Otomatik GPO Yedekleme
$Root = 'C:\GPO-Backups'
$Date = Get-Date -Format 'yyyyMMdd-HHmm'
$BackupPath = Join-Path $Root $Date
New-Item -Path $BackupPath -ItemType Directory -Force | Out-Null
Backup-GPO -All -Path $BackupPath |
Select-Object DisplayName, Id, BackupId, CreationTime |
Export-Csv (Join-Path $BackupPath 'backup-index.csv') -NoTypeInformation -Encoding UTF8
Bu script Task Scheduler üzerinden çalıştırılabilir. Ancak yedek klasörünün erişim izinleri, retention süresi ve yedeklerin gerçekten okunabilir olduğu düzenli olarak kontrol edilmelidir.
Restore ve Import Arasındaki Fark
Restore-GPO, daha önce yedeklenmiş bir GPO’yu aynı domain içinde geri yüklemek için kullanılır:
Restore-GPO `
-Name 'Password Policy' `
-Path 'C:\GPO-Backups'
Import-GPO ise bir yedekteki ayarları mevcut veya yeni bir hedef GPO’ya aktarmak için kullanılır. Yeni bir hedef GPO oluşturup ayarları içe aktarmak için:
New-GPO -Name 'Password Policy - Test'
Import-GPO `
-BackupGpoName 'Password Policy' `
-TargetName 'Password Policy - Test' `
-Path 'C:\GPO-Backups'
Üretimde doğrudan kritik GPO üzerine restore/import yapmak yerine önce test hedefinde doğrulama yapmak daha güvenlidir.
Yeni GPO Oluşturma ve OU’ya Bağlama
New-GPO `
-Name 'Server Baseline' `
-Comment 'Windows Server temel politika seti'
Örnek bir OU bağlantısı:
New-GPLink `
-Name 'Server Baseline' `
-Target 'OU=Servers,DC=example,DC=local' `
-LinkEnabled Yes
Gerçek domain veya OU bilgilerini genel script örneklerinde sabitlemek yerine değişken veya placeholder kullanmak daha uygundur.
Registry Tabanlı Policy Değeri Yazma
Set-GPRegistryValue `
-Name 'Server Baseline' `
-Key 'HKLM\SOFTWARE\Policies\Contoso\Baseline' `
-ValueName 'Enabled' `
-Type DWord `
-Value 1
Registry policy yazarken ilgili ürün veya Windows bileşeninin desteklediği policy path ve value yapısını doğrulamadan rastgele registry anahtarı üretmeyin.
Doğrulama
GPO değişikliği sonrasında istemci üzerinde yalnızca gpupdate /force çalıştırmak yerine uygulanmış politikayı da kontrol edin:
gpupdate /force
gpresult /h C:\Temp\gpresult.html
GPMC üzerindeki Group Policy Results veya RSOP görünümü de kapsam, link sırası, Security Filtering ve inheritance problemlerini analiz etmek için kullanılabilir.
Troubleshooting
GPO listede var ama uygulanmıyor
- GPO linkinin doğru site, domain veya OU üzerinde olduğunu kontrol edin.
- Security Filtering ve WMI Filter kapsamını inceleyin.
- Block Inheritance veya Enforced kullanımını kontrol edin.
- İstemcide
gpresultile gerçekten uygulanan politikaları görün. - Domain Controller replikasyon sağlığını kontrol edin.
Import veya restore beklenen sonucu vermiyor
Yedek adını, BackupId bilgisini ve hedef GPO’yu doğrulayın. Migration table gerektiren security principal, UNC path veya domain-specific referanslar varsa ayrıca ele alınmalıdır.
Güvenlik ve Best Practice
- Kritik GPO değişikliklerinden önce yedek alın.
- Default Domain Policy ve Default Domain Controllers Policy üzerinde gereksiz özelleştirme yapmaktan kaçının.
- Politikaları işlev bazlı küçük GPO’lara ayırmak troubleshooting’i kolaylaştırır.
- GPO link, scope ve delegation değişikliklerini dokümante edin.
- Backup klasörlerini yalnızca yetkili yöneticilerin erişebildiği konumlarda saklayın.
- Otomasyon scriptlerine gerçek domain, kullanıcı, parola veya gizli altyapı bilgileri gömmeyin.
Sonuç
PowerShell ile GPO yönetimi, Group Policy operasyonlarını daha tekrar edilebilir ve denetlenebilir hale getirir. En büyük kazanım tek tek GUI adımlarını hızlandırmak değil; envanter, yedekleme, raporlama ve değişiklik süreçlerini standart bir operasyon modeline dönüştürmektir.
İlgili Rehberler
Microsoft Dokümantasyonu
GPO Sorun Giderme
Yapılandırma doğru göründüğü halde policy uygulanmıyorsa GPO Uygulanmıyor troubleshooting rehberi ile scope, filtering, RSoP, DNS/DC Locator ve SYSVOL kontrollerini sırayla uygulayın. Operasyon sırası için SysAdmin Playbooks bölümünü kullanabilirsiniz.
PowerShell Operasyon Merkezi
Temel cmdlet, pipeline, filtreleme ve raporlama yaklaşımı için PowerShell Komutları ana referansına; hızlı hazır komutlar için Komut Kütüphanesi bölümüne geçebilirsiniz. Tekrarlanan işlemleri script haline getirirken PowerShell Script Nedir ve Nasıl Yazılır? rehberini kullanabilirsiniz.
Komutları Çalıştırmadan Önce
Rapor ve yedek komutlarından önce hedef klasörleri oluşturun: New-Item -ItemType Directory -Path 'C:\Reports','C:\GPO-Backups','C:\Temp' -Force. Restore-GPO ve Import-GPO üretim politikalarını değiştirebilir; yedek kimliği, hedef GPO ve değişiklik onayını kontrol edin. Registry tabanlı policy örneği yalnızca örnektir; gerçek Windows güvenlik ayarı yerine kullanılmamalıdır.
