GPO Kullanarak PowerShell Başlangıç (Oturum Açma) Komut Dosyalarını Çalıştırma


Windows Grup İlkesi, bilgisayar başlatılırken/kapatılırken veya kullanıcı oturum açarken/kapatırken çeşitli betik dosyalarını çalıştırmanıza izin verir. GPO'ları yalnızca etki alanı bilgisayarlarında klasik toplu oturum açma komut dosyalarını çalıştırmak için kullanamazsınız (

.bat

,

.cmd

,

.vbs

), aynı zamanda PowerShell betiklerini (

.ps1

) Başlatma/Kapatma/Oturum Açma/Oturumu Kapatma sırasında.

Windows'un modern sürümlerinde, doğrudan bir GPO düzenleyicisinden oturum açma/kapatma PowerShell betiklerini çalıştırabilirsiniz (önceden .ps1 dosyasını .bat toplu iş dosyasından

powershell.exe

yürütülebilir).

Etki Alanı Grup İlkesi Yönetimi konsolunu çalıştırın (

GPMC.msc

), yeni bir ilke (GPO) oluşturun ve bunu kullanıcılar veya bilgisayarlarla birlikte hedef Active Directory kapsayıcısına (OU) atayın (ince ilke hedefleme için WMI GPO filtrelerini kullanabilirsiniz). Politika Düzenle moduna geçin.

PS1 betiğinizi ne zaman çalıştırmak istediğinize bağlı olarak, PowerShell betiğini çalıştırmak için bir GPO bölümü seçmelisiniz:

  • Kullanıcı bir bilgisayarda oturum açtığında (oturum kapattığında) bir PS komut dosyası çalıştırmak istiyorsanız (kullanıcının ortam ayarlarını veya programları yapılandırmak için: örneğin, AD kullanıcı özelliklerine göre otomatik olarak bir Outlook imzası oluşturmak, ekran koruyucuyu özelleştirmek veya Başlangıç ekranı ayarları), GPO bölümüne gitmeniz gerekir: Kullanıcı Yapılandırması -> İlkeler -> Windows Ayarları -> Komut Dosyaları (Oturum Açma/Oturum Kapatma);

  • PowerShell komut dosyasını bir bilgisayar başlangıcında (eski protokolleri devre dışı bırakmak için: NetBIOS ve LLMNR, SMBv1, bilgisayar güvenlik ayarlarını yapılandırma vb.) veya bilgisayarı kapatmadan önce çalıştırmak istiyorsanız, bilgisayarla birlikte GPO bölümüne gitmeniz gerekir. ayarlar: Bilgisayar Yapılandırması -> İlkeler -> Windows Ayarları -> Komut Dosyaları (Başlatma/Kapatma).

Grup İlkesi ile Windows Başlangıçta PowerShell Komut Dosyaları Nasıl Çalıştırılır?

Bir bilgisayar başlangıcında PowerShell betiğini çalıştırmamız gerektiğini varsayalım. Başlangıç politikasını seçin ve PowerShell Komut Dosyaları sekmesine gidin.

Şimdi PowerShell betiğinizi içeren dosyayı etki alanı denetleyicisine kopyalamanız gerekiyor. ps1 dosyanızı etki alanı denetleyicisindeki Netlogon dizinine kopyalayın (örneğin,

\\a-d.site\netlogon

).

Startup PowerShell betiğini yapılandırdığımız için, NTFS "Read&Execute" izinlerini kontrol etmeniz gerekir.

Domain Computers

ve/veya

Authenticated Users

ps1 dosya izinlerindeki gruplar.

Şimdi Ekle'yi tıklayın ve Netlogon'da ps1 betik dosyanızın UNC yolunu belirtin.

Bir GPO aracılığıyla birden fazla PowerShell betiği çalıştırıyorsanız, Yukarı/Aşağı düğmelerini kullanarak betiklerin yürütülme sırasını kontrol edebilirsiniz.

Bilgisayar başlatma sırasında PowerShell betiklerini doğru şekilde çalıştırmak için, Bilgisayar Yapılandırması -> Yönetim Şablonları -> Sistem -> Grup İlkesi bölümündeki ilkeyi kullanarak betiklerin başlatılmasından önceki gecikme süresini yapılandırmanız gerekir. “Oturum Açma Komut Dosyası Gecikmesini Yapılandır ” politikasını etkinleştirin ve oturum açma komut dosyalarını başlatmadan önce dakika cinsinden bir gecikme belirleyin (başlatmayı tamamlamak ve gerekli tüm hizmetleri yüklemek için yeterlidir). Genellikle buraya 1 veya 2 dakika koymak yeterlidir.

