Çalıştırma İlkeleri Hakkında

Kısa açıklama

PowerShell yürütme ilkelerini açıklar ve bunların nasıl yönetileceğini açıklar.

Uzun açıklama

PowerShell'in yürütme ilkesi, PowerShell'in yapılandırma dosyalarını yüklediği ve betikleri çalıştırdığı koşulları denetleyen bir güvenlik özelliğidir. Bu özellik kötü amaçlı betiklerin yürütülmesini önlemeye yardımcı olur.

Bir Windows bilgisayarında yerel bilgisayar, geçerli kullanıcı veya belirli bir oturum için bir yürütme ilkesi ayarlayabilirsiniz. Bilgisayarlar ve kullanıcılar için yürütme ilkeleri ayarlamak için grup ilkesi ayarını da kullanabilirsiniz.

Yerel bilgisayar ve geçerli kullanıcı için yürütme ilkeleri PowerShell yapılandırma dosyalarında depolanır. PowerShell profilinizde yürütme ilkeleri ayarlamanız gerekmez. Belirli bir oturumun yürütme ilkesi yalnızca bellekte depolanır ve oturum kapatıldığında kaybolur.

Yürütme ilkesi bir güvenlik sınırı değildir, derinlemesine savunmadır. Örneğin, kullanıcılar komut dosyasını çalıştıramadıklarında komut satırına betik içeriğini yazarak bir ilkeyi kolayca atlayabilir. Bunun yerine, yürütme ilkesi kullanıcıların temel kurallar belirlemesine yardımcı olur ve istemeden ihlal etmelerini önler.

Güvenlik sınırları hakkında daha fazla bilgi için PowerShell güvenlik özelliklerininGüvenlik hizmeti ölçütleri bölümüne bakın.

Windows olmayan bilgisayarlarda varsayılan yürütme ilkesidir Unrestricted ve değiştirilemez. Set-ExecutionPolicy cmdlet'i kullanılabilir, ancak PowerShell desteklenmediğini belirten bir konsol iletisi görüntüler. Windows olmayan platformlarda döndürülse Get-ExecutionPolicyUnrestricted de, bu platformlar Windows Güvenliği Bölgelerini uygulamadığından davranış gerçekten eşleşirBypass.

PowerShell yürütme ilkeleri

Bu ilkelerin uygulanması yalnızca Windows platformlarında gerçekleşir. PowerShell yürütme ilkeleri aşağıdaki gibidir:

  • AllSigned

    • Betikler çalıştırılabilir.
    • Yerel bilgisayarda yazdığınız betikler de dahil olmak üzere tüm betiklerin ve yapılandırma dosyalarının güvenilir bir yayımcı tarafından imzalanması gerekir.
    • Henüz güvenilir ya da güvensiz olarak sınıflandırmadığınız yayımcılardan gelen betikleri çalıştırmadan önce sizi uyarır.
    • İmzalı ancak kötü amaçlı betikleri çalıştırmanın riskleri.
  • Bypass

    • Hiçbir şey engellenmez ve uyarı veya istem yoktur.
    • Bu yürütme ilkesi, PowerShell betiğinin daha büyük bir uygulamada yerleşik olduğu yapılandırmalar veya PowerShell'in kendi güvenlik modeline sahip bir programın temeli olduğu yapılandırmalar için tasarlanmıştır.
  • Default

    • Varsayılan yürütme ilkesini ayarlar.
    • Windows istemcileri ve sunucuları için RemoteSigned .
  • RemoteSigned

    • Windows bilgisayarlar için varsayılan yürütme ilkesi.
    • Betikler çalıştırılabilir.
    • e-posta ve anlık ileti programlarını içeren internetten indirilen betikler ve yapılandırma dosyaları üzerinde güvenilir bir yayımcıdan dijital imza gerektirir.
    • Yerel bilgisayarda yazılan ve İnternet'ten indirilmeyen betiklerde dijital imzalar gerektirmez.
    • İnternet'ten indirilen ve imzalanmamış betikleri çalıştırır; eğer betiklerin engeli, örneğin Unblock-File cmdlet'i kullanılarak kaldırılırsa.
    • İnternet dışındaki kaynaklardan imzalanmamış betikleri ve kötü amaçlı olabilecek imzalı betikleri çalıştırma riski.
  • Restricted

    • Tek tek komutlara izin verir, ancak betiklere izin vermez.
    • Biçimlendirme ve yapılandırma dosyaları (.ps1xml), modül betik dosyaları (.psm1) ve PowerShell profilleri (.ps1) dahil olmak üzere tüm betik dosyalarının çalıştırılmasını önler.
  • Undefined

    • Geçerli kapsamda ayarlanmış bir yürütme ilkesi yok.
    • Tüm kapsamlardaki yürütme ilkesi Undefinedise, Windows istemcileri için etkin yürütme ilkesi Restricted ve Windows Server için RemoteSigned olur.
  • Unrestricted

    • Windows olmayan bilgisayarlar için varsayılan yürütme ilkesi değiştirilemez.
    • İmzasız betikler çalıştırılabiliyor. Kötü amaçlı komut dosyası çalıştırma riski vardır.
    • Yerel intranet bölgesinden olmayan betikleri ve yapılandırma dosyalarını çalıştırmadan önce kullanıcıyı uyarır.

    Not

    Evrensel Adlandırma Kuralı (UNC) yollarını İnternet yollarından ayırmayan sistemlerde, UNC yolu tarafından tanımlanan betiklerin RemoteSigned yürütme ilkesiyle çalıştırılmasına izin verilmeyebilir.

