Powershell ile ExecutionPolicy Ayarları

Salih Aker
3 min readApr 9, 2018

--

Windowsun güvenlik gerekçesi nedeniyle dış kaynaklardan indirilmiş veya güvenilir olmayan powershell dosyalarına çalıştırma izni vermemektedir. Bu ayarları kendimiz ayarları değiştirebiliriz bize yardımcı olucak komut “Set-ExecutionPolicy” dir. Varsayılan ExecutionPolicy i görüntülemek içinse “Get-ExecutionPolicy” komutu kullanıyoruz.

Varsayılanda “ExecutionPolicy”miz Restricted(kısıtlı) gelmektedir. Kısıtlıdan kasti dış kaynaktan indirdiğiniz ve ya güvenilir bir yayıncı tarafından yayınlanmayan ve ya domain ortamından kendi bilgisayarınıza eklediğiniz Powershell Scriptlerini çalıştıramazsınız. “ExecutionPolicy”de 6 Farklı parametre vardır. Bunları tek tek inceliyelim ve daha sonrasında pişirmek için mutfağımıza geçelim.

  • Restricted → Varsayılan olarak gelen parametredir. Internetten indirimiş hiç bir Powershell dosyasını çalıştırmaz.
  • Allsigned → Güvenilir yayıncı tarafından imzalanmış Powershell Scriptleri çalıştırmanıza izin verir sadece buna localde yazmış olduğunuz Powershell scriptlerde dahildir.
  • RemoteSigned → Internetten indirilen Powershell Scriptlerin güvenilir bir yayıncı tarafından imzalanmasını gerekirtirir.
  • Unrestricted → Bütün Powershell Script dosyalarını çalıştırır. İnternetten indirdiğiniz bir Powershell Scriptin kendi bilgisayarınızda çalıştırdığınızda bir onay ister.
  • Bypass → Bütün Powershell Script dosyalarını çalıştırır. Unrestricted dan farkı hiç bir şekilde onay istemez.
  • Undefined → Geçerli ExecutionPolicy i kaldırır. Bu parametre GPO tarafından ayarlanmış ExecutionPolicy e müdahele edemez.

Default olarak “Restricted”in geldiğini söylemiştik uygulamalı olarak bunu bi kontrol etmekte fayda var. Komutumuz Get-ExecutionPolicy .

Bu parameteriyi değiştirmek için Set-ExecutionPolicy -ExecutionPolicy [Restricted,Allsigned,RemoteSigned,Unrestricted,Bypass,Undefined] olarak kullaniyoruz. “-ExecutionPolicy” girmeyi unutmayın. Ben burda güvenlik açısından güvenilir bir yayıncı tarafından imzalanmış dosyaların çalıştırılmasına izin vericem. O yüzden “RemoteSigned” kullanıcam ve daha sonra “Get-ExecutionPolicy” ile tekrar kontrol edicem.

Bir bu işin içine belli kamsaplar giriyor. Powershell Process, MachinePolicy, UserPolicy, CurrentUser ve Local Machine. “Machine Policy ve User Policy” GPO tarafından uygulanan ExecutionPolicylerdir Domain admin yetkisine ihtiyaç duyar. Biliyorsunuz ki Domain ortamımızda PC ve Kullanıcılar mevcut. Bunlar için GPO da farklı farklı ayarlamalar yapıyorduk.

  • MachinePolicy → MachinePolicy kullanıldığında bu kapsam o makina üzerindeki bütün kullanıcılar için geçerlidir. Domain ortamınızdaki bu bilgisayara giriş yapacak bütün kullanıcılar için geçerlidir. Bunu GPO(Group Policy) üzerinden yapılandırmalıyız.
  • UserPolicy → UserPolicy kullanıldığında bu kapsam sadece belirlenen kullanıcı için geçerlidir. Bunuda yine GPO üzerinden yapılandırmalıyız aksi takdirde çalışmıcaktır.
  • Process → Bu kapsam ise sadece o anki çalışan Powershell process için geçerlidir. Bu kapsam ayarlandığında Powershell in oturum ortamında saklanır powershell oturumu kapandığında bu policy silinir.
  • CurrentUser → CurrentUser o an ki kullanıcı için geçerlidir. Ayarlanan ExecutionPolicy windows registry de “ HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell” sekmesinde konumlanır.
  • LocalMachine → LocalMachine kullanıldığında bu kapsam o makina üzerindeki bütün kullanıcılar için geçerlidir. MachinePolicy den farklı LOCAL olarak baz alınmasıdır GPO ile alakası yoktur. “ HKEY_CURRENT_MACHINE” sekmesinde konumlanır.

Get-ExecutionPolicy -List | ft -AutoSize” komutu ile bütün Scope(Kapsam)lar için ExecutionPolicyleri çıkartıyoruz. Daha sonrasında “Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted -Force” komutu ile devam ediyoruz. “-Scope” parametresi ile ExecutionPolicy değerlerini değiştirmek istediğimi “CurrentUser” değerini seçiyoruz. “-ExecutionPolicy” paremetresi ile “Restricted” değerini atıyoruz. “-Force” parametresi ise tüm istemeleri bastırır örnek olarak “Bu komutu çalıştırmak için emin misiniz?” gibi düşünebilirsiniz -Force kullanırsak bunu bize göstermeden direk işleme başlıcaktır.

“MachinePolicy & UserPolicy” Powershell üzerinden yapamıyoruz. Yukarıdada belirttiğim gibi GPO üzerinden yapılandırılması gerekiyor. Denemek için aşağıdaki resmi inceleyebilirsiniz. Komutun neden başarıyla sonuçlanmadığı açıklama kısmında gayet açık turuncu daire içine aldım. “Must be set through Group Policy” Group Policy vasıtası ile ayarlanmak zorundadır diyor. Zaman bulursam eğer başka bir makalede bunu da ele alacağım şimdiden okuduğunuz için teşekkürler.

--

--