Laman » bagaimana untuk » Bagaimana Konfigurasi Windows untuk Bekerja dengan Skrip PowerShell Lebih Mudah

    Bagaimana Konfigurasi Windows untuk Bekerja dengan Skrip PowerShell Lebih Mudah

    Windows dan PowerShell mempunyai ciri-ciri keselamatan terbina dalam dan konfigurasi lalai yang bertujuan untuk menghalang pengguna akhir dari melancarkan skrip secara tidak sengaja semasa menjalankan aktiviti harian mereka. Walau bagaimanapun, jika aktiviti harian anda secara rutin melibatkan penulisan dan menjalankan skrip PowerShell anda sendiri, ini boleh menjadi lebih teruk daripada manfaat. Di sini, kami akan menunjukkan kepada anda bagaimana untuk mengendalikan ciri-ciri ini tanpa menjejaskan keselamatan sepenuhnya.

    Bagaimana dan mengapa Windows & PowerShell menghalang pelaksanaan skrip.

    PowerShell berkesan shell perintah dan bahasa skrip yang dimaksudkan untuk menggantikan skrip CMD dan batch pada sistem Windows. Oleh itu, skrip PowerShell boleh dikonfigurasi untuk melakukan apa-apa yang boleh dilakukan secara manual dari baris arahan. Itu sama dengan membuat praktikal apa-apa perubahan yang mungkin pada sistem anda, sehingga sekatan yang berlaku pada akaun pengguna anda. Jadi, jika anda hanya dapat mengklik dua kali skrip PowerShell dan menjalankannya dengan keistimewaan Pentadbir penuh, satu pelantar mudah seperti ini benar-benar boleh merosakkan hari anda:

    Get-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction SilentlyContinue | Buang-Item -Force -Recurse -ErrorAction SilentlyContinue

    JANGAN menjalankan arahan di atas!

    Itu hanya melalui sistem fail dan memadam apa sahaja yang boleh. Menariknya, ini mungkin tidak menjadikan sistem tidak boleh berfungsi secepat yang anda fikirkan - walaupun berlari dari sesi yang tinggi. Tetapi jika seseorang memanggil anda selepas menjalankan skrip ini, kerana mereka tiba-tiba tidak dapat mencari fail mereka atau menjalankan beberapa program, "mematikannya dan lagi" mungkin akan hanya membawa mereka ke Windows Startup Repair dimana mereka akan diberitahu ada tiada apa yang boleh dilakukan untuk menyelesaikan masalah ini. Apa yang lebih teruk adalah, bukannya mendapatkan skrip yang hanya membuang sistem fail mereka, rakan anda mungkin ditipu untuk menjalankan satu yang memuat turun dan memasang perkhidmatan keylogger atau akses jauh. Kemudian, bukannya bertanya kepada anda tentang Pembaikan Permulaan, mereka mungkin akan meminta polis beberapa soalan mengenai penipuan bank!

    Sekarang ini perlu jelas mengapa perkara-perkara tertentu diperlukan untuk melindungi pengguna akhir dari diri sendiri, jadi untuk bercakap. Tetapi pengguna kuasa, pentadbir sistem, dan geeks lain pada umumnya (walaupun terdapat pengecualian) sedikit lebih berhati-hati dengan ancaman ini, mengetahui bagaimana untuk melihat dan dengan mudah mengelakkan mereka, dan hanya ingin meneruskan dengan mendapatkan kerja mereka selesai. Untuk melakukan ini, mereka perlu sama ada melumpuhkan atau bekerja di sekitar beberapa blok jalan:

    • PowerShell tidak membenarkan pelaksanaan skrip luaran secara lalai.
      Tetapan PelaksanaanPolicy dalam PowerShell menghalang pelaksanaan skrip luaran secara lalai dalam semua versi Windows. Dalam beberapa versi Windows, lalai tidak membenarkan pelaksanaan skrip sama sekali. Kami menunjukkan kepada anda cara mengubah tetapan ini dalam Cara Memungkinkan Pelaksanaan Skrip PowerShell pada Windows 7, tetapi kami akan menutupnya di beberapa tahap di sini juga.
    • PowerShell tidak dikaitkan dengan sambungan .PS1 fail secara lalai.
      Kami memulakannya dalam siri PowerShell Geek School kami. Windows menetapkan tindakan lalai untuk .PS1 fail untuk membukanya dalam Notepad, bukannya menghantarnya ke penterjemah perintah PowerShell. Ini adalah untuk menghalang secara langsung pelaksanaan skrip jahat apabila mereka hanya dua klik.
    • Sesetengah skrip PowerShell tidak akan berfungsi tanpa keizinan Pentadbir.
      Walaupun berjalan dengan akaun peringkat Pentadbir, anda masih perlu melalui Kawalan Akaun Pengguna (UAC) untuk melakukan tindakan tertentu. Untuk alat baris arahan, ini boleh sedikit rumit untuk dikatakan paling kurang. Kami tidak mahu melumpuhkan UAC, tetapi ia masih bagus apabila kita dapat membuatnya lebih mudah untuk ditangani.

    Isu-isu yang sama dibesarkan dalam Cara Menggunakan Fail Batch untuk Membuat Skrip PowerShell Lebih Mudah untuk Jalankan, di mana kita berjalan anda melalui menulis fail batch untuk sementara ke sekitar mereka. Sekarang, kami akan menunjukkan kepada anda bagaimana untuk menetapkan sistem anda dengan penyelesaian jangka panjang yang lebih panjang. Perlu diingat bahawa anda tidak sepatutnya membuat perubahan ini pada sistem yang tidak semata-mata digunakan oleh anda - jika tidak, anda meletakkan pengguna lain pada risiko yang lebih tinggi untuk menjalankan masalah yang sama ciri-ciri ini bertujuan untuk mencegah.

    Menukar persatuan fail .PS1.

    Yang pertama, dan mungkin paling utama, kegelisahan untuk berkeliling adalah persatuan lalai untuk fail PS1. Kaitkan fail-fail ini kepada apa-apa selain PowerShell.exe masuk akal untuk mencegah pelaksanaan skrip yang tidak disengajakan. Tetapi, memandangkan PowerShell dilengkapi dengan Persekitaran Skrip Bersepadu (ISE) yang direka khusus untuk menyunting skrip PowerShell, kenapa kita mahu membuka fail PS1 dalam Notepad secara lalai? Walaupun anda tidak bersedia untuk bertukar sepenuhnya untuk membolehkan fungsi double click-to-run, anda mungkin mahu mengubah tetapan ini.

    Anda boleh menukar persatuan fail PS1 ke program apa saja yang anda mahu dengan panel kawalan Program Lalai, tetapi menggali terus ke Pendaftaran akan memberi anda sedikit kawalan lebih tepat mengenai bagaimana file tersebut akan dibuka. Ini juga membolehkan anda menetapkan atau menukar pilihan tambahan yang tersedia dalam menu konteks untuk fail PS1. Jangan lupa untuk membuat sandaran pendaftaran sebelum anda melakukan ini!

    Tetapan registri yang mengawal bagaimana skrip PowerShell dibuka disimpan di lokasi berikut:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    Untuk meneroka tetapan ini sebelum kita menukarnya, lihat pada kekunci itu dan kekunci sub -nya dengan Regedit. Kunci Shell hanya perlu mempunyai satu nilai, "(Lalai)", yang ditetapkan kepada "Terbuka". Ini adalah penunjuk kepada tindakan lalai untuk mengklik dua kali fail, yang akan kita lihat di sub-keys.

    Kembangkan kunci Shell, dan anda akan melihat tiga kunci kecil. Setiap satu ini merupakan satu tindakan yang boleh anda lakukan yang khusus untuk skrip PowerShell.

    Anda boleh mengembangkan setiap kunci untuk meneroka nilai-nilai dalam, tetapi pada asasnya sama dengan kegagalan berikut:

    • 0 - Main dengan PowerShell. "Run with PowerShell" sebenarnya nama pilihan yang ada dalam menu konteks untuk skrip PowerShell. Teks itu hanya ditarik dari lokasi lain dan bukannya menggunakan nama kunci seperti yang lain. Dan ia masih bukan tindakan klik dua kali lalai.
    • Edit - Terbuka dalam PowerShell ISE. Ini lebih masuk akal daripada Notepad, tetapi anda masih perlu klik kanan fail .PS1 untuk melakukannya secara lalai.
    • Terbuka - Buka di Notepad. Perhatikan bahawa nama kunci ini juga rentetan yang disimpan dalam nilai "(Lalai)" pada kunci Shell. Ini bermakna klik dua kali fail akan "Buka", dan tindakan itu biasanya ditetapkan menggunakan Notepad.

    Jika anda ingin melekat dengan rentetan perintah pra-sedia sudah ada, anda hanya boleh menukar nilai "(Default)" dalam kunci Shell untuk menyamai nama kunci yang sepadan dengan apa yang anda mahu klik dua kali untuk dilakukan. Ini boleh dilakukan dengan mudah dari dalam Regedit, atau anda boleh menggunakan pelajaran yang dipelajari dari tutorial kami untuk meneroka pendaftaran dengan PowerShell (ditambah dengan tweak PSDrive kecil) untuk memulakan membina skrip yang dapat diguna semula yang dapat mengkonfigurasi sistem anda untuk anda. Perintah di bawah mesti dijalankan dari sesi PowerShell yang tinggi, sama seperti menjalankan CMD sebagai Pentadbir.

    Pertama, anda perlu mengkonfigurasi PSDrive untuk HKEY_CLASSES_ROOT kerana ini tidak ditetapkan secara lalai. Perintah untuk ini ialah:

    New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

    Kini anda boleh menavigasi dan mengedit kunci dan nilai pendaftaran dalam HKEY_CLASSES_ROOT sama seperti anda berada di HKCU biasa dan HKLM PSDrives.

    Untuk mengkonfigurasi klik dua kali untuk melancarkan skrip PowerShell secara langsung:

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

    Untuk mengkonfigurasi klik dua kali untuk membuka skrip PowerShell dalam PowerShell ISE:

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Lalai) "Edit'

    Untuk memulihkan nilai lalai (menetapkan klik dua kali untuk membuka skrip PowerShell dalam Notepad):

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Lalai) "Terbuka'

    Itu hanya asas untuk menukar tindakan klik dua kali lalai. Kami akan menerangkan dengan lebih terperinci mengenai cara menyesuaikan skrip PowerShell apabila ia dibuka di PowerShell dari Explorer pada bahagian seterusnya. Perlu diingat bahawa scoping menghalang PSDrives daripada berterusan merentas sesi. Oleh itu, anda mungkin mahu menyertakan garis New-PSDrive pada permulaan mana-mana skrip konfigurasi yang anda buat untuk tujuan ini, atau menambahnya ke profil PowerShell anda. Jika tidak, anda perlu menjalankannya secara manual sebelum cuba membuat perubahan dengan cara ini.

    Menukar tetapan Execution PowerShellPolicy.

    ExecutionPolicy PowerShell adalah satu lagi lapisan perlindungan terhadap pelaksanaan skrip jahat. Terdapat beberapa pilihan untuk ini, dan beberapa cara yang berbeza boleh ditetapkan. Daripada yang paling kurang selamat, pilihan yang tersedia adalah:

    • Terhad - Tiada skrip yang dibenarkan untuk dijalankan. (Tetapan lalai untuk kebanyakan sistem.) Ini juga akan menghalang skrip profil anda daripada berjalan.
    • AllSigned - Semua skrip mesti ditandatangani secara digital oleh penerbit yang dipercayai untuk dijalankan tanpa mendorong pengguna. Skrip yang ditandatangani oleh penerbit yang jelas ditakrifkan sebagai tidak dipercayai, atau skrip tidak ditandatangani secara digital sama sekali, tidak akan dijalankan. PowerShell akan meminta pengguna untuk pengesahan jika skrip ditandatangani oleh penerbit yang belum ditakrifkan sebagai dipercayai atau tidak dipercayai. Sekiranya anda tidak menandatangani skrip profil anda secara digital, dan menubuhkan amanah dalam tandatangan itu, ia tidak akan dapat dijalankan. Berhati-hati dengan penerbit yang anda percayai, kerana anda masih boleh menjalankan skrip jahat jika anda mempercayai salah.
    • RemoteSigned - Untuk skrip yang dimuat turun dari Internet, ini sama dengan "AllSigned". Walau bagaimanapun, skrip yang dibuat secara tempatan atau diimport dari sumber lain selain Internet dibenarkan berjalan tanpa sebarang pengesahan segera. Di sini, anda juga perlu berhati-hati dengan tandatangan digital yang anda percayai tetapi lebih berhati-hati dengan skrip yang tidak ditandatangani yang anda pilih untuk dijalankan. Ini adalah paras keselamatan tertinggi di mana anda boleh mempunyai skrip profil yang bekerja tanpa perlu menandatangani secara digital.
    • Tidak dibenarkan - Semua skrip dibenarkan untuk dijalankan, tetapi permintaan pengesahan diperlukan untuk skrip dari Internet. Dari sudut ini, ia sepenuhnya terpulang kepada anda untuk mengelakkan berlari skrip tidak boleh dipercayai.
    • Bypass - Semua berjalan tanpa amaran. Berhati-hati dengan yang ini.
    • Tidak jelas - Tiada dasar ditakrifkan dalam skop semasa. Ini digunakan untuk membenarkan perubahan dasar yang ditakrifkan dalam skop yang lebih rendah (lebih terperinci di bawah) atau kepada kegagalan OS.

    Seperti yang dicadangkan oleh deskripsi Undefined, dasar di atas boleh ditetapkan dalam satu atau lebih daripada beberapa skop. Anda boleh menggunakan Get-ExecutionPolicy, dengan parameter -List, untuk melihat semua skop dan konfigurasi semasa mereka.

    Skop ini disenaraikan dalam susunan keutamaan, dengan skop yang paling jelas ditakrifkan yang lain. Sekiranya tiada dasar ditakrifkan, sistem akan kembali kepada tetapan lalainya (dalam kebanyakan kes, ini adalah Terhad).

    • MachinePolicy mewakili Dasar Kumpulan yang berkuatkuasa di peringkat Komputer. Ini biasanya digunakan hanya dalam domain, tetapi boleh dilakukan secara setempat.
    • UserPolicy mewakili Dasar Kumpulan yang berkuat kuasa pada pengguna. Ini juga biasanya hanya digunakan dalam persekitaran perusahaan.
    • Proses adalah skop khusus untuk PowerShell ini. Perubahan kepada dasar dalam skop ini tidak akan menjejaskan proses PowerShell lain yang sedang dijalankan, dan akan tidak berkesan selepas sesi ini ditamatkan. Ini boleh dikonfigurasi oleh parameter -ExecutionPolicy apabila PowerShell dilancarkan, atau ia boleh ditetapkan dengan sintaks Set-PelaksanaanPolicy yang betul dari dalam sesi.
    • CurrentUser adalah skop yang dikonfigurasi dalam pendaftaran setempat dan digunakan untuk akaun pengguna yang digunakan untuk melancarkan PowerShell. Skop ini boleh diubah suai dengan Set-ExecutionPolicy.
    • LocalMachine adalah skop yang dikonfigurasi dalam pendaftaran setempat dan memohon kepada semua pengguna pada sistem. Ini adalah skop lalai yang ditukar jika Set-ExecutionPolicy dijalankan tanpa parameter -Scope. Memandangkan ia terpakai kepada semua pengguna pada sistem, ia hanya boleh diubah dari sesi yang tinggi.

    Oleh kerana artikel ini adalah terutamanya tentang mendapatkan keselamatan untuk memudahkan kebolehgunaan, kami hanya mengambil berat tentang tiga skop yang lebih rendah. Seting MesinPolicy dan UserPolicy hanya berguna jika anda ingin menguatkuasakan dasar yang terhad yang tidak begitu mudah dilalui. Dengan mengekalkan perubahan kami pada tahap Proses atau di bawah, kami dengan mudah boleh menggunakan apa jua dasar dasar yang kami anggap sesuai untuk situasi tertentu pada bila-bila masa.

    Untuk mengekalkan keseimbangan antara keselamatan dan kebolehgunaan, dasar yang ditunjukkan dalam tangkapan skrin mungkin lebih baik. Menetapkan dasar LocalMachine kepada Restricted umumnya menghalang skrip yang dijalankan oleh sesiapa sahaja selain anda. Sudah tentu, ini boleh dilewati pengguna yang tahu apa yang mereka lakukan tanpa banyak usaha. Tetapi ia mesti menyimpan mana-mana pengguna yang tidak berteknologi tidak sengaja mencetuskan sesuatu yang melanda PowerShell. Mempunyai CurrentUser (i.e .: anda) ditetapkan sebagai Tidak Terikat membolehkan anda untuk melaksanakan skrip secara manual dari baris arahan namun anda suka, tetapi menyimpan peringatan berhati-hati untuk skrip yang dimuat turun dari Internet. Tetapan RemoteSigned di peringkat Proses perlu dilakukan dengan cara pintas ke PowerShell.exe atau (seperti yang akan kami lakukan di bawah) dalam nilai Registry yang mengawal tingkah laku skrip PowerShell. Ini akan memudahkan fungsinya untuk klik dua kali untuk skrip yang anda tulis, sambil meletakkan halangan yang lebih kuat terhadap skrip pelaksanaan (skrip yang berpotensi berniat jahat) daripada sumber luaran yang tidak disengajakan. Kami ingin melakukan ini di sini kerana lebih mudah untuk tidak klik dua kali skrip daripada biasanya untuk memanggilnya secara manual dari sesi interaktif.

    Untuk menetapkan dasar CurrentUser dan LocalMachine seperti pada tangkapan skrin di atas, jalankan perintah berikut dari sesi PowerShell yang ditinggikan:

    Set-ExecutionPolicy Set-Execution RestrictedPolicy Unrestricted -Scope CurrentUser

    Untuk menguatkuasakan dasar RemoteSigned pada skrip yang dijalankan dari Explorer, kita perlu menukar nilai di dalam salah satu kekunci pendaftaran yang kita lihat sebelumnya. Ini amat penting kerana, bergantung pada versi PowerShell atau Windows anda, konfigurasi lalai mungkin memintas semua tetapan ExecutionPolicy kecuali AllSigned. Untuk melihat konfigurasi semasa untuk komputer anda, anda boleh menjalankan arahan ini (pastikan HKCR PSDrive dipetakan terlebih dahulu):

    Get-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command | Select-Object '(Lalai)'

    Konfigurasi lalai anda mungkin akan menjadi salah satu daripada dua rentetan berikut, atau sesuatu yang agak serupa:

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

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-file" "% 1"

    (Dilihat pada Windows 8.1 x64, dengan PowerShell 4.0)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "if ((Get-ExecutionPolicy) -one 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass '"

    Yang pertama tidak terlalu buruk, kerana yang dilakukannya adalah melaksanakan skrip di bawah tetapan ExecutionPolicy yang ada. Ia boleh dibuat dengan lebih baik, dengan menguatkuasakan sekatan yang lebih ketat untuk tindakan yang lebih kerap berlaku kemalangan, tetapi ini pada asalnya tidak bertujuan untuk dicetuskan pada klik dua kali, dan dasar lalai biasanya Terbatas selepas semua. Walau bagaimanapun, pilihan kedua adalah pintasan penuh dari apa pun ExecutionPolicy yang mungkin anda miliki di tempatnya - bahkan Terbatas. Oleh kerana bypass tersebut akan digunakan dalam skop Proses, ia hanya akan mempengaruhi sesi yang dilancarkan apabila skrip dijalankan dari Explorer. Bagaimanapun, ini bermakna anda boleh melancarkan skrip pelancaran yang mungkin anda harapkan (dan mahu) dasar anda untuk melarang.

    Untuk menetapkan ExecutionPolicy tahap proses untuk skrip yang dilancarkan dari Explorer, sejajar dengan tangkapan skrin di atas, anda perlu mengubah nilai pendaftaran yang sama yang kami tanyakan sahaja. Anda boleh melakukannya secara manual di Regedit, dengan mengubahnya kepada perkara ini:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"

    Anda juga boleh menukar tetapan dari dalam PowerShell jika anda lebih suka. Ingat untuk melakukan ini dari sesi yang tinggi, dengan HKCR PSDrive dipetakan.

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Lalai) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -ExecutionPolicy "" RemoteSigned " % 1 "'

    Jalankan skrip PowerShell sebagai Pentadbir.

    Sama seperti idea yang tidak baik untuk melumpuhkan UAC sepenuhnya, ia juga amalan keselamatan yang buruk untuk menjalankan skrip atau program dengan keistimewaan tinggi kecuali anda sebenarnya memerlukannya untuk melakukan operasi yang memerlukan akses Administrator. Jadi, membina prompt UAC ke dalam tindakan lalai untuk skrip PowerShell tidak digalakkan. Walau bagaimanapun, kami boleh menambah pilihan menu konteks baharu untuk membolehkan kami dengan mudah menjalankan skrip dalam sesi yang ditinggikan ketika kami perlu. Ini sama dengan kaedah yang digunakan untuk menambah "Buka dengan Notepad" ke menu konteks semua fail - tetapi di sini kita hanya akan menyasarkan skrip PowerShell. Kami juga akan menjalankan beberapa teknik yang digunakan dalam artikel terdahulu, di mana kami menggunakan fail kumpulan bukannya hacks pendaftaran untuk melancarkan skrip PowerShell kami.

    Untuk melakukan ini dalam Regedit, kembali ke kunci Shell, di:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    Di sana, buat sub-kunci baru. Panggil ia "Jalankan dengan PowerShell (Admin)". Di bawah itu, buat sub-kunci lain yang dipanggil "Perintah". Kemudian, tetapkan nilai "(Default)" di bawah Perintah untuk ini:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Proses Mula PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ "% 1 \"' -Verb RunAs  "

    Melakukan perkara yang sama dalam PowerShell sebenarnya memerlukan tiga baris kali ini. Satu untuk setiap kunci baru, dan satu untuk menetapkan nilai "(Default)" untuk Perintah. Jangan lupa ketinggian dan pemetaan HKCR.

    New-Item 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (Admin)' New-Item 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run with PowerShell (Admin) \ Command' Set-ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run dengan PowerShell (Admin) \ Command "(Default)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" Start-Process PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Runal Verb "'

    Juga, berikan perhatian dengan teliti terhadap perbezaan antara tali yang dimasukkan melalui PowerShell dan nilai sebenar yang masuk ke Pendaftaran. Khususnya, kita perlu membungkus keseluruhannya dalam petikan tunggal, dan dua kali ganda pada petikan tunggal dalaman, untuk mengelakkan kesilapan dalam parsing arahan.

    Sekarang anda harus mempunyai kemasukan menu konteks baharu untuk skrip PowerShell, yang dipanggil "Run with PowerShell (Admin)".

    Pilihan baru akan menimbulkan dua contoh PowerShell berturut-turut. Yang pertama hanya pelancar untuk yang kedua, yang menggunakan Proses Permulaan dengan parameter "-Various RunAs" untuk meminta ketinggian untuk sesi baru. Dari sana, skrip anda harus dapat dijalankan dengan keistimewaan Pentadbir selepas anda mengklik melalui prom UAC.

    Sentuhan terakhir.

    Terdapat hanya beberapa tweak untuk ini yang boleh membantu menjadikan hidup lebih mudah lagi. Untuk satu, bagaimana hendak menyingkirkan fungsi Notepad sepenuhnya? Cukup salin nilai "(Default)" dari kunci Perintah di bawah Edit (di bawah), ke lokasi yang sama di bawah Buka.

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"

    Atau, anda boleh menggunakan sedikit PowerShell ini (dengan Admin & HKCR tentu saja):

    Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command '(Default) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""% 1 "'

    Satu lagi kegusaran kecil adalah kebiasaan konsol hilang setelah skrip selesai. Apabila itu berlaku, kami tidak mempunyai peluang untuk menyemak output skrip untuk kesilapan atau maklumat berguna lain. Ini boleh dijaga dengan meletakkan jeda di hujung setiap skrip anda, sudah tentu. Secara bergantian, kita boleh mengubah nilai "(Default)" untuk kekunci Perintah kami untuk memasukkan parameter "-NoExit". Berikut adalah nilai yang diubah suai.

    (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" "" & Proses Mula PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ "% 1 \"' - Kata kerja RunAs "

    Dan tentu saja, kami akan memberikan anda arahan PowerShell juga. Peringatan terakhir: Kenaikan & HKCR!

    (Bukan 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 \ Run dengan PowerShell (Admin) \ Command "(Lalai)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "" & Start-Process PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Runal Verb "'

    Mengambilnya untuk putaran.

    Untuk menguji ini, kami akan menggunakan skrip yang dapat menunjukkan kepada kami tetapan ExecutionPolicy di tempat dan sama ada skrip dilancarkan dengan kebenaran Pentadbir atau tidak. Skrip akan dipanggil "MyScript.ps1" dan disimpan dalam "D: \ Lab Lab" pada sistem sampel kami. Kod di bawah adalah untuk rujukan.

    jika (([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 tindakan "Jalankan dengan PowerShell":

    Menggunakan "Jalankan dengan PowerShell (Admin)" tindakan, selepas mengklik melalui UAC:

    Untuk menunjukkan ExecutionPolicy dalam tindakan di skop Proses, kita boleh membuat Windows berfikir fail datang dari Internet dengan sedikit kod PowerShell ini:

    Add-Content -Path 'D: \ Lab Labs \ MyScript.ps1' -Value "[ZoneTransfer] 'nZoneId = 3" -Stream' Zone.Identifier '

    Nasib baik, kami telah -NoExit didayakan. Jika tidak, kesilapan itu hanya akan berkedip, dan kami tidak tahu!

    Zon.Identifier boleh dialih keluar dengan ini:

    Clear-Content -Path 'D: \ Lab Labs \ MyScript.ps1' -Stream 'Zone.Identifier'

    Rujukan yang berguna:

    • Menjalankan skrip PowerShell dari fail kumpulan - Blog Pemrograman Daniel Schroeder
    • Memeriksa keizinan Pentadbir di PowerShell - Hey, Scripting Guy! Blog