Yürütme ilkesi kapsamı ve önceliği

Yalnızca belirli bir kapsamda etkili olan bir yürütme ilkesi ayarlayabilirsiniz. parametresi aşağıdaki değerleri kabul eder:

  • MachinePolicy - Bilgisayarın tüm kullanıcıları için Grup İlkesi tarafından ayarlanır
  • UserPolicy - Bilgisayarın geçerli kullanıcısı için Grup İlkesi tarafından ayarlanır
  • Process - Yalnızca geçerli PowerShell oturumunu etkiler
  • CurrentUser - Yalnızca geçerli kullanıcıyı etkiler
  • LocalMachine - Default bilgisayarın tüm kullanıcılarını etkileyen kapsam

Not

MachinePolicy ve UserPolicy Grup İlkeleri tarafından ayarlanır. Kapsamı bu değerlerden birine ayarlamaya çalışırsanız, PowerShell kapsamın bir Grup İlkesi tarafından ayarlandığını ve değiştirilemediğini belirten bir hata iletisi görüntüler.

Yürütme İlkesi Grup İlkesi tarafından tanımlanmamışsa, etkin yürütme ilkesi öncelik sırasına göre aşağıdaki gibi belirlenir:

  • Process - En yüksek öncelik. Process kapsamı yalnızca geçerli PowerShell oturumunu etkiler. Yürütme ilkesi, kayıt defteri yerine ortam değişkenine $Env:PSExecutionPolicyPreferencekaydedilir. PowerShell oturumu kapatıldığında değişken ve değer silinir.
  • CurrentUser - İkinci en yüksek öncelik. Ayar, kullanıcıya özgü powershell.config.json dosyada depolanır.
  • LocalMachine - En düşük öncelik. Ayar dosyada $PSHOME/powershell.config.json depolanır.

Dosya hakkında powershell.config.json daha fazla bilgi için bkz. about_PowerShell_Config.

PowerShell ile yürütme ilkesini yönetme

Geçerli PowerShell oturumu için geçerli yürütme ilkesini almak için Get-ExecutionPolicy cmdlet'ini kullanın.

Aşağıdaki komut etkin yürütme ilkesini alır:

Get-ExecutionPolicy

Geçerli oturumu etkileyen tüm yürütme ilkelerini almak ve bunları öncelik sırasına göre görüntülemek için:

Get-ExecutionPolicy -List

Sonuç aşağıdaki örnek çıktıya benzer:

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

