Cara Mengonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah

Daftar Isi:

Cara Mengonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah
Cara Mengonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah

Video: Cara Mengonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah

Video: Cara Mengonfigurasi Windows agar Bekerja dengan Skrip PowerShell Lebih Mudah
Video: Pengantar Keamanan Siber 01 - YouTube 2024, April
Anonim
Windows dan PowerShell memiliki fitur keamanan bawaan dan konfigurasi standar yang dimaksudkan untuk mencegah pengguna akhir meluncurkan skrip secara tidak sengaja dalam kegiatan sehari-hari mereka. Namun, jika aktivitas harian Anda secara rutin melibatkan penulisan dan menjalankan skrip PowerShell Anda sendiri, ini bisa lebih merepotkan daripada bermanfaat. Di sini, kami akan menunjukkan kepada Anda cara bekerja di sekitar fitur ini tanpa mengorbankan keamanan sepenuhnya.
Windows dan PowerShell memiliki fitur keamanan bawaan dan konfigurasi standar yang dimaksudkan untuk mencegah pengguna akhir meluncurkan skrip secara tidak sengaja dalam kegiatan sehari-hari mereka. Namun, jika aktivitas harian Anda secara rutin melibatkan penulisan dan menjalankan skrip PowerShell Anda sendiri, ini bisa lebih merepotkan daripada bermanfaat. Di sini, kami akan menunjukkan kepada Anda cara bekerja di sekitar fitur ini tanpa mengorbankan keamanan sepenuhnya.

Bagaimana dan mengapa Windows & PowerShell mencegah eksekusi skrip.

PowerShell secara efektif adalah shell perintah dan bahasa scripting yang dimaksudkan untuk menggantikan skrip CMD dan 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 terjadi pada sistem Anda, hingga batasan yang ada di akun pengguna Anda. Jadi, jika Anda hanya dapat mengklik dua kali skrip PowerShell dan menjalankannya dengan hak istimewa Administrator penuh, liner satu sederhana seperti ini dapat benar-benar menghancurkan hari Anda:

Get-ChildItem '$env:SystemDrive' -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

JANGAN jalankan perintah di atas!

Itu hanya melalui sistem file dan menghapus apa pun yang bisa. Menariknya, ini mungkin tidak membuat sistem tidak dapat beroperasi secepat yang Anda kira - bahkan ketika dijalankan dari sesi yang ditinggikan. Tetapi jika seseorang menelepon Anda setelah menjalankan skrip ini, karena mereka tiba-tiba tidak dapat menemukan file mereka atau menjalankan beberapa program, "mematikannya dan menghidupkan kembali" mungkin akan mengarahkan mereka ke dalam Windows Startup Repair di mana mereka akan diberi tahu ada tidak ada yang bisa dilakukan untuk memperbaiki masalah. Yang lebih buruk adalah, daripada mendapatkan skrip yang hanya merusak sistem file mereka, teman Anda mungkin tertipu untuk menjalankan salah satu yang mengunduh dan menginstal keylogger atau layanan akses jarak jauh. Kemudian, alih-alih menanyakan pertanyaan tentang Perbaikan Startup, mereka mungkin akan mengajukan pertanyaan kepada polisi tentang penipuan bank!

Sekarang ini harus jelas mengapa hal-hal tertentu diperlukan untuk melindungi pengguna akhir dari diri mereka sendiri, sehingga untuk berbicara. Tetapi pengguna daya, administrator sistem, dan geek lainnya umumnya (meskipun ada pengecualian) sedikit lebih waspada terhadap ancaman ini, mengetahui cara mengenali dan dengan mudah menghindarinya, dan hanya ingin menyelesaikan 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 Mengizinkan Eksekusi Skrip PowerShell di Windows 7, tetapi kami juga akan membahasnya di beberapa level di sini.
  • PowerShell tidak terkait dengan ekstensi file.PS1 secara default. Kami mengangkat ini awalnya di seri PowerShell Geek School kami. Windows menetapkan tindakan default untuk file.PS1 untuk membukanya di Notepad, daripada mengirimnya ke interpreter perintah PowerShell. Ini untuk secara langsung mencegah eksekusi skrip berbahaya secara tidak sengaja ketika mereka hanya mengklik ganda.
  • Beberapa skrip PowerShell tidak akan berfungsi tanpa izin Administrator. Bahkan berjalan dengan akun tingkat Administrator, Anda masih perlu melewati Kontrol Akun Pengguna (UAC) untuk melakukan tindakan tertentu. Untuk alat-alat baris perintah, ini bisa sedikit rumit untuk sedikitnya. Kami tidak ingin menonaktifkan UAC, tetapi itu masih bagus ketika kami dapat membuatnya lebih mudah untuk ditangani.

