"Bu Sistemde Komut Dosyalarının Çalıştırılması Devre Dışı" PowerShell nasıl düzeltilir
Bir PowerShell betiği çalıştırmaya çalışırken "Bu sistemde komut dosyalarının çalıştırılması devre dışı bırakıldığı için yüklenemiyor" hatasını mı alıyorsunuz? Daha sonra PowerShell'deki yürütme politikasını değiştirmemiz gerekiyor. Bilgisayarınızı kötü amaçlı komut dosyalarından korumak için PowerShell'in yürütme ilkesi varsayılan olarak kısıtlanmış olarak ayarlanmıştır.
Bu varsayılan ayar, bilgisayarınızda herhangi bir PowerShell betiğini, hatta kendi yazdığınız betikleri bile çalıştırmanızı engeller. Neyse ki PowerShell'de tek bir komutla politikayı kolayca değiştirebiliyoruz.
Bu yazımda bu sistemde script çalıştırırken devre dışı bırakılan hatayı nasıl hızlıca düzeltebileceğinizi, farklı politikaların neler olduğunu ve Grup Politikası olan tüm bilgisayarlarda bunu nasıl değiştirebileceğinizi anlatacağım.
Bu Sistemde komut dosyalarının çalıştırılması devre dışı düzeltildi
Hızlı bir düzeltmeyle başlayacağız. Aşağıdaki yöntem sorunu yalnızca geçici olarak çözer, böylece komut dosyanızı çalıştırıp devam edebilirsiniz. Daha sürdürülebilir bir çözüm için, bir sonraki bölüme doğru biraz aşağı kaydırın.
- PowerShell'i veya Windows Terminalini açın
-
Komut dosyanızı çalıştırmak için aşağıdaki komutu girin
powershell -ExecutionPolicy Bypass -Dosya script.ps1
Yukarıdaki yöntem yürütme politikasını yalnızca geçici olarak atlar. Bu, tek bir dosya için harika çalışır, ancak dosyayı her çalıştırmak istediğinizde yukarıdaki komutu kullanmanızı gerektirir. Daha sürdürülebilir bir çözüm, yürütme politikasını değiştirmektir.
Yürütme Politikasının Kalıcı Olarak Değiştirilmesi
PowerShell komut dosyalarıyla çok çalıştığınızda muhtemelen Yürütme İlkesini kalıcı olarak değiştirmek istersiniz. Ancak politikanın nasıl değiştirileceğine bakmadan önce amacını ve mevcut farklı politikaları açıklayalım.
Yürütme ilkesi, kullanıcıların PowerShell betiklerini yürütmesini kısıtlayacak bir güvenlik sistemi olarak tasarlanmamıştır. Her kullanıcı, mevcut PowerShell oturumunda politikayı kolayca atlayabilir veya hatta betiğin içeriğini kopyalayıp doğrudan konsola yapıştırabilir. Peki o zaman politikanın amacı nedir? PowerShell komut dosyalarının yanlışlıkla çalıştırılmasını önlemek için tasarlanmıştır.
Politikayı değiştirirken seçebileceğimiz beş seçenek vardır:
- Restricted
Varsayılan seçenek - Herhangi bir PowerShell betiğinin çalıştırılmasına izin vermez
- Unrestricted
Herhangi bir komut dosyasını çalıştırabilir, indirilen komut dosyaları için uyarı gösterir
- RemoteSigned
İndirilen komut dosyaları için dijital imza gerektirir. Yerel olarak yazılmış komut dosyalarını
çalıştırabilirsiniz. İndirilen komut dosyalarının engelini kaldırarak
imza olmadan çalıştırabilirsiniz- ByPass
-
Tüm komut dosyalarını çalıştırabilirsiniz ve hiçbir uyarı görüntülenmez
- AllSigned
Yalnızca güvenilir yayıncılardan gelen imzalı komut dosyalarını çalıştırabilirsiniz
Çoğu kişi politikayı sınırsız olarak ayarlama eğilimindedir; bu, herhangi bir PowerShell betiğini çalıştırmanıza olanak tanır. Ancak daha iyi bir seçenek RemoteSigned ilkesini kullanmaktır. Bu şekilde, yerel olarak yazılmış herhangi bir komut dosyasını çalıştırabilirsiniz, ancak önce indirilen tüm komut dosyalarının engellemesini kaldırmanız gerekir. Ekstra işlem, kullanıcıların yanlışlıkla kötü amaçlı PowerShell komut dosyalarını sistemlerine indirip çalıştırmalarını önler.
Tüm kullanıcılar ve Mevcut kullanıcı karşılaştırması
Politikayı değiştirirken değişikliğin kapsamını da belirleyebiliriz. Politika için aşağıdaki kapsamlar mevcuttur:
- CurrentUser
Politika yalnızca şu anda oturum açmış olan kullanıcı için ayarlandı
- LocalMachine
Makinedeki tüm kullanıcılar için politika değiştirildi
- Process
Politika yalnızca mevcut PowerShell oturumu için değiştirildi
Geçerli Kullanıcı için Yürütme Politikasını Ayarlayın
Dolayısıyla en yaygın senaryo, geçerli kullanıcı için PowerShell Yürütme ilkesini değiştirmek istemenizdir. Bu, oturum açmış kullanıcı için "bu sistemde komut dosyalarının çalıştırılması devre dışı" hatasını çözecektir. Politikayı RemoteSigned olarak ayarlayacağız; bu, kullanıcının indirilen komut dosyaları için yine de fazladan bir adım gerçekleştirmesi gerektiği anlamına gelir.
- PowerShell'i açın
- Aşağıdaki komutu girin ve enter'a basın
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser- İsteğe bağlı -
Get-ExecutionPolicykomutuyla ayarı doğrulayın
Artık yerel olarak oluşturulmuş herhangi bir PowerShell betiğini bu sistemde komut dosyalarının çalıştırılması devre dışı bırakıldı hatası olmadan çalıştırabilirsiniz.
İndirilen bir PowerShell betiğini RemoteSigned yürütme ilkesiyle çalıştırmayı denediğinizde, dosya yüklenemiyor hatasını alırsınız. PowerShell betiği dijital olarak imzalanmamış:
Bunu çözmek için öncelikle dosyanın engelini kaldırmanız gerekir. Bunu yapmak için elbette bir PowerShell cmdlet'i olan Unblock-File'ı kullanabiliriz. Cmdlet'i ve ardından dosya adını/yolunu yazmanız yeterlidir:
Unblock-File -path .\CreateTestFiles.ps1Tüm Kullanıcılar için Yürütme Politikasını Ayarlayın
Politikayı bilgisayardaki tüm kullanıcılar için de değiştirebiliriz. Bunu yapmak için yükseltilmiş izinlere (Yönetici izni) sahip olmanız gerekir.
- Başlat'a sağ tıklayın veya Windows tuşu + X'e basın
- Windows PowerShell (Yönetici) veya Windows Terminali (Yönetici) seçeneğini seçin
- Aşağıdaki komutu yazın:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachineSonuçları, her kapsam için politikayı gösteren Get-ExecutionPolicy -List cmdlet'i ile doğrulayabiliriz. CurrentUser politikasının LocalMachine politikasına göre öncelikli olduğunu bilmekte fayda var. Dolayısıyla CurrentUser politikasını kısıtlı ve LocalMachine'ı RemoteSigned olarak ayarladığınızda, CurrentUser kapsamında ayarlanan politika LocalMachine politikasını geçersiz kıldığından kullanıcı yine de herhangi bir PowerShell betiğini çalıştıramaz.
Politikayı yalnızca Mevcut Oturumlar için değiştirin
Diğer bir seçenek de politikayı yalnızca geçerli PowerShell oturumu için değiştirmektir. Bu yöntem, birkaç PowerShell betiği çalıştırmanız gerektiğinde ancak politikayı kalıcı olarak değiştirmek istemediğinizde kullanışlıdır. Her komut dosyası için Baypas seçeneğini kullanabilirsiniz, ancak bu nedenle kapsamı yalnızca geçerli PowerShell oturumu için değiştirmek de mümkündür. Bunun için İşlem kapsamını kullanın:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope ProcessGPO ile PowerShell Yürütme ilkesini ayarlama
Birden fazla bilgisayarda politikayı değiştirmeniz gerektiğinde, bunun için bir Grup İlkesi kullanmak iyi bir fikirdir. Grup İlkeleri, bir etki alanının üyesi olan birden çok bilgisayardaki Windows ayarlarını değiştirmenize olanak tanır. Politikanın bir diğer avantajı da bilgisayarda ayarın üzerine yazılamamasıdır.
- Grup İlkesi Yönetimi Düzenleyicisi'ni açın ve yeni bir politika oluşturun.
- Bilgisayar Yapılandırmasını Genişlet
- İlkeler > Yönetim Şablonları > Windows Bileşenleri > Windows PowerShell'e gidin
- Komut Dosyası Yürütmeyi Aç ayarını açın
- Ayarı Etkin olarak değiştirin
- Yürütme Politikası Yerel komut dosyalarına ve uzaktan imzalı komut dosyalarına izin ver'i seçin. Bu, daha önce ayarladığımız RemoteSigned ile aynıdır.
Ayarı az önce uyguladığımız kuruluş biriminin üyesi olan istemcilerden birinde ayarı doğrulayabiliriz. Öncelikle GPUpdate komutunu kullanarak bilgisayarda en son politikanın uygulandığından emin olun. İsteğe bağlı olarak, politikayı doğrulamak için RSOP komutunu kullanabilir veya yalnızca yürütme politikasının şu komutla ayarlanıp ayarlanmadığını kontrol edebilirsiniz:
Get-ExecutionPolicy -list
# Result
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy RemoteSigned
Process Undefined
CurrentUser Undefined
LocalMachine UndefinedBelirtildiği gibi politikaların avantajı, kullanıcıların artık politikayı değiştirememesidir. set-executionpolicy cmdlet'ini kullandığınızda, politikanın değiştirildiğini ancak ayarın daha spesifik bir kapsamda tanımlanan bir politika tarafından geçersiz kılındığını bildiren bir hata alırsınız:
Kapanış
PowerShell'de Yürütme İlkesini ayarlamanın en iyi yolu Grup İlkesini kullanmaktır. Bu şekilde etki alanınızdaki tüm mevcut ve yeni makineler doğru politikayla yapılandırılabilir. Elbette BT departmanı için farklı bir politika oluşturabilirsiniz.
Umarım bu makale "bu sistemde komut dosyalarının çalıştırılması devre dışı bırakıldığı için yüklenemiyor" hatasını çözmenize yardımcı olmuştur. Herhangi bir sorunuz varsa aşağıya bir yorum bırakmanız yeterli. PowerShell hakkında daha fazla bilgi edinmek istiyorsanız bu başlangıç kılavuzunu okuduğunuzdan emin olun.