PowerShell komut dosyanız Windows ağ iletişimi kullanıyorsa, bazı GPO'lar için "Başlangıç ilkesi işleme bekleme süresini belirt" seçeneğini etkinleştirmeniz gerekir (Bilgisayar Yapılandırması -> İlkeler -> Yönetim Şablonları -> Sistem -> Grup İlkesi) . Burada 60 saniyeden başlamayı deneyebilirsiniz. Bu ilkeyi etkinleştirdikten sonra, bilgisayarınız başlangıç komut dosyalarınızı çalıştırmadan önce ağ kullanılabilirliği bildirimleri için 60 saniye bekleyecektir. Bu genellikle Windows ağ yığınını başlatmak için yeterli bir süredir.

Windows Server 2012R2 ve Windows 8.1 ve daha yeni sürümlerde, GPO'daki PowerShell betikleri, Bypass modunda NetLogon dizininden çalıştırılır. Bu, PowerShell Komut Dosyası Yürütme İlkesi ayarlarının göz ardı edildiği anlamına gelir. Farklı bir paylaşılan klasörden bir komut dosyası çalıştırmak istiyorsanız veya ağınızda hâlâ Windows 7 veya Windows Server 2008R2 istemcileriniz varsa, PowerShell komut dosyası yürütme ilkesini yapılandırmanız gerekir.

Varsayılan olarak, Windows güvenlik ayarları PowerShell betiklerinin çalıştırılmasına izin vermez. PowerShell betiği yürütme ilkesi ayarının geçerli değeri, kullanılarak elde edilebilir.

Get-ExecutionPolicy

cmdlet. Politika yapılandırılmamışsa, komut Kısıtlı döndürür (tüm komut dosyaları engellenir). PowerShell komut dosyasını çalıştırmak için güvenlik ayarları, "Komut Dosyası Yürütmeyi Aç" ilkesi aracılığıyla yapılandırılabilir (GPO Bilgisayar Yapılandırması bölümünde -> Yönetim Şablonları -> Windows Bileşenleri -> Windows PowerShell). Olası politika değerleri:

  • Yalnızca imzalı komut dosyalarına izin ver (AllSigned) - yalnızca imzalı PowerShell komut dosyalarını çalıştırabilirsiniz (“Bir PowerShell komut dosyası nasıl dijital olarak imzalanır?”) — bu, güvenlik açısından en iyi seçenektir;

  • Yerel komut dosyalarına ve uzaktan imzalı komut dosyalarına izin ver (RemoteSigned) - tüm yerel ve imzalı uzak komut dosyalarını çalıştırabilirsiniz;

  • Tüm komut dosyalarına izin ver (kısıtlanmamış) - en güvensiz seçenek çünkü herhangi bir PowerShell komut dosyasının çalıştırılmasına izin verir.

PowerShell betik yürütme ilkesinin ayarlarından biri sizin için uygun değilse, PowerShell betiklerini Bypass modunda çalıştırabilirsiniz (komut dosyaları engellenmez ve uyarılar görünmez).

Bunu yapmak için Başlangıç -> Komut Dosyaları bölümünden PowerShell betiğini çalıştırın. Bu bölümde, powershell.exe yürütülebilir dosyasını (makalede açıklanan komut dosyasına benzer) çağırarak PS1 komut dosyanızı çalıştırabilirsiniz. Ayarlamak:

  • Komut Dosyası Adı:

    %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • Komut Dosyası Parametreleri:

     -Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1

Dönem

%~dp0

otomatik olarak betik dizinine (bu durumda NETLOGON) giden bir UNC yoluna dönüştürülen bir ortam değişkenidir.

Bu durumda, Bypass parametresini kullanarak herhangi bir (güvenilmeyen) PowerShell betiğinin çalışmasına izin vermek zorunda kalırsınız.

GPO ayarlarını güncellemek için bilgisayarınızı yeniden başlatın ve Windows önyüklemesinden sonra PowerShell betiğinizin çalışıp çalışmadığını kontrol edin.

Kullanıcı Oturum Açarken/Oturumu Kapatırken Windows PowerShell Komut Dosyasını Çalıştırın

Bir kullanıcı Windows'ta oturum açtığında (veya oturumu kapattığında) bir PowerShell betiğinin otomatik olarak nasıl çalıştırılacağına bakalım.

Komut dosyasını bilgisayar başlangıcında değil, kullanıcı Windows'ta oturum açtıktan sonra (bilgisayardaki her kullanıcı için) çalıştırmanız gerekiyorsa, GPO'yu Active Directory OU'ya kullanıcılarla bağlamanız gerekir. Bu durumda, GPO'nuzun Kullanıcı Yapılandırması bölümünde PowerShell betiğinin yapılandırılması gerekir.

