Grup İlkesi PowerShell Analizi


Hiç GPO'larınıza ilişkin genel bir bakış elde etmeniz gereken bir durumda bulundunuz mu?

Gibi bir şey:

  • Sürücü eşlemeyle tüm GPO'ları bulun
  • Yazılım yayınlamayla tüm GPO'ları bulun
  • Kullanıcı hakları yapılandırmasına sahip tüm GPO'ları bulun

Grup İlkesi Yönetim Konsolu (GPMC) aracı bu tür şeyler için pek kullanışlı değildir. Düzinelerce veya yüzlerce GPO'nuz varsa bu neredeyse imkansızdır.

Tüm GPO ayarlarınızı gözden geçirmenin en etkili yolu PowerShell kullanmaktır. Bu makale size nasıl yapılacağını öğretecek.

10 dakika içinde GPO analiz komut dosyaları için başvuracağınız kişi siz olacaksınız - size söz veriyorum ?

GPO PowerShell Modülü Nasıl Kurulur

Başlamak için ilk şey, Grup İlkesi PowerShell modülünü elinize almaktır.

Etki Alanı Denetleyicinizden çalışma hatasına düşmeyin; bu kötü (ve tembel) bir alışkanlıktır.

İş istasyonunuzda çalışmaya başlamak için RSAT Grup İlkesi Yönetimi araçlarını yükleyin. Windows 10 sürüm 1809 ve sonraki sürümlerde bu çok kolaydır:

Get-WindowsCapability -Name "RSAT.GroupPolicy.Management.Tools*" -Online | Add-WindowsCapability -Online

Windows 10 1709 veya önceki sürümlerde bu makaleye göz atın.

Windows 8.1'de daha fazla bilgi için buraya gidin.

Bir atlama ana bilgisayarı (Windows Server) kullanıyorsanız, "Grup İlkesi Yönetimi" özelliğini ekleyerek Grup İlkesi PowerShell modülünü yükleyin (sunucunuza özellikler eklemeye ilişkin ayrıntılı adım adım kılavuz için bu makaleye bakın).

Get-GPO

Grup Politikası Nesnelerinizin karmaşık analizini oluşturmak için bilmeniz gereken GroupPolicy modülünde temel olarak yalnızca iki komut vardır.

Bunlardan ilki Get-GPO'dur.

Bir GPO nesnesini yakalamak için GPO'nun adını bu komuta vermeniz yeterlidir. Çıktı aşağıdakine benzer görünecektir:

PS C:\> Get-GPO "Default Domain Policy"


DisplayName      : Default Domain Policy
DomainName       : easy365manager.local
Owner            : E365M\Domain Admins
Id               : 24c1692a-6fd1-4a85-b2e4-343968fe78e0
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 26-11-2004 13:22:37
ModificationTime : 03-12-2020 14:38:46
UserVersion      : AD Version: 69, SysVol Version: 69
ComputerVersion  : AD Version: 51, SysVol Version: 51
WmiFilter        :

Bir raporda veya başka bir şekilde faydalı olabilecek bazı temel bilgilere zaten sahibiz:

  • GPO'nun Kılavuzu (Kimlik özelliğinde)
  • Sahip
  • Yaratılış zamanı
  • Son değişiklik zamanı
  • WmiFilter

GPO'nun daha fazla özelliğine ve gerçek ayarlara daha derinlemesine dalmak için başka bir komut gereklidir:

GPOReport'u al

Get-GPOReport komutu, bir grup ilkesinin tüm ayarlarını çıkarır. Veriler için farklı formatlar kullanılabilir ancak kolay analiz için XML tercih edilir.

Verileri almak için, GPO'nun adını veya GUID'ini belirterek veya GPO'yu komuta aktararak hangi GPO'ya bakmak istediğinizi belirlemeniz gerekir.

-ReportType anahtarını kullanarak XML'i veri formatı olarak belirttiğinizde, çıktı çok büyük bir XML belgesi olur. Daha kolay erişebilmemiz için onu bir değişkene koyun:

$GPOSettings = Get-GPO "Default Domain Policy" | Get-GPOReport -ReportType XML

PowerShell'e XML verilerinin elimizde olduğunu bildirmek için değişkenin başına [xml] ekleyin:

PS C:\> [xml]$GPOSettings

xml                             GPO
---                             ---
version="1.0" encoding="utf-16" GPO

Gördüğünüz gibi üstteki öğenin adı “GPO”. Bu öğeyi yeni bir değişkene koyun, böylece her çağrıda XML'e açık dönüşüm yapmak zorunda kalmayız:

PS C:\> $GPO = ([xml]$GPOSettings).GPO
PS C:\> $GPO


xsd                 : http://www.w3.org/2001/XMLSchema
xsi                 : http://www.w3.org/2001/XMLSchema-instance
xmlns               : http://www.microsoft.com/GroupPolicy/Settings
Identifier          : Identifier
Name                : Default Domain Policy
IncludeComments     : true
CreatedTime         : 2004-11-26T12:22:37
ModifiedTime        : 2020-12-03T12:38:46
ReadTime            : 2021-05-12T19:42:24.1554915Z
SecurityDescriptor  : SecurityDescriptor
FilterDataAvailable : true
Computer            : Computer
User                : User
LinksTo             : {LinksTo}

Çıktı, daha önce Get-GPO komutunu kullanarak aldığımız nesneyle hemen hemen aynı bilgilere sahiptir.

Ancak Bilgisayar ve Kullanıcı özelliklerine özellikle dikkat edin; eğlencenin başladığı yer burasıdır!

GPO Uzantısı Verileri

