Cara Mengkonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah
Windows dan PowerShell memiliki fitur keamanan bawaan dan konfigurasi default yang dimaksudkan untuk mencegah pengguna akhir secara tidak sengaja meluncurkan skrip dalam kegiatan sehari-hari mereka. Namun, jika aktivitas sehari-hari Anda secara rutin melibatkan menulis dan menjalankan skrip PowerShell Anda sendiri, ini bisa lebih mengganggu daripada manfaatnya. Di sini, kami akan menunjukkan cara mengatasi fitur-fitur ini tanpa sepenuhnya mengganggu keamanan.
Bagaimana dan mengapa Windows & PowerShell mencegah eksekusi skrip.
PowerShell efektif shell perintah dan bahasa scripting yang dimaksudkan untuk menggantikan CMD dan skrip batch pada sistem Windows. Dengan demikian, skrip PowerShell dapat dikonfigurasi untuk melakukan apa pun yang dapat Anda lakukan secara manual dari baris perintah. Itu sama dengan membuat hampir semua perubahan yang mungkin pada sistem Anda, hingga pembatasan yang berlaku pada akun pengguna Anda. Jadi, jika Anda bisa mengklik dua kali skrip PowerShell dan menjalankannya dengan hak istimewa Administrator penuh, satu baris sederhana seperti ini benar-benar dapat merusak hari Anda:
Dapatkan-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction SilentlyContinue | Remove-Item-Force -Recurse -ErrorAction Diam-diam Lanjutkan
JANGAN jalankan perintah di atas!
Itu hanya melalui sistem file dan menghapus apa pun yang bisa. Menariknya, ini mungkin tidak membuat sistem tidak bisa beroperasi secepat yang Anda kira - bahkan ketika dijalankan dari sesi yang ditinggikan. Tetapi jika seseorang memanggil Anda setelah menjalankan skrip ini, karena mereka tiba-tiba tidak dapat menemukan file mereka atau menjalankan beberapa program, "mematikan dan menghidupkan lagi" mungkin hanya akan mengarahkan mereka ke Windows Startup Repair di mana mereka akan diberitahu ada tidak ada yang bisa dilakukan untuk memperbaiki masalah. Yang lebih buruk adalah, alih-alih mendapatkan skrip yang hanya merusak sistem file mereka, teman Anda mungkin tertipu untuk menjalankan skrip yang mengunduh dan menginstal layanan akses jarak jauh atau keylogger. Kemudian, alih-alih mengajukan pertanyaan kepada Anda tentang Perbaikan Startup, mereka mungkin malah mengajukan beberapa pertanyaan kepada polisi tentang penipuan bank!
Sekarang sudah jelas mengapa hal-hal tertentu diperlukan untuk melindungi pengguna akhir dari diri mereka sendiri, begitulah. Tetapi pengguna listrik, administrator sistem, dan geek lainnya umumnya (meskipun ada pengecualian) sedikit lebih waspada terhadap ancaman ini, mengetahui cara mengenali dan menghindari mereka dengan mudah, dan hanya ingin melanjutkan pekerjaan mereka. Untuk melakukan ini, mereka harus menonaktifkan atau bekerja di sekitar beberapa blok jalan:
- PowerShell tidak mengizinkan eksekusi skrip eksternal secara default.
Pengaturan ExecutionPolicy di PowerShell mencegah eksekusi skrip eksternal secara default di semua versi Windows. Di beberapa versi Windows, standarnya tidak memungkinkan eksekusi skrip sama sekali. Kami menunjukkan kepada Anda cara mengubah pengaturan ini di Cara Mengijinkan Eksekusi Script PowerShell pada Windows 7, tetapi kami akan membahasnya pada beberapa level di sini juga. - PowerShell tidak terkait dengan ekstensi file .PS1 secara default.
Kami membawa ini pada awalnya di seri PowerShell Geek School kami. Windows menetapkan tindakan default untuk file .PS1 untuk membukanya di Notepad, alih-alih mengirimnya ke penerjemah perintah PowerShell. Ini untuk secara langsung mencegah eksekusi skrip berbahaya saat itu hanya diklik dua kali. - Beberapa skrip PowerShell tidak akan berfungsi tanpa izin Administrator.
Bahkan berjalan dengan akun tingkat Administrator, Anda masih harus melewati Kontrol Akun Pengguna (UAC) untuk melakukan tindakan tertentu. Untuk alat-alat command-line, ini bisa sedikit rumit untuk sedikitnya. Kami tidak ingin menonaktifkan UAC, tetapi tetap menyenangkan ketika kami dapat membuatnya sedikit lebih mudah untuk ditangani.
Masalah-masalah yang sama ini diangkat dalam Cara Menggunakan File Batch untuk Membuat Skrip PowerShell Lebih Mudah Dijalankan, tempat kami memandu Anda menulis file batch untuk sementara waktu menyiasatinya. Sekarang, kami akan menunjukkan kepada Anda bagaimana mengatur sistem Anda dengan solusi jangka panjang. Ingatlah bahwa Anda seharusnya tidak secara umum melakukan perubahan ini pada sistem yang tidak secara eksklusif digunakan oleh Anda - jika tidak, Anda membuat pengguna lain berisiko lebih tinggi mengalami masalah yang sama dengan fitur yang dimaksudkan untuk mencegah.
Mengubah asosiasi file .PS1.
Gangguan pertama, dan mungkin yang terpenting, untuk berkeliling adalah asosiasi default untuk file .PS1. Mengaitkan file-file ini dengan selain PowerShell.exe masuk akal untuk mencegah eksekusi skrip yang tidak diinginkan secara tidak sengaja. Tetapi, mengingat bahwa PowerShell hadir dengan Integrated Scripting Environment (ISE) yang dirancang khusus untuk mengedit skrip PowerShell, mengapa kita ingin membuka file .PS1 di Notepad secara default? Bahkan jika Anda tidak siap untuk sepenuhnya beralih ke mengaktifkan fungsionalitas klik dua kali untuk menjalankan, Anda mungkin ingin mengubah pengaturan ini.
Anda bisa mengubah asosiasi file .PS1 ke program apa pun yang Anda inginkan dengan panel kontrol Program Default, tetapi menggali langsung ke dalam Registri akan memberi Anda sedikit lebih banyak kontrol atas bagaimana file akan dibuka. Ini juga memungkinkan Anda mengatur atau mengubah opsi tambahan yang tersedia di menu konteks untuk file .PS1. Jangan lupa untuk membuat cadangan registri sebelum Anda melakukan ini!
Pengaturan registri yang mengontrol bagaimana skrip PowerShell dibuka disimpan di lokasi berikut:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Untuk menjelajahi pengaturan ini sebelum kita mulai mengubahnya, lihat kunci itu dan sub-kunci dengan Regedit. Kunci Shell seharusnya hanya memiliki satu nilai, "(Default)", yang diatur ke "Open". Ini adalah penunjuk ke tindakan default untuk mengklik dua kali file, yang akan kita lihat di sub-tombol.
Luaskan kunci Shell, dan Anda akan melihat tiga sub-kunci. Masing-masing mewakili tindakan yang dapat Anda lakukan yang khusus untuk skrip PowerShell.
Anda dapat memperluas setiap kunci untuk menjelajahi nilai-nilai di dalamnya, tetapi pada dasarnya menyamakan dengan default berikut:
- 0 - Jalankan dengan PowerShell. "Jalankan dengan PowerShell" sebenarnya adalah nama opsi yang sudah ada dalam menu konteks untuk skrip PowerShell. Teks hanya ditarik dari lokasi lain daripada menggunakan nama kunci seperti yang lain. Dan itu masih bukan aksi klik ganda default.
- Edit - Buka di PowerShell ISE. Ini jauh lebih masuk akal daripada Notepad, tetapi Anda masih harus mengklik kanan file .PS1 untuk melakukannya secara default.
- Buka - Buka di Notepad. Perhatikan bahwa nama kunci ini juga merupakan string yang disimpan dalam nilai "(Default)" dari kunci Shell. Ini berarti mengklik dua kali file tersebut akan "Buka", dan tindakan itu biasanya diatur untuk menggunakan Notepad.
Jika Anda ingin tetap menggunakan string perintah yang sudah ada sebelumnya, Anda bisa mengubah nilai “(Default)” di kunci Shell untuk mencocokkan nama kunci yang cocok dengan apa yang Anda ingin klik dua kali untuk dilakukan. Ini dapat dengan mudah dilakukan dari dalam Regedit, atau Anda dapat menggunakan pelajaran dari tutorial kami tentang menjelajahi registri dengan PowerShell (plus tweak PSDrive kecil) untuk mulai membangun skrip yang dapat digunakan kembali yang dapat mengkonfigurasi sistem Anda untuk Anda. Perintah di bawah ini harus dijalankan dari sesi PowerShell yang ditinggikan, mirip dengan menjalankan CMD sebagai Administrator.
Pertama, Anda ingin mengonfigurasi PSDrive untuk HKEY_CLASSES_ROOT karena ini tidak disetel secara default. Perintah untuk ini adalah:
Registry HKCR Baru-PSDrive HKEY_CLASSES_ROOT
Sekarang Anda dapat menavigasi dan mengedit kunci registri dan nilai-nilai di HKEY_CLASSES_ROOT seperti yang Anda lakukan di HKCU dan HKLM PSDrives biasa.
Untuk mengkonfigurasi mengklik dua kali untuk meluncurkan skrip PowerShell secara langsung:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default)' 0
Untuk mengkonfigurasi mengklik dua kali untuk membuka skrip PowerShell di PowerShell ISE:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default) "Edit'
Untuk mengembalikan nilai default (atur klik dua kali untuk membuka skrip PowerShell di Notepad):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Default) "Open'
Itu hanya dasar-dasar untuk mengubah tindakan klik ganda default. Kami akan membahas lebih rinci tentang menyesuaikan cara skrip PowerShell ditangani ketika dibuka di PowerShell dari Explorer di bagian selanjutnya. Ingatlah bahwa pelingkupan mencegah PSDrives bertahan di seluruh sesi. Jadi, Anda mungkin ingin menyertakan baris New-PSDrive di awal skrip konfigurasi apa pun yang Anda buat untuk tujuan ini, atau menambahkannya ke profil PowerShell Anda. Jika tidak, Anda harus menjalankan bit itu secara manual sebelum mencoba membuat perubahan dengan cara ini.
Mengubah pengaturan PowerShell ExecutionPolicy.
PowerShell's ExecutionPolicy adalah lapisan perlindungan lain terhadap eksekusi skrip berbahaya. Ada beberapa opsi untuk ini, dan beberapa cara berbeda dapat diatur. Dari yang paling tidak aman, opsi yang tersedia adalah:
- Dibatasi - Tidak ada skrip yang diizinkan dijalankan. (Pengaturan default untuk sebagian besar sistem.) Ini bahkan akan mencegah skrip profil Anda berjalan.
- AllSigned - Semua skrip harus ditandatangani secara digital oleh penerbit tepercaya untuk dijalankan tanpa meminta pengguna. Skrip yang ditandatangani oleh penerbit secara eksplisit didefinisikan sebagai tidak tepercaya, atau skrip yang tidak ditandatangani secara digital sama sekali, tidak akan berjalan. PowerShell akan meminta pengguna untuk konfirmasi jika skrip ditandatangani oleh penerbit yang belum didefinisikan tepercaya atau tidak tepercaya. Jika Anda belum menandatangani skrip profil Anda secara digital, dan membangun kepercayaan pada tanda tangan itu, itu tidak akan dapat berjalan. Hati-hati penerbit mana yang Anda percayai, karena Anda masih bisa menjalankan skrip berbahaya jika Anda mempercayai yang salah.
- RemoteSigned - Untuk skrip yang diunduh dari Internet, ini secara efektif sama dengan "AllSigned". Namun, skrip yang dibuat secara lokal atau diimpor dari sumber selain Internet diizinkan untuk berjalan tanpa konfirmasi konfirmasi. Di sini, Anda juga harus berhati-hati dengan tanda tangan digital mana yang Anda percayai tetapi bahkan lebih berhati-hati terhadap skrip yang tidak ditandatangani yang Anda pilih untuk dijalankan. Ini adalah tingkat keamanan tertinggi di mana Anda dapat memiliki skrip profil yang berfungsi tanpa harus menandatanganinya secara digital.
- Tidak Terbatas - Semua skrip diizinkan untuk dijalankan, tetapi konfirmasi konfirmasi akan diperlukan untuk skrip dari Internet. Mulai saat ini, sepenuhnya tergantung pada Anda untuk menghindari menjalankan skrip yang tidak dapat dipercaya.
- Bypass - Semuanya berjalan tanpa peringatan. Hati-hati dengan yang ini.
- Tidak terdefinisi - Tidak ada kebijakan yang didefinisikan dalam ruang lingkup saat ini. Ini digunakan untuk memungkinkan kembali ke kebijakan yang ditentukan dalam cakupan yang lebih rendah (lebih detail di bawah) atau ke default OS.
Seperti yang disarankan oleh uraian Undefined, kebijakan di atas dapat ditetapkan dalam satu atau beberapa cakupan. Anda dapat menggunakan Get-ExecutionPolicy, dengan parameter -List, untuk melihat semua cakupan dan konfigurasi mereka saat ini.
Lingkup terdaftar dalam urutan prioritas, dengan cakupan yang ditentukan paling atas mengesampingkan semua yang lain. Jika tidak ada kebijakan yang ditetapkan, sistem akan kembali ke pengaturan default (dalam kebanyakan kasus, ini Terbatas).
- MachinePolicy mewakili Kebijakan Grup yang berlaku di tingkat Komputer. Ini umumnya diterapkan hanya dalam domain, tetapi dapat dilakukan secara lokal juga.
- UserPolicy mewakili Kebijakan Grup yang berlaku pada pengguna. Ini juga biasanya hanya digunakan di lingkungan perusahaan.
- Proses adalah ruang lingkup khusus untuk instance PowerShell ini. Perubahan kebijakan dalam lingkup ini tidak akan memengaruhi proses PowerShell lain yang sedang berjalan, dan tidak akan efektif setelah sesi ini dihentikan. Ini dapat dikonfigurasikan oleh parameter -ExecutionPolicy saat PowerShell diluncurkan, atau dapat diatur dengan sintaksis Set-ExecutionPolicy yang tepat dari dalam sesi.
- CurrentUser adalah ruang lingkup yang dikonfigurasi dalam registri lokal dan berlaku untuk akun pengguna yang digunakan untuk meluncurkan PowerShell. Lingkup ini dapat dimodifikasi dengan Set-ExecutionPolicy.
- LocalMachine adalah ruang lingkup yang dikonfigurasi dalam registri lokal dan berlaku untuk semua pengguna pada sistem. Ini adalah ruang lingkup default yang diubah jika Set-ExecutionPolicy dijalankan tanpa parameter -Scope. Karena ini berlaku untuk semua pengguna pada sistem, itu hanya dapat diubah dari sesi yang ditinggikan.
Karena artikel ini terutama tentang menyiasati keamanan untuk memfasilitasi kegunaan, kami hanya khawatir tentang tiga lingkup yang lebih rendah. Pengaturan MachinePolicy dan UserPolicy benar-benar berguna hanya jika Anda ingin menerapkan kebijakan pembatasan yang tidak begitu mudah dilewati. Dengan menjaga perubahan kami pada level Proses atau di bawah, kami dapat dengan mudah menggunakan pengaturan kebijakan apa pun yang kami anggap sesuai untuk situasi tertentu kapan saja.
Untuk menjaga keseimbangan antara keamanan dan kegunaan, kebijakan yang ditunjukkan pada tangkapan layar mungkin yang terbaik. Menyetel kebijakan LocalMachine ke Restricted umumnya mencegah skrip berjalan oleh siapa pun selain Anda. Tentu saja, ini dapat dilewati oleh pengguna yang tahu apa yang mereka lakukan tanpa banyak usaha. Tetapi itu harus mencegah pengguna yang tidak paham teknologi untuk secara tidak sengaja memicu sesuatu yang dahsyat di PowerShell. Memiliki CurrentUser (yaitu: Anda) ditetapkan sebagai Tidak Terbatas memungkinkan Anda untuk mengeksekusi skrip secara manual dari baris perintah sesuka Anda, tetapi tetap mempertahankan pengingat untuk skrip yang diunduh dari Internet. Pengaturan RemoteSigned di tingkat Proses perlu dilakukan di jalan pintas ke PowerShell.exe atau (seperti yang akan kita lakukan di bawah) dalam nilai-nilai Registry yang mengontrol perilaku skrip PowerShell. Ini akan memungkinkan fungsionalitas klik dua kali untuk menjalankan skrip yang Anda tulis, sambil memasang penghalang yang lebih kuat terhadap eksekusi skrip (berpotensi berbahaya) yang tidak disengaja dari sumber eksternal. Kami ingin melakukan ini di sini karena jauh lebih mudah untuk mengklik dua kali secara tidak sengaja daripada memanggilnya secara manual dari sesi interaktif.
Untuk mengatur kebijakan CurrentUser dan LocalMachine seperti pada tangkapan layar di atas, jalankan perintah berikut dari sesi PowerShell yang lebih tinggi:
Set-ExecutionPolicy Terbatas Set-ExecutionPolicy Tidak Terbatas -Scope Current Pengguna
Untuk menerapkan kebijakan RemoteSigned pada skrip yang dijalankan dari Explorer, kita harus mengubah nilai di dalam salah satu kunci registri yang kita lihat sebelumnya. Ini sangat penting karena, tergantung pada PowerShell atau versi Windows Anda, konfigurasi default mungkin untuk mem-bypass semua pengaturan ExecutionPolicy kecuali AllSigned. Untuk melihat apa konfigurasi saat ini untuk komputer Anda, Anda dapat menjalankan perintah ini (pastikan HKCR PSDrive dipetakan terlebih dahulu):
Dapatkan-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command | Select-Object '(Default)'
Konfigurasi default Anda mungkin akan menjadi salah satu dari dua string berikut, atau yang serupa:
(Terlihat pada Windows 7 SP1 x64, dengan PowerShell 2.0)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-file" "% 1"
(Terlihat pada Windows 8.1 x64, dengan PowerShell 4.0)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "if ((Dapatkan-ExecutionPolicy) -n 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1 '"
Yang pertama tidak terlalu buruk, karena yang dilakukannya hanyalah menjalankan skrip di bawah pengaturan ExecutionPolicy yang ada. Itu bisa dibuat lebih baik, dengan memberlakukan pembatasan yang lebih ketat untuk tindakan yang lebih rawan kecelakaan, tetapi ini pada awalnya tidak dimaksudkan untuk dipicu pada klik dua kali, dan kebijakan default biasanya Dibatasi. Opsi kedua, bagaimanapun, adalah memotong penuh dari apa pun yang Anda kemungkinan akan memiliki Polis Eksekusi - bahkan Dibatasi. Karena bypass akan diterapkan dalam lingkup proses, itu hanya mempengaruhi sesi yang diluncurkan ketika skrip dijalankan dari Explorer. Namun, ini berarti Anda bisa meluncurkan skrip yang mungkin Anda harapkan (dan inginkan) dilarang oleh kebijakan Anda.
Untuk mengatur Polos Eksekusi Tingkat Proses untuk skrip yang diluncurkan dari Explorer, sesuai dengan tangkapan layar di atas, Anda harus mengubah nilai registri yang sama dengan yang baru saja kami tanyakan. Anda dapat melakukannya secara manual di Regedit, dengan mengubahnya menjadi ini:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
Anda juga dapat mengubah pengaturan dari dalam PowerShell jika Anda mau. Ingatlah untuk melakukan ini dari sesi yang ditinggikan, dengan HKD PSDrive dipetakan.
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -ExecutionPolicy "" RemoteSigned "" -file "" % 1 "'
Jalankan skrip PowerShell sebagai Administrator.
Sama seperti itu adalah ide yang buruk untuk menonaktifkan UAC sepenuhnya, itu juga praktik keamanan yang buruk untuk menjalankan skrip atau program dengan hak istimewa tinggi kecuali Anda benar-benar membutuhkannya untuk melakukan operasi yang memerlukan akses Administrator. Jadi, membangun UAC prompt ke tindakan default untuk skrip PowerShell tidak disarankan. Namun, kami dapat menambahkan opsi menu konteks baru untuk memungkinkan kami menjalankan skrip dengan mudah dalam sesi yang ditinggikan saat diperlukan. Ini mirip dengan metode yang digunakan untuk menambahkan "Buka dengan Notepad" ke menu konteks semua file - tetapi di sini kita hanya akan menargetkan skrip PowerShell. Kami juga akan meneruskan beberapa teknik yang digunakan dalam artikel sebelumnya, di mana kami menggunakan file batch alih-alih peretasan registri untuk meluncurkan skrip PowerShell kami.
Untuk melakukan ini di Regedit, kembali ke kunci Shell, di:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Di sana, buat sub-kunci baru. Sebut saja "Jalankan dengan PowerShell (Admin)". Di bawahnya, buat sub-kunci lain yang disebut "Command". Kemudian, atur nilai "(Default)" di bawah Command ke ini:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Mulai-Proses PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ "% 1 \"' -Lari Kerja "
Melakukan hal yang sama di PowerShell sebenarnya membutuhkan tiga baris saat ini. Satu untuk setiap kunci baru, dan satu untuk menetapkan nilai "(Default)" untuk Command. Jangan lupa ketinggian dan pemetaan HKCR.
New-Item 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Jalankan dengan PowerShell (Admin)' New-Item 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Jalankan dengan PowerShell (Admin) \ Perintah' Set-ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Jalankan dengan PowerShell (Admin) \ Command "(Default)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Mulai-Proses PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Verb RunAs "'
Juga, perhatikan dengan cermat perbedaan antara string yang dimasukkan melalui PowerShell dan nilai aktual yang masuk ke dalam Registry. Khususnya, kita harus membungkus semuanya dengan tanda kutip tunggal, dan menggandakan tanda kutip internal tunggal, untuk menghindari kesalahan dalam penguraian perintah.
Sekarang Anda harus memiliki entri menu konteks baru untuk skrip PowerShell, yang disebut "Jalankan dengan PowerShell (Admin)".
Opsi baru akan menelurkan dua instance PowerShell berturut-turut. Yang pertama hanyalah peluncur untuk yang kedua, yang menggunakan Start-Process dengan parameter “-Verb RunA” untuk meminta elevasi untuk sesi baru. Dari sana, skrip Anda harus dapat dijalankan dengan hak istimewa Administrator setelah Anda mengklik prompt UAC.
Sentuhan akhir.
Hanya ada beberapa penyesuaian lagi untuk ini yang dapat membantu membuat hidup sedikit lebih mudah. Pertama, bagaimana dengan menghilangkan fungsi Notepad sepenuhnya? Cukup salin nilai "(Default)" dari tombol Command di bawah Edit (di bawah), ke lokasi yang sama di bawah Open.
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"
Atau, Anda dapat menggunakan sedikit PowerShell ini (tentu saja dengan Admin & HKCR):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""% 1 "'
Satu lagi gangguan kecil adalah kebiasaan konsol menghilang setelah skrip selesai. Ketika itu terjadi, kami tidak memiliki kesempatan untuk meninjau output skrip untuk kesalahan atau informasi bermanfaat lainnya. Ini bisa diatasi dengan meletakkan jeda di akhir setiap skrip Anda, tentu saja. Sebagai alternatif, kita dapat memodifikasi nilai “(Default)” untuk kunci Command kita untuk memasukkan parameter “-NoExit”. Di bawah ini adalah nilai yang dimodifikasi.
(Tanpa akses Admin)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(Dengan akses Admin)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Mulai-Proses PowerShell.exe -ArgumentList '-Tidak Keluar-Eksekusi -Pengerjaan Remote RemoteSigned -File \ "% 1 \" - - Verba Run "
Dan tentu saja, kami juga akan memberi Anda perintah PowerShell. Pengingat terakhir: Elevasi & HKCR!
(Non-Admin)
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned "" -file ""% 1 "'
(Admin)
Set-ItemProperty 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Jalankan dengan PowerShell (Admin) \ Command "(Default)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Mulai-Proses PowerShell.exe -ArgumentList "-Tidak Keluar-EksekusiPolicy RemoteSigned -File \"% 1 \ "" - Verb RunAs "'
Mengambilnya untuk berputar.
Untuk menguji ini, kita akan menggunakan skrip yang dapat menunjukkan kepada kita pengaturan ExecutionPolicy di tempat dan apakah skrip diluncurkan dengan izin Administrator atau tidak. Script akan disebut "MyScript.ps1" dan disimpan dalam "D: \ Script Lab" pada sistem sampel kami. Kode di bawah ini, untuk referensi.
if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ([Security.Principal.WindowsBuiltInRole] "Administrator")) Write-Output 'Berjalan sebagai Administrator! Write-Output 'Running Limited!' Dapatkan-ExecutionPolicy -List
Menggunakan tindakan "Jalankan dengan PowerShell":
Menggunakan tindakan "Jalankan dengan PowerShell (Admin)", setelah mengklik melalui UAC:
Untuk mendemonstrasikan ExecutionPolicy dalam aksi di lingkup Proses, kita dapat membuat Windows berpikir file tersebut berasal dari Internet dengan sedikit kode PowerShell ini:
Add-Content -Path 'D: \ Script Lab \ MyScript.ps1' -Value "[ZoneTransfer] 'nZoneId = 3" -Stream' Zone.Identifier '
Untungnya, kami telah mengaktifkan -NoExit. Kalau tidak, kesalahan itu hanya akan berkedip, dan kita tidak akan tahu!
Zone.Identifier dapat dihapus dengan ini:
Clear-Content -Path 'D: \ Script Lab \ MyScript.ps1' -Stream 'Zone.Identifier'
Referensi yang berguna:
- Menjalankan skrip PowerShell dari file batch - Daniel Schroeder's Programming Blog
- Memeriksa izin Administrator di PowerShell - Hey, Scripting Guy! Blog