Drošākais veids, kā novērst “Execution Policy Restricted” kļūdu Windows PowerShell, nav kopēt visplašāko komandu, ko varat atrast. Vispirms nosakiet, kura izpildes politika faktiski ir efektīva, un pēc tam izvēlieties šaurāko izmaiņu, kas atbilst tam, ko mēģināt palaist.
Microsoft pašreizējā dokumentācija arī uzsver versijas konteksta nozīmi. Windows PowerShell 5.1 dokumentācija norāda Restricted kā noklusējuma izpildes politiku Windows klientdatoriem. Pašreizējā PowerShell 7.6 dokumentācija definē Default kā RemoteSigned sistēmā Windows. Tomēr, ja visas darbības jomas ir Undefined, Microsoft joprojām dokumentē efektīvo rezerves iestatījumu Windows klientdatoros kā Restricted. Praktiskā mācība ir vienkārša: nesekojiet savai Windows versijai vai kādam apmācību rakstam, lai secinātu savu politiku. Palaidiet politikas komandas tajā datorā, kurā rodas kļūda.
Šis cevedis salīdzina galvenos risinājumus pēc darbības jomas, pastāvīguma, administratīvās ietekmes un uzticēšanās modeļa. Mērķis ir palaist leģitīmu skriptu, nevājinot sistēmu vairāk, nekā nepieciešams.
Ko patiesībā nozīmē ierobežojuma kļūda
Saskaņā ar Restricted politiku PowerShell atļauj atsevišķas komandas, bet neatļauj palaist skriptu failus. Tas ietver PowerShell skriptus un saistītos konfigurācijas vai moduļu skriptu failus. Microsoft raksturo izpildes politiku kā drošības funkciju, kas kontrolē nosacījumus, kādos tiek ielādēti skripti un konfigurācijas faili. Tā nav drošības robeža; Microsoft skaidri norāda, ka lietotājs joprojām var rakstīt komandas interaktīvi. Izlasiet pašreizējo about_Execution_Policies dokumentāciju PowerShell 7.6 un Windows PowerShell 5.1 izpildes politikas dokumentāciju.
Biežā kļūda norāda, ka .ps1 failu nevar ielādēt, jo skriptu palaišana ir atspējota; pirms politikas maiņas fiksējiet precīzu ziņojumu.
Šī atšķirība ir svarīga. Izpildes politika var palīdzēt novērst nejaušu skriptu izpildi, bet RemoteSigned vai Bypass iestatīšana nepadara skriptu uzticamu. Vispirms pārskatiet skriptu un tā avotu.
1. darbība: nosakiet efektīvo politiku un visas darbības jomas
Palaidiet šīs divas komandas:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
Pirmā atgriež efektīvo politiku pašreizējai sesijai. Otrā uzskaita politikas, kas piemērotas MachinePolicy, UserPolicy, Process, CurrentUser un LocalMachine darbības jomās. Microsoft īpaši iesaka Get-ExecutionPolicy -List, lai redzētu politikas, kas var ietekmēt sesiju. Skatiet Get-ExecutionPolicy.
Pārbaudiet visas darbības jomas, nevis pieņemiet, ka LocalMachine vērtība ir tā, kas kontrolē sesiju.
Ja MachinePolicy vai UserPolicy ir definēta, apstājieties, pirms mēģināt piespiest lokālu apvedceļu. Šīs vērtības nāk no grupas politikas un var pārrakstīt izpildes politikas iestatījumus, kas veikti ar PowerShell. Pārvaldītā darba datorā pareizais nākamais solis parasti ir sekot organizācijas procesam vai sazināties ar IT nodaļu.
Izvēlieties risinājumu pēc vajadzības, nevis pēc īsākās komandas
| Opcija | Pastāvīgums | Administratīvās tiesības | Galvenais kompromiss | Labākā atbilstība |
Unblock-File, lietojot RemoteSigned | Failam specifisks | Parasti nav nepieciešama paaugstināšana jūsu pašu failam | Jūs skaidri uzticaties vienam lejupielādētam failam; citi lejupielādēti parakstīti faili joprojām pakļauti RemoteSigned | Viens pārskatīts skripts, lejupielādēts no interneta |
Process RemoteSigned | Tikai pašreizējā PowerShell procesā | Nav LocalMachine maiņas | Zems pastāvīgums, bet lejupielādētiem parakstītiem failiem joprojām var būt nepieciešama atbloķēšana | Pagaidu izstrādes vai problēmu novēršanas sesija |
CurrentUser RemoteSigned | Pastāv jūsu lietotāja kontā | Nepieciešams mainīt visu lietotāju iestatījumus | Ērti regulārai lokālai skriptēšanai; plašāks nekā vienas sesijas maiņa | Personiska izstrādes darbstacija |
LocalMachine RemoteSigned | Pastāv visiem lietotājiem | Nepieciešama paaugstināšana | Plašāka ietekme visā datorā | Koplietots dators, kur administrators apzināti vēlas vienādu politiku visiem lietotājiem |
AllSigned | Atkarīgs no darbības jomas | Atkarīgs no darbības jomas | Nepieciešami paraksti pat lokāli izveidotiem skriptiem; pievieno sertifikāta un parakstīšanas plūsmas pārlādējumu | Organizācijas ar koda parakstīšanas procesu |
Bypass | Atkarīgs no darbības jomas; parasti lieto Process jomā | Atkarīgs no darbības jomas | Nav skriptu bloķēšanas, brīdinājumu vai jautājumu no izpildes politikas | Kontrolēta automatizācija ar savu uzticēšanās un drošības modeli, nevis nejauša pastāvīga iestatījuma |
2. darbība: izmantojiet administratora tiesības tikai visam datoram paredzētai maiņai
Jums nav jāatver paaugstināta PowerShell tikai tāpēc, lai mainītu CurrentUser vai Process darbības jomu. Microsoft norāda, ka paaugstināšana ir nepieciešama, mainot politiku vietējam datoram, tas ir, LocalMachine. Tas ir noderīgs kompromiss: ja tikai jūsu lietotāja kontam ir nepieciešama lokāla skriptēšana, visu lietotāju politikas maiņa pievieno darbības jomu, nepievienojot labumu.
Palaist kā administratoram ir piemērots apzinātai LocalMachine maiņai, bet tas nav nepieciešams Process vai CurrentUser darbības jomai.
Ieteikums pēc vajadzības: izmantojiet CurrentUser izstrādātāja kontam, kas regulāri palaida lokāli izveidotus skriptus. Paturiet LocalMachine administratoram, kas apzināti vēlas, lai vienāds iestatījums ietekmētu visus lietotājus.
3. darbība: regulārai lokālai skriptēšanai apsveriet CurrentUser RemoteSigned
Daudziem personiskiem izstrādes datoriem praktiska pastāvīga izvēle ir:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned ļauj palaist lokālus skriptus, neprasa parakstu, bet skripti, kas atzīmēti kā lejupielādēti no interneta, prasa uzticamu digitālo parakstu, ja vien jūs skaidri neatbloķējat failu. Tas saglabā noderīgu atšķirību starp kodu, ko izveidojāt lokāli, un kodu, kas iegūts no cita avota.
Šis piemērs rāda visam datoram paredzētu RemoteSigned komandu, jo darbības joma ir izlaista; LocalMachine ir noklusējuma darbības joma. Dodiet priekšroku skaidrai darbības jomai, lai ietekme būtu apzināta.
Bieža kļūda ir palaist Set-ExecutionPolicy RemoteSigned bez -Scope. Microsoft dokumentē LocalMachine kā noklusējuma darbības jomu, iestatot izpildes politiku. Tāpēc ir labāk būt skaidram:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Izmaiņas stājas spēkā nekavējoties; PowerShell nav jārestartē CurrentUser vai LocalMachine izmaiņām.
4. darbība: pagaidu sesijai dodiet priekšroku Process darbības jomas politikai
Ja veicat problēmu novēršanu vai vienu reizi palaidat uzticamu lokālu skriptu, izvairieties no pastāvīgas lietotāja vai datora maiņas. Šaurāka opcija ir:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Process darbības joma attiecas tikai uz pašreizējo PowerShell sesiju. Microsoft norāda, ka tā tiek glabāta $Env:PSExecutionPolicyPreference vides mainīgajā un tiek dzēsta, kad process tiek aizvērts.
Ja lielākai lietojumprogrammai, instalētājam vai kontrolētai automatizācijas videi jau ir savs drošības modelis, PowerShell nodrošina arī Bypass:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Process darbības jomas Bypass pazūd, kad PowerShell process tiek aizvērts, bet tas arī noņem izpildes politikas brīdinājumus un bloķēšanu šai sesijai.
Kompromiss: Process darbības joma minimizē pastāvīgumu, bet Bypass ir plašāks nekā RemoteSigned šajā sesijā. Microsoft raksturo Bypass kā tādu, kas neko nebloķē un nerāda brīdinājumus vai jautājumus, un norāda, ka tas ir paredzēts scenārijiem, kurā cita lietojumprogramma nodrošina drošības modeli. Parastai interaktīvai problēmu novēršanas sesijai vispirms izmantojiet Process RemoteSigned, ja vien jums nav konkrēta iemesla Bypass.
Atsevišķam vienreizējam Windows PowerShell procesam varat arī palaist:
powershell.exe -ExecutionPolicy RemoteSigned -File .\script.ps1
PowerShell 7 izpildāmais fails ir pwsh.exe. Komandrindas izpildes politikas iestatījums joprojām nepārraksta izpildes politiku, ko uzspiež grupas politika.
5. darbība: ja RemoteSigned bloķē lejupielādētu skriptu, atbloķējiet tikai šo failu
RemoteSigned atšķirīgi apstrādā failus, kas atzīmēti kā nākuši no interneta. Microsoft dokumentē Unblock-File cmdletu kā tādu, kas noņem šo interneta zonas atzīmi, ļaujot pārskatītam parakstītam skriptam palaisties saskaņā ar RemoteSigned.
Vispirms pārbaudiet skriptu. Ja uzticaties avotam un esat pārskatījis saturu, palaidiet:
Unblock-File -Path .\script.ps1
Varat arī izmantot Unblock izvēles rūtiņu faila Rekvizītu dialoglodziņā. Microsoft norāda, ka Unblock-File veic to pašu pamata darbību. Skatiet Unblock-File.
Viena pārskatīta lejupielādēta skripta atbloķēšana ir šaurāka nekā politikas vājināšana visiem skriptiem datorā.
Varat pārbaudīt, vai failam ir Zone.Identifier alternatīvā datu plūsma, izmantojot:
Get-Item .\script.ps1 -Stream Zone.Identifier -ErrorAction SilentlyContinue
Microsoft norāda, ka lejupielādes metodes nevisi failus atzīmē vienādi, tāpēc šīs plūsmas neesamība nav pierādījums, ka skripts ir drošs.
6. darbība: izmantojiet AllSigned, ja organizācijai ir parakstīšanas plūsma
AllSigned prasa, lai visi skripti un konfigurācijas faili būtu parakstīti ar uzticamu izdevēju, tostarp lokāli izveidotie skripti. Tas dod organizācijai konsekventu izdevēja uzticēšanās plūsmu, bet arī rada operacionālu pārlādējumu: skriptiem ir nepieciešami Authenticode paraksti un lietotājiem ir jāuzticas attiecīgajiem izdevējiem.
Microsoft about_Signing dokumentācija skaidro, kā PowerShell pārbauda skriptu parakstus un kā darbojas uzticamo izdevēju jautājumi.
Ieteikums pēc vajadzības: AllSigned ir jēga, ja jūsu organizācijai jau ir koda parakstīšanas sertifikāti, publicēšanas kontroles un process parakstītu skriptu atjaunināšanai. Vienam izstrādātājam, kas raksta lokālus utilītu skriptus, RemoteSigned parasti saistīts ar mazāk berzes, vienlaikus saglabājot interneta izcelsmes pārbaudi.
7. darbība: necīnieties ar grupas politiku pārvaldītā datorā
PowerShell nodrošina divas politikas darbības jomas, kas nāk no grupas politikas: MachinePolicy un UserPolicy. Microsoft grupas politikas dokumentācija norāda, ka Turn on Script Execution iestatījums var uzspiest Restricted, RemoteSigned vai AllSigned uzvedību pārvaldītiem lietotājiem un datoriem. Iestatījums atrodas:
Administrative Templates\Windows Components\Windows PowerShell
Skatiet about_Group_Policy_Settings.
Ja Get-ExecutionPolicy -List parāda definētu MachinePolicy vai UserPolicy, lokāla Set-ExecutionPolicy komanda var nedot jums paredzēto efektīvo uzvedību. Praktiskais risinājums ir pieprasīt atbilstošo politiku no administratora, izmantot parakstītu skriptu, ja tas ir nepieciešams, vai izmantot apstiprinātu izvietošanas metodi.
8. darbība: atjaunojiet iestatījumu, ko faktiski mainījāt, un pārbaudiet
Pirms mainīt pastāvīgu darbības jomu, ierakstiet tās esošo vērtību:
Get-ExecutionPolicy -Scope CurrentUser
Get-ExecutionPolicy -Scope LocalMachine
Ja vēlāk ir jānoņem iestatītā politikas vērtība, Microsoft dokumentē šīs darbības jomas iestatīšanu uz Undefined:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined
Nekad neizpildiet akli Set-ExecutionPolicy Restricted tikai tāpēc, ka ekrānuzņēmumā tas ir redzams. Bez darbības jomas komanda pēc noklusējuma mērķē uz LocalMachine, un “Restricted” varēja nebūt šīs darbības jomas iepriekšējā vērtība.
Ekrānuzņēmums ilustrē Restricted maiņu, bet reālai atgriešanai jāatjauno darbības joma un vērtība, ko ierakstījāt, nevis jāmin iepriekšējā konfigurācija.
Visbeidzot, pārbaudiet gan efektīvo politiku, gan skriptu:
Get-ExecutionPolicy
Get-ExecutionPolicy -List
.\script.ps1
Veiksmīga skripta palaišana apstiprina, ka tūlītējais simptoms ir novērsts; vēlreiz pārbaudiet politikas sarakstu, lai pārliecinātos, ka neesat atstājis plašāku darbības jomu mainītu nejauši.
Kuru risinājumu izvēlēties?
| Jūsu situācija | Ieteicamais sākumpunkts | Kāpēc |
| Jūs lejupielādējāt vienu skriptu no avota, kam uzticaties | Saglabājiet RemoteSigned un pēc pārskatīšanas izmantojiet Unblock-File | Maina uzticēšanos vienam failam, nevis visiem skriptiem |
| Jums ir nepieciešami skripti tikai pašreizējā problēmu novēršanas sesijā | Process RemoteSigned | Aizveras kopā ar sesiju un saglabā interneta izcelsmes ierobežojumus |
| Jūs regulāri rakstāt un palaidat savus skriptus | CurrentUser RemoteSigned | Pastāvīga ērtība vienam lietotājam, neietekmējot visus datorā |
| Jūs administrējat koplietotu darbstaciju | Novērtējiet LocalMachine RemoteSigned vai organizācijas politiku | Konsekventa uzvedība visiem lietotājiem, bet plašāka ietekme |
| Jūsu uzņēmums pieprasa izdevēja kontrolētus skriptus | AllSigned caur organizācijas parakstīšanas un politikas procesu | Konsekventa paraksta prasība par parakstīšanas pārlādējuma cenu |
| Instalētājam vai kontrolētai automatizācijas sistēmai ir savs drošības modelis | Apsveriet process darbības jomas Bypass | Paredzēts kontrolētām saimniekscenārijiem; izvairieties no tā kā nejauša pastāvīga noklusējuma |
| MachinePolicy vai UserPolicy ir definēta | Sekojiet IT vai grupas politikai | Lokālās darbības jomas maiņas nav pareizā autoritāte |
Biežas kļūdas, kas rada lielāku problēmu nekā sākotnējā kļūda
- Iestatīt Unrestricted vai Bypass pastāvīgi tikai tāpēc, lai palaistu vienu skriptu. Tas paplašina to, kas var tikt izpildīts, kad šaurāka Process, CurrentUser vai failam specifiska maiņa var atrisināt problēmu.
- Palaist visas komandas kā Administratoram. CurrentUser un Process maiņām nav nepieciešama LocalMachine politikas maiņa.
- Ignorēt grupas politiku. Ja ierīce ir pārvaldīta, politika var būt apzināta, un lokāla citas darbības jomas maiņa nenomaina organizācijas kontroli.
- Atbloķēt skriptu, to neizlasot. Unblock-File noņem interneta izcelsmes bloķēšanu; tas nepārbauda kodu.
- Pieņemt, ka parakstīts skripts automātiski ir nekaitīgs. Microsoft norāda, ka parakstīts kods joprojām var būt ļaunprātīgs; paraksti nosaka izdevēja un integritātes informāciju, nevis drošas uzvedības garantiju.
- Aizmirst, kuru darbības jomu mainījāt. Komanda bez
-Scope var ietekmēt LocalMachine, bet Process maiņa pazūd izstājoties.
Secinājums
Lielākajai daļai personisko Windows skriptu CurrentUser RemoteSigned ir saprātīga pastāvīga izvēle, kad regulāri palaidat lokāli izveidotus skriptus, bet Unblock-File ir šaurāka izvēle vienam pārskatītam skriptam, lejupielādētam no interneta. Pagaidu problēmu novēršanas sesijai Process RemoteSigned minimizē pastāvīgumu. Bypass ir leģitīma loma kontrolētā automatizācijā, bet tā kompromiss ir tas, ka izpildes politikas bloķēšana un brīdinājumi tiek noņemti šim procesam. Pārvaldītos datoros grupas politika jāuzskata par autoritāti, nevis par šķērsli, ko apiet.
Tādējādi labākais risinājums nav viena politika visiem. Tā ir mazākā darbības joma un mazāk atļaujošā uzvedība, kas joprojām atbalsta uzticamo skriptu, kuru jums ir jāpalaiž.