Masalah-masalah yang sama ini muncul dalam Cara Menggunakan File Batch untuk Membuat Script PowerShell Lebih Mudah Dijalankan, di mana kami memandu Anda menulis file batch untuk sementara waktu mengelilinginya. Sekarang, kami akan menunjukkan kepada Anda cara mengatur sistem Anda dengan solusi jangka panjang. Ingatlah bahwa pada umumnya Anda tidak boleh melakukan perubahan ini pada sistem yang tidak secara eksklusif digunakan oleh Anda - jika tidak, Anda menempatkan pengguna lain pada risiko yang lebih tinggi untuk mengalami masalah yang sama dengan fitur yang dimaksudkan untuk mencegah.

Mengubah asosiasi file.PS1.

Yang pertama, dan mungkin yang terpenting, gangguan untuk berkeliling adalah asosiasi default untuk file.PS1. Mengaitkan file-file ini dengan apa pun selain PowerShell.exe masuk akal untuk mencegah eksekusi skrip yang tidak diinginkan secara tidak disengaja. Tapi, mengingat PowerShell dilengkapi 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 belum siap untuk sepenuhnya beralih ke fungsi klik-untuk-menjalankan yang memungkinkan, Anda mungkin ingin menyesuaikan pengaturan ini.

Anda dapat mengubah asosiasi file.PS1 ke program apa pun yang Anda inginkan dengan panel kontrol Program Default, tetapi menggali langsung ke Registry akan memberi Anda sedikit lebih banyak kontrol atas persis 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_ROOTMicrosoft.PowerShellScript.1Shell

Untuk menjelajahi pengaturan ini sebelum kita mengubahnya, lihat kunci itu dan sub-kunci dengan Regedit. Kunci Shell hanya memiliki satu nilai, "(Default)", yang diatur ke "Buka". Ini adalah penunjuk ke tindakan default untuk mengklik dua kali file, yang akan kita lihat di sub-kunci.

Perluas 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 mengeksplorasi nilai-nilai di dalam, tetapi pada dasarnya mereka menyamakan ke default berikut:
Anda dapat memperluas setiap kunci untuk mengeksplorasi nilai-nilai di dalam, tetapi pada dasarnya mereka menyamakan ke default berikut:
  • 0 - Jalankan dengan PowerShell. "Run with PowerShell" sebenarnya adalah nama opsi yang sudah ada di menu konteks untuk skrip PowerShell. Teks hanya ditarik dari lokasi lain daripada menggunakan nama kunci seperti yang lain. Dan itu masih bukan tindakan klik-ganda default.
  • Sunting - Buka di PowerShell ISE. Ini 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 ganda file akan "Buka", dan tindakan itu biasanya diatur untuk menggunakan Notepad.

Jika Anda ingin tetap dengan string perintah pre-built yang sudah tersedia, Anda bisa mengubah nilai "(Default)" di kunci Shell untuk mencocokkan nama kunci yang sesuai dengan apa yang Anda inginkan klik-ganda untuk dilakukan. Ini dapat dengan mudah dilakukan dari dalam Regedit, atau Anda dapat menggunakan pelajaran yang diambil dari tutorial kami untuk menjelajahi registri dengan PowerShell (plus tweak PSDrive kecil) untuk mulai membuat 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 disiapkan secara default. Perintah untuk ini adalah:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Sekarang Anda dapat menavigasi dan mengedit kunci dan nilai registri di HKEY_CLASSES_ROOT seperti yang Anda lakukan di HKCU biasa dan HKLM PSDrives.