Bu durumda, geçerli kullanıcının yürütme ilkesi yerel bilgisayar için ayarlanan yürütme ilkesinden öncelikli olduğundan, etkin yürütme ilkesi RemoteSigned.

Belirli bir kapsama yönelik yürütme ilkesini ayarlamak için ScopeGet-ExecutionPolicy parametresini kullanın.

Örneğin, aşağıdaki komut CurrentUser kapsamı için yürütme ilkesini alır:

Get-ExecutionPolicy -Scope CurrentUser

Yürütme ilkesini değiştirme

Windows bilgisayarınızda PowerShell yürütme ilkesini değiştirmek için Set-ExecutionPolicy cmdlet'ini kullanın. Değişiklik hemen geçerli olacak. PowerShell'i yeniden başlatmanız gerekmez.

LocalMachine veya CurrentUserkapsamlar için yürütme ilkesini ayarlarsanız, değişiklik yapılandırma dosyasına kaydedilir ve siz yeniden değiştirene kadar etkin kalır.

Process kapsamı için yürütme ilkesini ayarlarsanız, yapılandırma dosyasına kaydedilmez. Mevcut işlem ve alt işlemler kapatılana kadar yürütme ilkesi korunmaya devam edilir.

Not

Windows Vista'da ve Windows'un sonraki sürümlerinde, yerel bilgisayarın yürütme ilkesini değiştiren komutları çalıştırmak için LocalMachine kapsamını, PowerShell'i yönetici olarak çalıştır seçeneğiyle başlatın.

Yürütme ilkenizi değiştirmek için:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Örneğin:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Yürütme ilkesini belirli bir kapsamda ayarlamak için:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Örneğin:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Yürütme ilkesini değiştirme komutu başarılı olabilir ancak yine de etkin yürütme ilkesini değiştiremez.

Örneğin, yerel bilgisayar için yürütme ilkesini ayarlayan bir komut başarılı olabilir, ancak geçerli kullanıcının yürütme ilkesi tarafından geçersiz kılınabilir.

Yürütme ilkesini kaldırma

Belirli bir kapsamın yürütme ilkesini kaldırmak için yürütme ilkesini Undefinedolarak ayarlayın.

Örneğin, yerel bilgisayarın tüm kullanıcıları için yürütme ilkesini kaldırmak için:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Scopeçalışma ilkesini kaldırmak için:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Hiçbir kapsamda hiçbir yürütme ilkesi ayarlı değilse, etkin yürütme ilkesi windows istemcileri için varsayılan olan Restrictedolur.

Bir oturum için farklı bir ilke ayarlama

yeni bir PowerShell oturumu için yürütme ilkesi ayarlamak üzere pwsh.exe parametresini kullanabilirsiniz. İlke yalnızca geçerli oturumu ve alt oturumları etkiler.

Yeni bir oturumun yürütme ilkesini ayarlamak için PowerShell'i veya PowerShell'den gibi komut satırında başlatın ve yürütme ilkesini ayarlamak için executionpolicy parametresini kullanın.

Örneğin:

pwsh.exe -ExecutionPolicy AllSigned

Ayarladığınız yürütme ilkesi yapılandırma dosyasında depolanmaz. Bunun yerine, $Env:PSExecutionPolicyPreference ortam değişkeninde depolanır. İlkenin ayarlandığı oturumu kapattığınızda değişken silinir. Değişken değerini düzenleyerek ilkeyi değiştiremezsiniz.

Oturum sırasında, oturum için ayarlanan yürütme ilkesi, yerel bilgisayar veya geçerli kullanıcı için yapılandırma dosyasında ayarlanan bir yürütme ilkesinden önceliklidir. Ancak, grup ilkesi kullanılarak ayarlanan yürütme ilkesinden öncelikli değildir.

Yürütme ilkesini yönetmek için Grup İlkesi'ni kullanma

Kuruluşunuzdaki bilgisayarların yürütme ilkesini yönetmek için Betik Yürütme Grup İlkesini Aç ayarını kullanabilirsiniz. Grup İlkesi ayarı, Tüm kapsamlarda PowerShell'de ayarlanan yürütme ilkelerini geçersiz kılar.

