Kā novērst izpildes politikas ierobežojuma kļūdu Windows PowerShell

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.

Windows PowerShell konsole, kurā redzams, ka script.ps1 fails ir bloķēts, jo skriptu palaišana sistēmā ir atspējota

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.

Windows PowerShell, kurā redzams Get-ExecutionPolicy -List ar MachinePolicy, UserPolicy, Process, CurrentUser un LocalMachine darbības jomām

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

OpcijaPastāvīgumsAdministratīvās tiesībasGalvenais kompromissLabākā atbilstība
Unblock-File, lietojot RemoteSignedFailam specifisksParasti nav nepieciešama paaugstināšana jūsu pašu failamJūs skaidri uzticaties vienam lejupielādētam failam; citi lejupielādēti parakstīti faili joprojām pakļauti RemoteSignedViens pārskatīts skripts, lejupielādēts no interneta
Process RemoteSignedTikai pašreizējā PowerShell procesāNav LocalMachine maiņasZems pastāvīgums, bet lejupielādētiem parakstītiem failiem joprojām var būt nepieciešama atbloķēšanaPagaidu izstrādes vai problēmu novēršanas sesija
CurrentUser RemoteSignedPastā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ņaPersoniska izstrādes darbstacija
LocalMachine RemoteSignedPastāv visiem lietotājiemNepieciešama paaugstināšanaPlašāka ietekme visā datorāKoplietots dators, kur administrators apzināti vēlas vienādu politiku visiem lietotājiem
AllSignedAtkarīgs no darbības jomasAtkarīgs no darbības jomasNepieciešami paraksti pat lokāli izveidotiem skriptiem; pievieno sertifikāta un parakstīšanas plūsmas pārlādējumuOrganizācijas ar koda parakstīšanas procesu
BypassAtkarīgs no darbības jomas; parasti lieto Process jomāAtkarīgs no darbības jomasNav skriptu bloķēšanas, brīdinājumu vai jautājumu no izpildes politikasKontrolē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.

Windows meklēšanas rezultāti Windows PowerShell ar izceltu opciju Palaist kā administratoram

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.

Administratora Windows PowerShell, kurā redzams Set-ExecutionPolicy RemoteSigned un izpildes politikas apstiprinājuma jautājums

Š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

Windows PowerShell, kurā redzams Set-ExecutionPolicy Process darbības jomā ar Bypass un Get-ExecutionPolicy -List, kas rāda Process 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.

Windows faila Rekvizītu dialoglodziņš script.ps1, kurā redzama Drošības sadaļa un Unblock izvēles rūtiņa

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.

Windows PowerShell, kurā redzams Set-ExecutionPolicy Restricted apstiprinājuma jautājums

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

Windows PowerShell, kas veiksmīgi palaida script.ps1 un atgriež Script ran successfully

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ācijaIeteicamais sākumpunktsKāpēc
Jūs lejupielādējāt vienu skriptu no avota, kam uzticatiesSaglabājiet RemoteSigned un pēc pārskatīšanas izmantojiet Unblock-FileMaina uzticēšanos vienam failam, nevis visiem skriptiem
Jums ir nepieciešami skripti tikai pašreizējā problēmu novēršanas sesijāProcess RemoteSignedAizveras kopā ar sesiju un saglabā interneta izcelsmes ierobežojumus
Jūs regulāri rakstāt un palaidat savus skriptusCurrentUser RemoteSignedPastāvīga ērtība vienam lietotājam, neietekmējot visus datorā
Jūs administrējat koplietotu darbstacijuNovērtējiet LocalMachine RemoteSigned vai organizācijas politikuKonsekventa uzvedība visiem lietotājiem, bet plašāka ietekme
Jūsu uzņēmums pieprasa izdevēja kontrolētus skriptusAllSigned caur organizācijas parakstīšanas un politikas procesuKonsekventa 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 modelisApsveriet process darbības jomas BypassParedzēts kontrolētām saimniekscenārijiem; izvairieties no tā kā nejauša pastāvīga noklusējuma
MachinePolicy vai UserPolicy ir definētaSekojiet IT vai grupas politikaiLokā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ž.

Atstājiet komentāru

Kā novērst kļūdu "ENOSPC: sasniegts failu vērotāju sistēmas ierobežojums" operētājsistēmā Linux

Kā novērst kļūdu "ENOSPC: sasniegts failu vērotāju sistēmas ierobežojums" operētājsistēmā Linux