Untuk mengkonfigurasi klik ganda untuk meluncurkan skrip PowerShell secara langsung:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 0

Untuk mengkonfigurasi klik ganda untuk membuka skrip PowerShell di PowerShell ISE:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Edit'

Untuk mengembalikan nilai default (set klik dua kali untuk membuka skrip PowerShell di Notepad):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Open'

Itu hanya dasar-dasar mengubah tindakan klik-ganda default. Kami akan membahas lebih detail tentang menyesuaikan cara penanganan skrip PowerShell saat dibuka di PowerShell dari Explorer di bagian selanjutnya. Perlu diingat bahwa pelingkupan mencegah PSDrive dari bertahan di seluruh sesi. Jadi, Anda mungkin ingin memasukkan baris New-PSDrive di awal skrip konfigurasi apa pun yang Anda buat untuk tujuan ini, atau tambahkan ke profil PowerShell Anda. Jika tidak, Anda harus menjalankannya secara manual sebelum mencoba melakukan perubahan dengan cara ini.

Mengubah pengaturan PowerShell ExecutionPolicy.

ExecutionPolicy PowerShell adalah lapisan perlindungan lain terhadap eksekusi skrip jahat. Ada beberapa pilihan untuk ini, dan beberapa cara berbeda dapat diatur. Dari yang paling tidak aman, opsi yang tersedia adalah:

  • Dibatasi - Tidak ada skrip yang diizinkan untuk berjalan. (Pengaturan standar untuk kebanyakan 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 dipercaya, atau skrip yang tidak ditandatangani secara digital sama sekali, tidak akan berjalan. PowerShell akan meminta pengguna untuk konfirmasi jika naskah ditandatangani oleh penerbit belum didefinisikan sebagai tepercaya atau tidak dipercaya. Jika Anda belum menandatangani skrip profil Anda secara digital, dan menetapkan kepercayaan pada tanda tangan itu, itu tidak akan bisa berjalan. Berhati-hatilah dengan penerbit yang Anda percayai, karena Anda masih bisa berakhir dengan 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. Di sini, Anda juga harus berhati-hati terhadap tanda tangan digital apa yang Anda percaya tetapi bahkan lebih berhati-hati dengan skrip yang tidak ditandatangani yang Anda pilih untuk dijalankan. Ini adalah tingkat keamanan tertinggi di mana Anda dapat memiliki skrip profil kerja tanpa harus menandatanganinya secara digital.
  • Tidak Dibatasi - Semua skrip diizinkan untuk berjalan, tetapi permintaan konfirmasi akan diperlukan untuk skrip dari Internet. Mulai saat ini, sepenuhnya terserah Anda untuk menghindari menjalankan skrip yang tidak dapat dipercaya.
  • Bypass - Semuanya berjalan tanpa peringatan. Hati-hati dengan yang satu ini.
  • Tidak terdefinisi - Tidak ada kebijakan didefinisikan dalam lingkup saat ini. Ini digunakan untuk memungkinkan kembali ke kebijakan yang didefinisikan dalam lingkup lebih rendah (lebih detail di bawah) atau ke default OS.

Seperti yang disarankan oleh uraian tentang Undefined, kebijakan di atas dapat disetel dalam satu atau lebih dari beberapa cakupan. Anda bisa menggunakan Get-ExecutionPolicy, dengan parameter -List, untuk melihat semua cakupan dan konfigurasi saat ini.

Cakupan dicantumkan dalam urutan prioritas, dengan cakupan terdefinisi yang paling atas menimpa yang lain. Jika tidak ada kebijakan yang ditentukan, sistem akan kembali ke pengaturan default-nya (dalam banyak hal, ini Dibatasi).
Cakupan dicantumkan dalam urutan prioritas, dengan cakupan terdefinisi yang paling atas menimpa yang lain. Jika tidak ada kebijakan yang ditentukan, sistem akan kembali ke pengaturan default-nya (dalam banyak hal, ini Dibatasi).
  • MachinePolicy mewakili Kebijakan Grup yang berlaku di tingkat Komputer. Ini umumnya diterapkan hanya di 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 lingkup khusus untuk contoh PowerShell ini. Perubahan kebijakan dalam lingkup ini tidak akan memengaruhi proses PowerShell lain yang berjalan, dan tidak akan efektif setelah sesi ini dihentikan. Ini dapat dikonfigurasi oleh parameter -ExecutionPolicy ketika PowerShell diluncurkan, atau dapat diatur dengan sintaks Set-ExecutionPolicy yang tepat dari dalam sesi.
  • CurrentUser adalah lingkup yang dikonfigurasi di registri lokal dan berlaku untuk akun pengguna yang digunakan untuk meluncurkan PowerShell. Ruang lingkup ini dapat dimodifikasi dengan Set-ExecutionPolicy.
  • LocalMachine adalah ruang lingkup yang dikonfigurasi di registri lokal dan berlaku untuk semua pengguna pada sistem. Ini adalah ruang lingkup default yang diubah jika Set-ExecutionPolicy dijalankan tanpa parameter -Scope. Karena berlaku untuk semua pengguna di sistem, itu hanya dapat diubah dari sesi yang ditinggikan.

Karena artikel ini terutama membahas tentang keamanan untuk memfasilitasi kegunaan, kami hanya peduli tentang tiga lingkup bawah. Pengaturan MachinePolicy dan UserPolicy benar-benar berguna hanya jika Anda ingin menerapkan kebijakan restriktif yang tidak begitu saja dilewati. Dengan menjaga perubahan kami pada level Proses atau di bawah, kami dapat dengan mudah menggunakan pengaturan kebijakan apa pun yang kami anggap tepat untuk situasi tertentu kapan saja.

Untuk mempertahankan keseimbangan antara keamanan dan kegunaan, kebijakan yang ditampilkan di layar mungkin paling baik. Menetapkan kebijakan LocalMachine ke Dibatasi umumnya mencegah skrip yang dijalankan oleh orang lain selain Anda. Tentu saja, ini dapat dilewati oleh pengguna yang tahu apa yang mereka lakukan tanpa banyak usaha. Tetapi harus menjaga pengguna yang tidak mengerti teknologi dari tidak sengaja memicu bencana besar di PowerShell. Memiliki CurrentUser (yaitu: Anda) disetel sebagai Tidak Terbatas memungkinkan Anda untuk menjalankan 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 dengan cara 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-untuk-menjalankan yang mudah untuk skrip apa pun yang Anda tulis, sembari memasang penghalang yang lebih kuat terhadap eksekusi skrip yang tidak disengaja (berpotensi berbahaya) dari sumber eksternal. Kami ingin melakukan ini di sini karena jauh lebih mudah secara tidak sengaja mengklik dua kali skrip daripada yang biasanya dilakukan dengan menyebutnya secara manual dari sesi interaktif.

Untuk menetapkan kebijakan CurrentUser dan LocalMachine seperti pada gambar di atas, jalankan perintah berikut dari sesi PowerShell yang ditinggikan:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Untuk menerapkan kebijakan RemoteSigned pada skrip yang dijalankan dari Explorer, kami harus mengubah nilai di dalam salah satu kunci registri yang kami cari sebelumnya. Ini sangat penting karena, tergantung pada versi PowerShell atau Windows Anda, konfigurasi default mungkin untuk mengabaikan semua pengaturan ExecutionPolicy kecuali AllSigned. Untuk melihat apa konfigurasi saat ini untuk komputer Anda, Anda dapat menjalankan perintah ini (memastikan HKCR PSDrive dipetakan terlebih dahulu):

Get-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand | Select-Object '(Default)'

Konfigurasi default Anda mungkin akan menjadi salah satu dari dua string berikut, atau sesuatu yang cukup mirip:

(Terlihat pada Windows 7 SP1 x64, dengan PowerShell 2.0)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-file' '%1'

(Terlihat pada Windows 8.1 x64, dengan PowerShell 4.0)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' 'if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1''

Yang pertama tidak terlalu buruk, karena semua yang dilakukannya adalah menjalankan skrip di bawah pengaturan ExecutionPolicy yang ada. Ini bisa dibuat lebih baik, dengan memberlakukan pembatasan yang lebih ketat untuk tindakan yang lebih rentan kecelakaan, tetapi awalnya ini tidak dimaksudkan untuk dipicu oleh klik ganda, dan kebijakan default biasanya Dibatasi setelah semua. Pilihan kedua, bagaimanapun, adalah bypass penuh dari ExecutionPolicy apa pun yang mungkin Anda miliki - 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 mengakhiri meluncurkan skrip yang mungkin Anda harapkan (dan inginkan) kebijakan Anda untuk dilarang.

Untuk mengatur ExecutionPolicy Tingkat Proses untuk skrip yang diluncurkan dari Explorer, sesuai dengan screenshot di atas, Anda harus mengubah nilai registri yang sama yang baru saja kami tanyakan. Anda dapat melakukannya secara manual di Regedit, dengan mengubahnya menjadi ini:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

Anda juga dapat mengubah pengaturan dari dalam PowerShell jika Anda mau. Ingat untuk melakukan ini dari sesi yang ditinggikan, dengan HKCR PSDrive yang dipetakan.
Anda juga dapat mengubah pengaturan dari dalam PowerShell jika Anda mau. Ingat untuk melakukan ini dari sesi yang ditinggikan, dengan HKCR PSDrive yang dipetakan.

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.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 yang tinggi kecuali Anda benar-benar membutuhkannya untuk melakukan operasi yang memerlukan akses Administrator. Jadi, membuat perintah UAC ke dalam tindakan default untuk skrip PowerShell tidak disarankan. Namun, kami dapat menambahkan opsi menu konteks baru untuk memungkinkan kami menjalankan skrip dengan mudah di sesi yang lebih tinggi saat diperlukan. Ini mirip dengan metode yang digunakan untuk menambahkan "Buka dengan Notepad" ke menu konteks dari semua file - tetapi di sini kami hanya akan menargetkan skrip PowerShell. Kami juga akan membawa beberapa teknik yang digunakan di 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_ROOTMicrosoft.PowerShellScript.1Shell

Di sana, buat sub-kunci baru. Sebut saja "Jalankan dengan PowerShell (Admin)". Di bawahnya, buat sub-kunci lain yang disebut "Command".Kemudian, tetapkan nilai “(Default)” di bawah Command untuk ini:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Melakukan hal yang sama di PowerShell sebenarnya akan membutuhkan tiga jalur saat ini. Satu untuk setiap kunci baru, dan satu untuk mengatur nilai "(Default)" untuk Command. Jangan lupa ketinggian dan pemetaan HKCR.
Melakukan hal yang sama di PowerShell sebenarnya akan membutuhkan tiga jalur saat ini. Satu untuk setiap kunci baru, dan satu untuk mengatur nilai "(Default)" untuk Command. Jangan lupa ketinggian dan pemetaan HKCR.

New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)' New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Selain itu, perhatikan dengan cermat perbedaan antara string yang dimasukkan melalui PowerShell dan nilai aktual yang masuk ke Registry. Khususnya, kami harus membungkus semuanya dalam tanda kutip tunggal, dan double-up pada tanda kutip tunggal internal, untuk menghindari kesalahan dalam penguraian perintah.

