PowerShell Komut Dosyaları ile Daha Kolay Çalışmak için Windows'u Nasıl Yapılandırma
Windows ve PowerShell, son kullanıcıların günlük etkinlikleri sırasında yanlışlıkla komut dosyası başlatmasını engellemeye yönelik yerleşik güvenlik özelliklerine ve varsayılan yapılandırmalara sahiptir. Bununla birlikte, günlük aktiviteleriniz rutin olarak kendi PowerShell scriptlerinizi yazmayı ve çalıştırmayı içeriyorsa, bu bir faydadan çok rahatsız edici olabilir. Burada, güvenlikten tamamen ödün vermeden bu özellikler üzerinde nasıl çalışacağınızı göstereceğiz..
Windows ve PowerShell, komut dosyasının yürütülmesini nasıl ve neden önler?.
PowerShell, Windows sistemlerinde CMD ve toplu komut dosyalarını değiştirmek üzere tasarlanan komut kabuğu ve komut dosyası dilidir. Bu nedenle, bir PowerShell betiği, komut satırından el ile yapabileceğiniz her şeyi yapacak şekilde yapılandırılabilir. Bu, kullanıcı hesabınızdaki kısıtlamalara kadar, sisteminizde pratik olarak herhangi bir değişikliği mümkün kılmakla eşittir. Bu nedenle, bir PowerShell betiğini çift tıklayıp tam Yönetici ayrıcalıklarıyla çalıştırabiliyorsanız, bunun gibi basit bir astar, gününüzü gerçekten mahvedebilir:
Get-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction SilentlyContinue | Kaldırma Öğesi -Force -Recurse -ErrorAction SilentlyContinue
Yukarıdaki komutu çalıştırmayın!
Bu sadece dosya sisteminden geçer ve elinden geleni yapar. İlginç bir şekilde, bu durum sistemi düşündüğünüz kadar hızlı bir şekilde çalışamaz hale getirmeyebilir - yüksek bir oturumda çalışırken bile. Ancak birileri bu komut dosyasını çalıştırdıktan sonra sizi ararsa, aniden dosyalarını bulamadıkları veya bazı programları çalıştıramadıkları için, “tekrar açıp tekrar açma”, muhtemelen onlara söylenecekleri Windows Başlangıç Onarma'sına yönlendirir. sorunu çözmek için yapılabilecek hiçbir şey yok. Daha da kötüsü, dosya sistemlerine zarar veren bir komut dosyası almak yerine, bir keylogger veya uzaktan erişim hizmeti indiren ve yükleyen birini çalıştırması için kandırılmış olabilir. Daha sonra, Başlangıç Onarma ile ilgili sorular sormak yerine, polise banka dolandırıcılığı hakkında bazı sorular sormaya başlayabilirler.!
Şimdiye dek, son kullanıcıları neden onlardan korumak için belli şeylere ihtiyaç duyulduğunun açık olması gerekir. Ancak uzman kullanıcılar, sistem yöneticileri ve diğer meraklılar genellikle (istisnalar olsa da), bu tehditlerden biraz daha dikkatlidir, onları nasıl tespit edip kolayca önleyebileceklerini bilmek ve sadece işlerini yapmaya devam etmek istiyorlar. Bunu yapmak için birkaç yol bloğunda ya devre dışı bırakmak ya da çalışmak zorunda kalacaklar:
- PowerShell, varsayılan olarak harici komut dosyasının yürütülmesine izin vermiyor.
PowerShell'deki ExecutionPolicy ayarı, Windows'un tüm sürümlerinde dış komut dosyalarının varsayılan olarak yürütülmesini önler. Bazı Windows sürümlerinde, varsayılan kod çalıştırma işlemine izin vermez. Windows 7'de PowerShell Komut Dosyalarının Yürütülmesine İzin Verme bölümünde bu ayarın nasıl değiştirileceğini gösterdik, ancak burada birkaç düzeyde ele alacağız. - PowerShell, varsayılan olarak .PS1 dosya uzantısı ile ilişkili değildir.
Bunu başlangıçta PowerShell Geek School serimizde gündeme getirdik. Windows, PowerShell komut yorumlayıcısına göndermek yerine, onları Not Defteri'nde açmak için .PS1 dosyaları için varsayılan eylemi ayarlar. Bu, yalnızca çift tıklandıklarında doğrudan kötü amaçlı komut dosyalarının yürütülmesini doğrudan önlemek içindir.. - Bazı PowerShell scriptleri Yönetici izinleri olmadan çalışmaz.
Yönetici düzeyinde bir hesapla bile çalışsanız bile, belirli işlemleri gerçekleştirmek için Kullanıcı Hesabı Denetimi'ni (UAC) geçmeniz gerekir. Komut satırı araçları için bu az söylemek biraz hantal olabilir. UAC'yi devre dışı bırakmak istemiyoruz, ancak başa çıkmayı biraz daha kolaylaştırabildiğimizde hala güzel.
Bu aynı sorunlar, PowerShell Komut Dosyalarını Çalıştırmayı Kolaylaştırmak için Toplu Dosya Nasıl Kullanılır? Bölümünde geçici olarak dolaşmak için bir toplu iş dosyası yazarken size yol gösterir. Şimdi size sisteminizi nasıl daha uzun vadeli bir çözümle kuracağınızı göstereceğiz. Yalnızca sizin tarafınızdan kullanılmayan sistemlerde bu değişiklikleri genel olarak yapmamanız gerektiğini unutmayın; aksi takdirde, diğer kullanıcıları bu özelliklerin önlemeye yönelik aynı sorunlara maruz kalma riski daha yüksek olur.
.PS1 dosya ilişkilendirmesini değiştirme.
İlk ve belki de en önemlisi, etrafta dolaşmaktaki sıkıntı .PS1 dosyaları için varsayılan ilişkilendirmedir. Bu dosyaları PowerShell.exe dışındaki herhangi bir şeyle ilişkilendirmek, istenmeyen komut dosyalarının yanlışlıkla yürütülmesini önlemek için anlamlıdır. Ancak, PowerShell'in özellikle PowerShell komut dosyalarını düzenlemek için tasarlanmış olan bir Tümleşik Komut Dosyası Ortamı (ISE) ile geldiğini göz önünde bulundurarak, neden .PS1 dosyalarını varsayılan olarak Not Defteri'nde açmak isteyelim? Çift tıklatmayla çalıştırma işlevini etkinleştirmeye tam olarak geçmeye hazır olmasanız bile, muhtemelen bu ayarları değiştirmek isteyeceksiniz.
.PS1 dosya ilişkilendirmesini Varsayılan Programlar kontrol paneli ile istediğiniz programla değiştirebilirsiniz, ancak doğrudan Kayıt Defteri içine kazmak, dosyaların tam olarak nasıl açılacağı konusunda size biraz daha kontrol sağlar. Bu ayrıca, .PS1 dosyalarının bağlam menüsünde bulunan ek seçenekleri ayarlamanıza veya değiştirmenize de olanak sağlar. Bunu yapmadan önce kayıt defterini yedeklemeyi unutmayın!
PowerShell scriptlerinin nasıl açıldığını kontrol eden kayıt defteri ayarları aşağıdaki konumda saklanır:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Bu ayarları değiştirmeden önce keşfetmek için, o tuşa ve Regedit ile alt tuşlarına bir göz atın. Kabuk anahtarının sadece “Açık” olarak ayarlanan “(Varsayılan)” bir değeri olmalıdır. Bu, alt tuşlarda göreceğimiz dosyayı çift tıklamak için varsayılan eylemin bir göstergesidir..
Shell anahtarını genişletin ve üç alt anahtar göreceksiniz. Bunların her biri, PowerShell scriptlerine özgü olan gerçekleştirebileceğiniz bir işlemi temsil eder..
İçindeki değerleri keşfetmek için her bir anahtarı genişletebilirsiniz, ancak bunlar temel olarak aşağıdaki varsayılanlara eşittir:
- 0 - PowerShell ile çalıştırın. “PowerShell ile Çalıştır” aslında PowerShell scriptleri için zaten içerik menüsünde bulunan bir seçeneğin adıdır. Metin, diğerleri gibi anahtar adını kullanmak yerine başka bir yerden çekilir. Ve hala varsayılan çift tıklama işlemi değil.
- Düzenle - PowerShell ISE'de açın. Bu, Not Defteri'nden çok daha anlamlı olabilir, ancak varsayılan olarak yapmak için .PS1 dosyasını sağ tıklamanız gerekir..
- Aç - Not Defteri'nde açın. Bu anahtar adının, Shell anahtarının “(Varsayılan)” değerinde depolanan dize olduğunu unutmayın. Bu, dosyayı çift tıklatarak “Aç” anlamına gelir ve bu işlem normalde Not Defteri'ni kullanmaya ayarlanır..
Önceden oluşturulmuş komut dizelerine zaten sahip olmak istiyorsanız, Shell tuşundaki “(Varsayılan)” değerini, çift tıklamayla yapmak istediğiniz tuşla eşleşen tuşun adıyla eşleşecek şekilde değiştirebilirsiniz. Bu, Regedit'in içinden kolayca yapılabilir veya sisteminizi sizin için yapılandırabilecek yeniden kullanılabilir bir komut dosyası oluşturmaya başlamak için PowerShell ile kayıt defterini keşfetme konusundaki öğreticimizden öğrenilen dersleri (artı küçük bir PSDrive tweak) kullanabilirsiniz. Aşağıdaki komutlar, CMD'yi Yönetici olarak çalıştırmaya benzer şekilde, yükseltilmiş bir PowerShell oturumundan çalıştırılmalıdır.
Öncelikle, varsayılan olarak ayarlanmadığından bir PSDrive'ı HKEY_CLASSES_ROOT için yapılandırmak isteyeceksiniz. Bunun için komut:
Yeni-PSDrive HKCR Kayıt Defteri HKEY_CLASSES_ROOT
Şimdi HKEY_CLASSES_ROOT'taki kayıt defteri anahtarlarını ve değerlerini, normal HKCU ve HKLM PSDrives'deki gibi gezinebilir ve düzenleyebilirsiniz..
PowerShell scriptlerini doğrudan başlatmak üzere çift tıklamayı yapılandırmak için:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Kabuk '(Varsayılan)' 0
PowerShell ISE'de PowerShell scriptlerini açmak için çift tıklamayı yapılandırmak için:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Varsayılan) "Düzenle"
Varsayılan değeri geri yüklemek için (PowerShell scriptlerini Not Defteri'nde açmak üzere çift tıklayın):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Varsayılan) "Aç'
Bu, varsayılan çift tıklama eylemini değiştirmenin yalnızca temelleridir. PowerShell scriptlerinin bir sonraki bölümde PowerShell'de Explorer'dan açıldığında nasıl yönetileceğini kişiselleştirme konusunda daha ayrıntılı olarak ele alınacağız. Kapsam belirlemenin PSDrives'in oturumlar arasında devam etmesini önlediğini unutmayın. Bu nedenle, muhtemelen bu amaçla oluşturduğunuz herhangi bir yapılandırma komut dosyasının başlangıcına New-PSDrive çizgisini dahil etmek ya da PowerShell profilinize eklemek isteyeceksiniz. Aksi takdirde, bu şekilde değişiklik yapmayı denemeden önce bu ucu el ile çalıştırmanız gerekir..
PowerShell ExecutionPolicy ayarını değiştirme.
PowerShell'in Yürütme Polisi, kötü amaçlı komut dosyalarının yürütülmesine karşı başka bir koruma katmanıdır. Bunun için birden fazla seçenek ve birkaç farklı yol var. En çok güvenliğe kadar, mevcut seçenekler şunlardır:
- Sınırlı - Hiçbir komut dosyasının çalışmasına izin verilmez. (Çoğu sistem için varsayılan ayar.) Bu, profil komut dosyanızın çalışmasını bile engeller.
- AllSigned - Tüm komut dosyaları, kullanıcıya sorulmadan çalışması için güvenilir bir yayıncı tarafından dijital olarak imzalanmalıdır. Açıkça güvenilmeyen olarak tanımlanan yayıncılar tarafından imzalanan komut dosyaları veya dijital olarak hiç imzalanmayan komut dosyaları çalışmaz. PowerShell, henüz bir güvenilir veya güvenilmez olarak tanımlanmayan bir yayıncı tarafından imzalanmış bir komut dosyası imzalanmışsa kullanıcıdan onay ister. Profil komut dosyanızı dijital olarak imzalamadıysanız ve bu imzaya güvendiyseniz, çalıştırılamaz. Hangi yayıncılara güvendiğinize dikkat edin, çünkü yanlış olana güveniyorsanız kötü amaçlı komut dosyaları çalıştırmaya devam edebilirsiniz..
- RemoteSigned - İnternetten indirilen komut dosyaları için bu, “AllSigned” ile tamamen aynıdır. Ancak, yerel olarak oluşturulan veya Internet dışındaki kaynaklardan alınan komut dosyalarının herhangi bir onay istemi olmadan çalıştırılmasına izin verilir. Burada ayrıca, hangi dijital imzalara güvendiğinize dikkat etmeniz gerekir, ancak çalıştırmayı seçtiğiniz imzasız komut dosyalarına daha dikkat edin. Bu, dijital olarak imzalamak zorunda kalmadan çalışan bir profil komut dosyasına sahip olabileceğiniz en yüksek güvenlik seviyesidir..
- Sınırsız - Tüm komut dosyalarının çalışmasına izin verilir, ancak Internet'ten gelen komut dosyaları için bir onay istemi gerekecektir. Bu noktadan itibaren, güvenilmez komut dosyalarını çalıştırmaktan kaçınmak tamamen size bağlıdır..
- Bypass - Her şey bir uyarı olmadan çalışır. Buna dikkat et..
- Tanımsız - Geçerli kapsamda hiçbir politika tanımlanmadı. Bu, daha düşük kapsamlarda (aşağıda daha fazla ayrıntı) tanımlanan politikalara veya işletim sistemi varsayılanlarına geri dönmek için kullanılır.
Tanımsız tanımının önerdiği gibi, yukarıdaki politikalar bir veya daha fazla sayıda kapsamda ayarlanabilir. Tüm kapsamları ve geçerli yapılandırmalarını görmek için -List parametresiyle Get-ExecutionPolicy'yi kullanabilirsiniz..
Kapsamlar öncelik sırasına göre listelenmiştir, tanımlanmış en üst kapsam diğerlerini geçersiz kılar. Politika tanımlanmadıysa, sistem varsayılan ayarlarına geri döner (çoğu durumda bu Kısıtlanır).
- MachinePolicy, Bilgisayar düzeyinde geçerli olan bir Grup İlkesini temsil eder. Bu genellikle yalnızca bir etki alanında uygulanır, ancak yerel olarak da yapılabilir..
- UserPolicy, kullanıcı üzerinde geçerli olan bir Grup İlkesini temsil eder. Bu aynı zamanda sadece kurumsal ortamlarda da kullanılır..
- İşlem, bu PowerShell örneğine özgü bir kapsamdır. Bu kapsamdaki politikada yapılan değişiklikler diğer çalışan PowerShell işlemlerini etkilemeyecek ve bu oturum sona erdikten sonra etkisiz olacaktır. Bu, PowerShell başlatıldığında -ExecutionPolicy parametresi ile yapılandırılabilir veya oturumun içinden uygun Set-ExecutionPolicy sözdizimi ile ayarlanabilir.
- CurrentUser, yerel kayıt defterinde yapılandırılmış ve PowerShell'i başlatmak için kullanılan kullanıcı hesabına uygulanan bir kapsamdır. Bu kapsam Set-ExecutionPolicy ile değiştirilebilir.
- LocalMachine, yerel kayıt defterinde yapılandırılmış ve sistemdeki tüm kullanıcılara uygulanan bir kapsamdır. Set-ExecutionPolicy, -Scope parametresi olmadan çalıştırıldığında değiştirilen varsayılan kapsamdır. Sistemdeki tüm kullanıcılar için geçerli olduğundan, yalnızca yükseltilmiş bir oturumdan değiştirilebilir.
Bu makale temel olarak kullanılabilirliği kolaylaştırmak için güvenliği sağlamakla ilgili olduğundan, sadece alt üç kapsam hakkında endişeliyiz. MachinePolicy ve UserPolicy ayarları, yalnızca bu kadar basit bir şekilde atılmayan kısıtlayıcı bir politika uygulamak istiyorsanız gerçekten kullanışlıdır. Değişikliklerimizi Süreç düzeyinde veya altında tutarak, herhangi bir zamanda belirli bir duruma uygun bulduğumuz politika ayarını kolayca kullanabiliriz..
Güvenlik ve kullanılabilirlik arasındaki dengeyi korumak için, ekran görüntüsünde gösterilen politika muhtemelen en iyisidir. LocalMachine politikasını Kısıtlı olarak ayarlamak, komut dosyalarının sizden başkası tarafından çalıştırılmasını önler. Tabii ki, bu çok fazla çaba sarf etmeden ne yaptıklarını bilen kullanıcılar tarafından atlanabilir. Ancak, teknoloji meraklısı olmayan kullanıcıların PowerShell'de yanlışlıkla felaket bir şeyi tetiklemelerini önlemelidir. CurrentUser (yani: siz) Kısıtlanmamış olarak ayarlanması, komut dosyalarını komut satırından el ile çalıştırmanıza olanak tanır, ancak Internet'ten indirilen komut dosyaları için bir uyarı mektubu saklar. İşlem düzeyinde RemoteSigned ayarının PowerShell.exe kısayolunda veya (aşağıda yapacağımız gibi) PowerShell komut dosyalarının davranışını kontrol eden Kayıt Defteri değerlerinde yapılması gerekir. Bu, yazdığınız tüm betikler için çalıştırmanın kolay çift tıkla işlevselliğini sağlarken, harici kaynaklardan istenmeyen (muhtemelen kötü amaçlı) betiklerin yürütülmesine karşı daha güçlü bir engel oluşturur. Bunu burada yapmak istiyoruz, çünkü yanlışlıkla bir komut dosyasını çift tıklatmak, genellikle etkileşimli bir oturumdan el ile çağırmaktan çok daha kolaydır..
CurrentUser ve LocalMachine politikalarını yukarıdaki ekran görüntüsündeki gibi ayarlamak için, yükseltilmiş bir PowerShell oturumundan aşağıdaki komutları çalıştırın:
Set-ExecutionPolicy Kısıtlı Set-ExecutionPolicy Kısıtlanmamış -Scope CurrentUser
RemoteSigned politikasını Explorer'dan çalışan komut dosyalarına uygulamak için, daha önce baktığımız kayıt defteri anahtarlarından birinin içindeki bir değeri değiştirmemiz gerekir. Bu özellikle önemlidir, çünkü PowerShell veya Windows sürümünüze bağlı olarak, varsayılan konfigürasyon AllSigned dışındaki tüm ExecutionPolicy ayarlarını atlamak olabilir. Bilgisayarınız için geçerli yapılandırmanın ne olduğunu görmek için bu komutu çalıştırabilirsiniz (önce HKCR PSDrive'ın eşlendiğinden emin olun):
Get-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Komutu | Nesne Seç '(Varsayılan)'
Varsayılan yapılandırmanız muhtemelen aşağıdaki iki dizeden biri veya oldukça benzer bir şey olacaktır:
(PowerShell 2.0 ile Windows 7 SP1 x64'te görüldü)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-dosyası" "% 1"
(PowerShell 4.0 ile Windows 8.1 x64'te görüldü)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "eğer ((Get-ExecutionPolicy) -ne 'AllSigned') - Set-ExecutionPolicy -Scope İşlem Bypass; & '% 1 '"
İlki çok da kötü değil, çünkü hepsi mevcut olan ExecutionPolicy ayarlarının altındaki betiği çalıştırıyor. Kazaya daha meyilli bir eylem için daha sıkı kısıtlamalar uygulanarak daha iyi hale getirilebilirdi, ancak bunun başlangıçta yine de çift tıklamayla tetiklenmesi amaçlanmadı ve varsayılan politika genellikle sonuçta Kısıtlandı. Bununla birlikte, ikinci seçenek, uygulamada bulunma ihtimaliniz olan ExecutionPolicy'nin ne olursa olsun, hatta Sınırlı olsa bile tamamen atlanmasıdır. Baypas, İşlem kapsamında uygulanacağından, yalnızca komut dosyaları Explorer'dan çalıştırıldığında başlatılan oturumları etkiler. Ancak bu, politikanızın yasaklamasını beklediğiniz (ve isteyebileceğiniz) senaryoları başlatabileceğiniz anlamına gelir.
İşlem düzeyinde ExecutionPolicy'yi Explorer'dan başlatılan komut dosyaları için ayarlamak için yukarıdaki ekran görüntüsüne uygun olarak, sorguladığımız aynı kayıt defteri değerini değiştirmeniz gerekir. Regedit'te bu şekilde değiştirerek manuel olarak yapabilirsiniz:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-dosyası" "% 1"
İsterseniz ayarı PowerShell içinden de değiştirebilirsiniz. HKCR PSDrive eşlenmiş durumdayken, bunu yükseltilmiş bir oturumdan yapmayı unutmayın.
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Varsayılan) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -ExecutionPolicy "" RemoteSigned "" -dosyası "" % 1" '
PowerShell scriptlerini Yönetici olarak çalıştırın.
UAC'yi tamamen devre dışı bırakmak kötü bir fikir olduğu gibi, Yönetici erişimi gerektiren işlemleri yapmalarına gerçekten ihtiyaç duymadığınız sürece, komut dosyalarını veya yükseltilmiş ayrıcalıklara sahip programları çalıştırmak da kötü bir güvenlik uygulamasıdır. Bu nedenle, UAC istemini PowerShell komut dosyaları için varsayılan eylem haline getirmek önerilmez. Ancak, gerektiğinde komut dosyalarını yüksek oturumlarda kolayca çalıştırmamıza izin vermek için yeni bir bağlam menüsü seçeneği ekleyebiliriz. Bu, tüm dosyaların içerik menüsüne “Not Defteri ile Aç” eklemek için kullanılan yönteme benzer - ancak burada yalnızca PowerShell komut dosyalarını hedefleyeceğiz. Ayrıca PowerShell betiğimizi başlatmak için kayıt defteri korsanları yerine bir toplu iş dosyası kullandığımız önceki makalede kullanılan bazı teknikleri de taşıyacağız..
Bunu Regedit'te yapmak için şu adresteki Shell anahtarına geri dönün:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Orada, yeni bir alt anahtar oluşturun. “PowerShell (Yönetici) ile Çalıştır” olarak adlandırın. Bunun altında “Command” adında başka bir alt anahtar oluşturun. Ardından, Komut altındaki “(Varsayılan)” değerini şuna ayarlayın:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & İşlemi Başlat PowerShell.exe -ArjumentList '-ExecutionPolicy RemoteSigned -File \ "% 1 \"' -Verb RunAs "
PowerShell'de aynısını yapmak, bu sefer gerçekten üç satıra ihtiyaç duyacak. Her yeni anahtar için bir tane ve bir tane de Komut için “(Varsayılan)” değerini ayarlayın. Yüksekliği ve HKCR eşlemeyi unutma.
Yeni Öğe 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ PowerShell ile Çalıştır (Yönetici)' Yeni Öğe 'HKCR: \ Microsoft.PowerShellScript.1 \ Kabuk \ PowerShell (Yönetici) \ Komutu ile Çalıştır' Set-ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ PowerShell ile Çalıştırın (Yönetici) \ Komut "(Varsayılan)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Başlat-İşlem PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Fiil RunAs "'
Ayrıca, PowerShell'den geçirilen dize ile Kayıt Defteri'ne giren gerçek değer arasındaki farklara dikkat edin. Özellikle, komut ayrıştırma işleminde hatalardan kaçınmak için her şeyi tekli tırnaklara ve içsel tırnaklara ikiye katlamalıyız..
Şimdi PowerShell scriptleri için “PowerShell ile Çalıştır” (Yönetici) ”adında yeni bir içerik menüsü girişiniz olmalıdır..
Yeni seçenek arka arkaya iki PowerShell örneği oluşturacak. Birincisi, yeni oturum için yükseklik istemek için “-Verb RunAs” parametresiyle Başlatma İşlemini kullanan, ikincisi için yalnızca bir başlatıcı. Oradan, komut dosyanızın UAC istemini tıkladıktan sonra Yönetici ayrıcalıklarıyla çalıştırılabilmesi gerekir.
Son rötuşları.
Hayatı biraz daha kolaylaştıracak yardımcı olacak birkaç şey daha var. Birincisi, Not Defteri işlevinden tamamen kurtulmaya ne dersiniz? “(Varsayılan)” değerini, Düzen altındaki (aşağıdaki) Komut tuşundan, Aç altındaki aynı konuma kopyalamanız yeterlidir..
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"
Veya, bu PowerShell bitini kullanabilirsiniz (Admin & HKCR ile tabii ki):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(Varsayılan) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""% 1 "'
Bir başka küçük sıkıntı daha bir komut dosyası tamamlandığında konsolun kaybolma alışkanlığıdır. Bu olduğunda, komut dosyası çıktısını hatalar veya diğer yararlı bilgiler için inceleme şansımız yoktur. Elbette, her bir betiğinizin sonuna bir duraklama koyarak bununla ilgilenilebilir. Alternatif olarak, “-NoExit” parametresini içerecek şekilde Komut tuşlarımızın “(Varsayılan)” değerlerini değiştirebiliriz. Değiştirilen değerler aşağıdadır.
(Yönetici erişimi olmadan)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-dosyası" "% 1"
(Yönetici erişimiyle)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & İşlemi Başlat PowerShell.exe -ArjumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ "% 1 \"' - Fiil RunAs "
Ve elbette, size PowerShell komutlarındakileri de vereceğiz. Son hatırlatma: Yükseklik ve HKCR!
(Yönetici Olmayan)
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Varsayılan) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned "" -dosya ""% 1 "'
(Yönetici)
Set-ItemProperty 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ PowerShell ile Çalıştır (Yönetici) \ Komut "(Varsayılan)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Başlat İşlemi PowerShell.exe - Argüman Listesi "-NoExit -ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Fiil RunAs "'
Bir tur için alarak.
Bunu test etmek için bize yerinde ExecutionPolicy ayarlarını ve komut dosyasının Yönetici izinleriyle başlatılıp başlatılmadığını gösteren bir komut dosyası kullanacağız. Betik “MyScript.ps1” olarak adlandırılacak ve örnek sistemimizde “D: \ Script Lab” içerisinde saklanacaktır. Referans için kod aşağıdadır.
if (([[Security.Principal.WindowsPrincipal]] [Security.Principal.WindowsIdentity] :: GetCurrent ()).] IsInRole ([Security.Principal.WindowsBuiltInRole] "Yönetici")) Yazma Çıktısı Yönetici olarak çalışıyor! ' else Yazma Çıktısı 'Running Limited!' Get-ExecutionPolicy -List
“PowerShell ile Çalıştır” eylemini kullanarak:
UAC'ye tıkladıktan sonra “PowerShell ile Çalıştır (Yönetici)” eylemini kullanarak:
ExecutionPolicy'yi İşlem kapsamındaki eylemde göstermek için, Windows'un bu bit PowerShell koduyla İnternet'ten geldiğini düşünmesini sağlayabiliriz:
Ek İçeriği -Yol 'D: \ Script Lab \ MyScript.ps1' -Değer "[ZoneTransfer] 'nZoneId = 3" -Stream' Zone.Identifier '
Neyse ki, -NoExit'i etkinleştirdik. Aksi takdirde, bu hata sadece göz açıp kapardı ve biz de bilmezdik!
Zone.Identifier bununla kaldırılabilir:
İçeriği Temizle -Yol 'D: \ Komut Dosyası Laboratuvarı \ MyScript.ps1' -Stream 'Zone.Identifier'
Faydalı Referanslar:
- PowerShell scriptlerini bir toplu iş dosyasından çalıştırmak - Daniel Schroeder'in Programlama Blogu
- PowerShell'deki Yönetici izinlerini kontrol etme - Hey, Scripting Guy! Blog