GPO'nun bilgisayarda veya kullanıcı kısmında herhangi bir şey yapılandırılmışsa, karşılık gelen özniteliğin ExtensionData adında bir alt öğesi olacaktır:

PS C:\> $GPO.Computer

VersionDirectory VersionSysvol Enabled ExtensionData
---------------- ------------- ------- -------------
51               51            true    {Security, Public Key, Name Resolution Policy, Registry}

ExtensionData, GPO'da ne tür ayarların yapılandırıldığına bağlı olarak bir veya daha fazla Uzantı değerine sahip olacaktır:

PS C:\> $GPO.Computer.ExtensionData

Extension Name
--------- ----
Extension Security
Extension Public Key
Extension Name Resolution Policy
Extension Registry

Çeşitli Uzantı öznitelikleri, uzantı türüne özel verilere sahip olacaktır. GPO raporunun Uzantı öğelerini yinelemek için genel bir rutin oluşturabilirsiniz; ancak farklı Uzantı verileri türlerinin gerçek ayarları söz konusu olduğunda, her tür için özel bir rutin oluşturmanız gerekir.

Bu oldukça normal. GPO analizi yaparken genellikle tüm GPO'ları eşlenen sürücülerle veya tüm GPO'ları yazılım dağıtımıyla tanımlamak gibi belirli bilgileri ararız.

GPO Ayarlarını Analiz Etme

Örneğin, yapılandırılmış başlangıç komut dosyalarına sahip tüm GPO'ları bulan bir komut dosyası oluşturmaya çalışalım.

Burada uygulanan yöntem, analiz etmek istediğiniz her türlü GPO ayarında kullanılabilir.

İlk adım: Kullanıcı oturum açma komut dosyasının yapılandırılmış olduğu grup ilkelerinden birine bakarak uzantının adını bulun:

PS C:\> $Report = Get-GPO "Accounting_Scripts" | Get-GPOReport -ReportType xml
PS C:\> $GPO = ([xml]$Report).GPO
PS C:\> $GPO.User.ExtensionData

Extension Name
--------- ----
Extension Scripts

Görüldüğü gibi uzantının adı “Scripts”. Bu nedenle, komut dosyaları içeren tüm GPO'ları bulmak için, "Komut Dosyaları" adına sahip tüm GPO'ların tüm ExtensionData değerlerini yinelememiz gerekir:

$Reports = Get-GPO -All | Get-GPOReport -ReportType Xml
ForEach ($Report In $Reports) {
  $GPO = ([xml]$Report).GPO
  ForEach ($ExtensionData In $GPO.User.ExtensionData) {
    If ($ExtensionData.Name -eq "Scripts") {
      # Do something ...
      }
    }
  }
}

Şimdi veri yapısına bakarak scriptimizde hangi bilgilerin mevcut olduğunu kontrol edelim. Örneğimizde GPO'da yalnızca bir uzantı bulunduğundan, ona şu şekilde erişebiliriz:

PS C:\> $GPO.User.ExtensionData.Extension

q2                                                    type       Script
--                                                    ----       ------
http://www.microsoft.com/GroupPolicy/Settings/Scripts q2:Scripts {q2:Script, q2:Script}


PS C:\> $GPO.User.ExtensionData.Extension.Script


Command    : ConfigureAcct.bat
Parameters : /SkipErrors
Type       : Logon
Order      : 0
RunOrder   : PSNotConfigured

Command  : CreateAcctShortcuts.bat
Type     : Logon
Order    : 1
RunOrder : PSNotConfigured

Her komut dosyası için elimizde birkaç değerli bilgi vardır:

  • Emretmek
  • Parametreler
  • Tip

Tüm GPO'larımız için bu bilgiyi elde etmek amacıyla artık aşağıdaki kodu bir araya getirebiliriz:

$Reports = Get-GPO -All | Get-GPOReport -ReportType Xml
$UserScripts = @()
ForEach ($Report In $Reports) {
  $GPO = ([xml]$Report).GPO
  ForEach ($ExtensionData In $GPO.User.ExtensionData) {
    If ($ExtensionData.Name -eq "Scripts") {
      $Scripts = $ExtensionData.Extension.Script
      ForEach ($Script In $Scripts){
        $ScriptInfo = New-Object PSObject -Property @{
          GPO        = $GPO.Name
          Command    = $Script.Command
          Parameters = $Script.Parameters
          Type       = $Script.Type
        }
        $UserScripts += $ScriptInfo
      }
    }
  }
}
Write-Output $UserScripts | ft GPO,Command,Parameters,Type

Küçük test kurulumumda bu, aşağıdaki çıktıyı üretir:

GPO                Command                 Parameters  Type
---                -------                 ----------  ----
Accounting_Scripts ConfigureAcct.bat       /SkipErrors Logon
Accounting_Scripts CreateAcctShortcuts.bat             Logon
Drive Mapping      Logon.bat                           Logon
Drive Mapping      SecondaryScript.bat     /Reset      Logon

Özet

Ve bu kadar. Umarım artık kendi Grup İlkesi analiz komut dosyalarınızı nasıl oluşturacağınızı net bir şekilde anlamışsınızdır.

Yukarıdaki yaklaşımla artık tüm GPO'larınızdan her türlü bilgiyi toplamaya başlayabilirsiniz. GPO'ları temizlemek istiyorsanız, etki alanı geçişi yapıyorsanız veya dosya sunucularınızı yeniden yapılandırıyorsanız bu çok kullanışlıdır.

Bu yaklaşımı kullanan daha fazla örnek için şu iki makaleye göz atın:

  • GPO Sürücü Eşlemesi Nasıl Bulunur?
  • GPO Yazılımı Kurulum Klasörleri Nasıl Bulunur?

İlgili makaleler