Sekarang Anda harus memiliki entri konteks-menu baru untuk skrip PowerShell, yang disebut "Jalankan dengan PowerShell (Admin)".

Opsi baru akan menelurkan dua instance PowerShell berturut-turut. Yang pertama hanya peluncur untuk yang kedua, yang menggunakan Start-Process dengan parameter “-Verb RunAs” untuk meminta elevasi untuk sesi baru. Dari sana, skrip Anda harus dapat dijalankan dengan hak istimewa Administrator setelah Anda mengklik melalui permintaan UAC.
Opsi baru akan menelurkan dua instance PowerShell berturut-turut. Yang pertama hanya peluncur untuk yang kedua, yang menggunakan Start-Process dengan parameter “-Verb RunAs” untuk meminta elevasi untuk sesi baru. Dari sana, skrip Anda harus dapat dijalankan dengan hak istimewa Administrator setelah Anda mengklik melalui permintaan UAC.

Sentuhan akhir.

Hanya ada beberapa perubahan pada hal ini yang dapat membantu membuat hidup lebih mudah. Untuk satu, bagaimana menyingkirkan fungsi Notepad sepenuhnya? Cukup salin "(Default)" nilai dari tombol Command di bawah Edit (bawah), ke dalam lokasi yang sama di bawah Buka.