İlkenin belirli bir bilgisayarın tüm kullanıcılarına uygulanmasını istiyorsanız, ilkeyi bilgisayarlarla kuruluş birimine bağlamanız ve Bilgisayar Yapılandırması -> bölümünde Kullanıcı Grubu İlkesi Geri Döngü İşleme modunu Yapılandır parametresini etkinleştirmeniz gerekir. Yönetim Şablonları -> Sistem -> Grup İlkesi). Geridöngü işlemeyi etkinleştirmezseniz Kullanıcı Yapılandırması bölümündeki parametreler kullanıcıya uygulanmaz. Daha fazla bilgi için Kullanıcıya veya Bilgisayara Uygulanmayan Grup İlkesi yazısını kontrol edin.

Bu örnekte, kullanıcının oturum açma zamanını bir metin günlük dosyasına yazan basit bir PowerShell betiği kullanacağım.

  1. PowerShell betik dosyanızı şuraya kopyalayın:

    \\a-d.site\NETLOGON\

    Active Directory etki alanı denetleyicisindeki klasör;

  2. Kullanıcı Yapılandırması -> İlkeler -> Windows Ayarları -> Komut Dosyaları -> Oturum Açma'ya gidin;

  3. PowerShell Betikleri sekmesine gidin ve PS1 betik dosyanızı ekleyin (örneğin, UNC yolunu kullanın)

    \\a-d.site\NETLOGON\UserLog.ps1

    );

  4. Kullanıcıyı hedef bilgisayarda yeniden oturum açın;

  5. PowerShell komut dosyanız, kullanıcı oturum açtığında GPO aracılığıyla otomatik olarak başlatılacaktır;

  6. Kullanıcı oturum açma komut dosyasının, Olay Görüntüleyicisi'nin Microsoft-Windows-GroupPolicy/Operational bölümündeki 5018 Olay Kimliği tarafından başarıyla yürütüldüğünü doğrulayabilirsiniz:

    Completed Logon script for a-d\jsmith in 11 seconds.

Komut dosyası bitene kadar kullanıcının masaüstüne erişmesini istemiyorsanız, Oturum açma komut dosyalarını eşzamanlı olarak çalıştır GPO parametresini etkinleştirmelisiniz (Bilgisayar Yapılandırması -> Yönetim Şablonları -> Sistem -> Oturum Açma) . Bu durumda, explorer.exe işlemi, tüm ilkeler ve oturum açma komut dosyaları tamamlanana kadar başlamaz (bu, kullanıcının oturum açma süresini artırır!).

Komut dosyasının geçerli kullanıcı izinleriyle çalıştığını unutmayın. Kullanıcının bilgisayarda yönetici ayrıcalıkları varsa ve Kullanıcı Hesabı Denetimi (UAC) ayarları etkinleştirilmişse, PowerShell betiği yükseltilmiş ayrıcalıklar gerektiren değişiklikler yapamaz.

PowerShell oturum açma betiklerini yükseltilmiş kullanıcı izinleriyle çalıştırmak için Zamanlayıcı Görevlerini kullanabilirsiniz.

  1. Kullanıcı Yapılandırması -> Tercihler -> Denetim Masası Ayarları -> Zamanlanmış Görev altında yeni bir Görev Zamanlayıcı işi oluşturun;

  2. Genel sekmesinde, görevin mevcut kullanıcı adına başlatılacağını belirtin

    %LogonDomain%\%LogonUser

    ve etkinleştirin

    Run with highest privileges

    seçenek;

  3. Tetikleyici sekmesinde, görevin Oturum açıldığında başlatılması gerektiğini belirtin;

  4. Eylemler sekmesinde PowerShell betik dosyanızın yolunu belirtin:

Eylem: Bir program başlatın
Program/Komut Dosyası:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

Bağımsız Değişken Ekle (isteğe bağlı):

-ExecutionPolicy Bypass -command "& \\a-d.site\Netlogon\Your_PS_Script.ps1"

Windows Zamanlayıcı görevlerini GPO aracılığıyla yapılandırma hakkında daha fazla bilgi edinin.

Böyle bir PowerShell betiği yönetici olarak çalışır (etki alanı kullanıcısı yerel Yöneticiler grubuna eklenirse).

Bazı oturum açma komut dosyalarının, her kullanıcı için bilgisayara ilk girişte yalnızca bir kez çalıştırılması gerekir (çalışma ortamının başlatılması, klasörlerin veya yapılandırma dosyalarının kopyalanması, kısayolların oluşturulması vb.). İşte GPO kullanarak bir betiği yalnızca bir kez çalıştırmanıza izin veren basit bir numara.

İlgili makaleler