Betik Yürütmeyi Aç ilke ayarları aşağıdaki gibidir:

  • Betik Yürütmeyi Etkinleştir'i devre dışı bırakırsanız, betikler çalışmaz. Bu, Restricted yürütme ilkesine eşdeğerdir.

  • Eğer Betik Yürütmeyi Açseçeneğini etkinleştirirseniz, bir yürütme ilkesi seçebilirsiniz. Grup İlkesi ayarları aşağıdaki yürütme ilkesi ayarlarına eşdeğerdir:

    Grup İlkesi Yürütme İlkesi
    Tüm betiklere izin ver Unrestricted
    Yerel betiklere ve uzaktan imzalı betiklere izin ver Uzaktan İmzalı
    Yalnızca imzalı komut dosyalarına izin ver AllSigned
  • Betik Yürütmeyi Aç yapılandırılmamışsa, hiçbir etkisi olmaz. PowerShell'de ayarlanan yürütme ilkesi etkilidir.

ve PowerShellCoreExecutionPolicy.admx dosyaları, PowerShellCoreExecutionPolicy.adm Aşağıdaki yolda Betik Yürütmeyi Aç ilkesini Grup İlkesi Düzenleyicisi'ndeki Bilgisayar Yapılandırması ve Kullanıcı Yapılandırması düğümlerine ekler:

Administrative Templates\Windows Components\Windows PowerShell

Bilgisayar Yapılandırması düğümünde ayarlanan ilkeler, Kullanıcı Yapılandırması düğümünde ayarlanan ilkelere göre önceliklidir.

Daha fazla bilgi için bkz. about_Group_Policy_Settings.

İmzalı ve imzasız betikleri yönetme

Windows'da Internet Explorer ve Microsoft Edge gibi programlar indirilen dosyalara alternatif bir veri akışı ekler. Bu, dosyayı "İnternet'ten geliyor" olarak işaretler. PowerShell yürütme ilkeniz RemoteSignedise PowerShell, e-posta ve anlık ileti programları içeren internetten indirilen imzasız betikleri çalıştırmaz.

Betiği imzalayabilir veya yürütme ilkesini değiştirmeden imzalanmamış bir betiği çalıştırmayı seçebilirsiniz.

PowerShell 3.0'dan başlayarak, cmdlet'in Get-Item parametresini kullanarak İnternet'ten indirildiği için engellenen dosyaları algılayabilirsiniz. Betikleri PowerShell'de çalıştırabilmek için engellemesini kaldırmak amacıyla Unblock-File cmdlet'ini kullanın.

Daha fazla bilgi için bkz. about_Signing, Get-Itemve Unblock-File.

Not

Dosyaları indirmenin diğer yöntemleri, dosyaları İnternet Bölgesi'nden geliyor olarak işaretlemeyebilir. Bazı örnekler şunlardır:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Windows Server Core ve Windows Nano Server'da yürütme ilkesi

PowerShell 6 belirli koşullar altında Windows Server Core veya Windows Nano Server üzerinde çalıştırıldığında, yürütme ilkeleri aşağıdaki hatayla başarısız olabilir:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell, bir komut dosyasının bölgesini doğrulamak için Windows Masaüstü Kabuk'taki (explorer.exe) API'leri kullanır. Windows Kabuğu Windows Server Core ve Windows Nano Sunucu'da kullanılamaz.

Windows Masaüstü Kabuğu kullanılamaz veya yanıt vermez durumda ise, bu hatayı herhangi bir Windows sisteminde alabilirsiniz. Örneğin, oturum açma sırasında Bir PowerShell oturum açma betiği, Windows Masaüstü hazır olmadan önce yürütülmeye başlayıp başarısızlığa neden olabilir.

ByPass veya AllSigned yürütme ilkesinin kullanılması, sorundan kaçınan bir Bölge denetimi gerektirmez.

Ayrıca bakınız