'C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1'

Atau, Anda dapat menggunakan sedikit PowerShell ini (dengan Admin & HKCR tentu saja):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellOpenCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1''

Satu lagi gangguan kecil adalah kebiasaan konsol menghilang setelah skrip selesai. Ketika itu terjadi, kami tidak memiliki kesempatan untuk meninjau hasil skrip untuk kesalahan atau informasi berguna lainnya. Ini bisa diselesaikan dengan meletakkan jeda di akhir setiap skrip Anda, tentu saja. Sebagai alternatif, kita dapat memodifikasi nilai “(Default)” untuk tombol Command kita untuk memasukkan parameter “-NoExit”. Di bawah ini adalah nilai yang dimodifikasi.

(Tanpa akses Admin)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

(Dengan akses Admin)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Dan tentu saja, kami juga akan memberi Anda perintah PowerShell. Pengingat terakhir: Ketinggian & HKCR!

(Non-Admin)

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

(Admin)

Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-NoExit -ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Mengambilnya untuk berputar.

Untuk menguji ini, kami akan menggunakan skrip yang dapat menunjukkan kepada kami pengaturan ExecutionPolicy di tempat dan apakah skrip diluncurkan dengan izin Administrator. Skrip akan disebut "MyScript.ps1" dan disimpan dalam "D: Script Lab" pada sistem contoh kami. Kode di bawah ini, untuk referensi.