Novērsiet Linux ENOSPC failu vērotāja kļūdas, pārbaudot inotify ierobežojumus, atrodot procesus, kuros ir daudz vērotāja resursu, droši paaugstinot ierobežojumus un padarot izmaiņas pastāvīgas.

Kā novērst kļūdu “Tailwind CSS stili netiek atjaunināti” Vite React lietotnē

Kā novērst kļūdu “Tailwind CSS stili netiek atjaunināti” Vite React lietotnē

Novērsiet Tailwind CSS stilu neatjaunināšanu pakalpojumā Vite React, pārbaudot Tailwind v4 iestatījumus, CSS importēšanu, avota noteikšanu, dinamiskās klases, HMR un novecojušas kešatmiņas.

Kā novērst ModuleNotFoundError kļūdu: Python 3 nav moduļa ar nosaukumu “pip”

Kā novērst ModuleNotFoundError kļūdu: Python 3 nav moduļa ar nosaukumu “pip”

Novērsiet Python 3 ModuleNotFoundError kļūdu pip funkcijai operētājsistēmās Windows, macOS un Linux, izmantojot ensurepip, OS pakotnes, virtuālās vides un interpretētāja pārbaudes.

Kā GitHub SSH novērst kļūdu "Atļauja liegta (publiskā atslēga)"

Kā GitHub SSH novērst kļūdu "Atļauja liegta (publiskā atslēga)"

Novērsiet GitHub SSH atļaujas liegšanu (publiskā atslēga), pārbaudot resursdatoru, aktīvo SSH atslēgu, GitHub kontu, SSO autorizāciju, attālo URL un 22. porta piekļuvi.

Kā novērst kļūdu “Git Push noraidīts: nepārtīšana uz priekšu”, nezaudējot izmaiņas

Kā novērst kļūdu “Git Push noraidīts: nepārtīšana uz priekšu”, nezaudējot izmaiņas

Droši izlabojiet Git ne-ātrās pārtīšanas kļūdu. Aizsargājiet lokālo darbu, ielādējiet attālinātus izmaiņu izmaiņu ierakstus, izvēlieties apvienošanu vai atkārtotu bāzi, atrisiniet konfliktus un veiciet izmaiņu pārtīšanu, nezaudējot izmaiņas.

Kā novērst kļūdu "Nginx 502 Bad Gateway", veicot starpniekservera darbību ar Node.js

Kā novērst kļūdu "Nginx 502 Bad Gateway", veicot starpniekservera darbību ar Node.js

Izlabojiet Nginx 502 Bad Gateway kļūdas ar Node.js augšupējo resursu, pārbaudot lietotnes portu, NGINX žurnālus, proxy_pass adresi, konteineru tīklošanu, taimautus un atkārtotu ielādi.

Kā TypeScript labot kļūdu “Type 'null' nav piešķirams tipam”

Kā TypeScript labot kļūdu “Type 'null' nav piešķirams tipam”

Novērsta TypeScript kļūda “Tips 'null' nav piešķirams tipam”, izmantojot apvienošanas tipus, sašaurināšanu, noklusējuma vērtības un drošas apgalvojumus, izmantojot strictNullChecks.

Kā novērst kļūdu “Prisma Client has not been generated yet”

Kā novērst kļūdu “Prisma Client has not been generated yet”

Novērsiet Prisma Client ģenerēšanas kļūdu, pārbaudot savu ģeneratoru, shēmu, izvades ceļu, importus, versijas, monorepo iestatījumu un izvietošanas būvēšanas soļus.

Kā novērst kļūdu "ERR_MODULE_NOT_FOUND" Node.js ESM importā

Kā novērst kļūdu "ERR_MODULE_NOT_FOUND" Node.js ESM importā

Izlabojiet Node.js ERR_MODULE_NOT_FOUND kļūdu ESM, pārbaudot importēšanas ceļus, failu paplašinājumus, pakotņu instalēšanu, eksportēšanu, ESM režīmu un tīrās instalācijas.

Kā novērst SSL sertifikāta problēmu: Nevar iegūt vietējo izdevēja sertifikātu Git

Kā novērst SSL sertifikāta problēmu: Nevar iegūt vietējo izdevēja sertifikātu Git

Novērsiet Git kļūdu “nevar iegūt vietējo izdevēja sertifikātu”, identificējot uzticības aizmugurprogrammu, instalējot pareizo CA ķēdi un saglabājot SSL verifikāciju iespējotu.