if(([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {Write-Output 'Running as Administrator!'} else {Write-Output 'Running Limited!'} Get-ExecutionPolicy -List

Menggunakan aksi "Jalankan dengan PowerShell":

Menggunakan "Jalankan dengan PowerShell (Admin)" tindakan, setelah mengklik melalui UAC:
Menggunakan "Jalankan dengan PowerShell (Admin)" tindakan, setelah mengklik melalui UAC:
Untuk mendemonstrasikan ExecutionPolicy dalam aksi di lingkup Proses, kita dapat membuat Windows berpikir file tersebut berasal dari Internet dengan kode PowerShell ini:
Untuk mendemonstrasikan ExecutionPolicy dalam aksi di lingkup Proses, kita dapat membuat Windows berpikir file tersebut berasal dari Internet dengan kode PowerShell ini:

Add-Content -Path 'D:Script LabMyScript.ps1' -Value '[ZoneTransfer]`nZoneId=3' -Stream 'Zone.Identifier'

Untungnya, kami telah mengaktifkan -NoExit. Jika tidak, kesalahan itu hanya akan berkedip, dan kita tidak akan tahu!
Untungnya, kami telah mengaktifkan -NoExit. Jika tidak, kesalahan itu hanya akan berkedip, dan kita tidak akan tahu!

Zone.Identifier dapat dihapus dengan ini:

Clear-Content -Path 'D:Script LabMyScript.ps1' -Stream 'Zone.Identifier'

Referensi Berguna:

  • Menjalankan skrip PowerShell dari file batch - Blog Program Daniel Schroeder
  • Memeriksa izin Administrator di PowerShell - Hai, Scripting Guy! Blog

Direkomendasikan: