2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Hoe schakel ik de uitvoering van PowerShell scripts in?

Als ik probeer mijn PowerShell script uit te voeren krijg ik de volgende foutmelding:

Bestand C: GemeenschappelijkScriptshello.ps1 kan niet worden geladen omdat de uitvoering van scripts op dit systeem is uitgeschakeld. Zie “get-help about_signing” voor meer details. Op regel:1 char:13 + .\hello.ps1 << + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Antwoorden (10)

451
451
451
2010-02-08 18:44:16 +0000
    1. Start Windows PowerShell met de optie “Uitvoeren als beheerder”. Alleen leden van de groep Beheerders op de computer kunnen het uitvoeringsbeleid wijzigen.
    1. Schakel het uitvoeren van unsigned scripts in door:

in te voeren Hiermee kunt u unsigned scripts uitvoeren die u op uw lokale computer schrijft en ondertekende scripts van het internet.

Zie ook Running Scripts bij Microsoft TechNet Library.

91
91
91
2010-02-08 18:43:25 +0000

De Default Execution Policy is ingesteld op beperkt, u kunt het zien door te typen:

Get-ExecutionPolicy

U dient het volgende in te typen om het naar onbeperkte modus te laten gaan:

Set-ExecutionPolicy unrestricted

Hoop dat dit helpt

66
66
66
2013-01-14 00:46:49 +0000

Op mijn machine die ik gebruik om scripts te ontwikkelen, zal ik -onbeperkt als hierboven- gebruik maken. Bij het inzetten van mijn scripts naar een eindgebruikersmachine zal ik echter gewoon powershell oproepen met de -executionpolicy-schakelaar:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

We kunnen de status van het huidige ExecutionPolicy krijgen door het onderstaande commando:

Get-ExecutionPolicy;

Standaard is het Beperkt. Om de uitvoering van PowerShell Scripts mogelijk te maken moeten we dit Uitvoeringsbeleid instellen als Bypass of Unrestricted.

We kunnen het beleid voor de huidige gebruiker instellen als Bypass of Unrestricted door gebruik te maken van een van de onderstaande PowerShell-commando’s:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Unrestricted beleid laadt alle configuratiebestanden en voert alle scripts uit. Als u een niet-ondertekend script uitvoert dat van het internet is gedownload, wordt u om toestemming gevraagd voordat het wordt uitgevoerd.

Terwijl in Bypass beleid niets wordt geblokkeerd en er geen waarschuwingen of prompts zijn tijdens de uitvoering van het script. Bypass ExecutionPolicy is meer ontspannen dan Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

Afhankelijk van de Windows-versie en -configuratie kan het zijn dat u zelfs in de Unrestricted-modus de volgende waarschuwing krijgt:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

De oplossing is het gebruik van de “bypass”-politiek, ingeschakeld met de volgende opdracht:

Set-ExecutionPolicy Bypass

Uit de documentatie :

Bypass: Niets is geblokkeerd en er zijn geen waarschuwingen of aanwijzingen.

Dit is duidelijk onveilig, gelieve de risico’s te begrijpen.

3
3
3
2017-11-29 10:10:20 +0000

Een reg key met: Windows Registry Editor Versie 5.00

[HKEYYLOCALMACHINE_SOFTWARE] “EnableScripts”=woord:0000000001 “ExecutionPolicy”=“Bypass”

en:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

werkt inderdaad ook.

1
1
1
2018-12-04 22:06:53 +0000

Om een of andere reden heeft het PowerShell cmdlet niet de lokale uitvoering wereldwijd mogelijk gemaakt, alleen voor de lokale gebruikerscontext. Als ik bijvoorbeeld een Powershell script zou proberen te starten vanuit CygWin’s bash prompt, die onder zijn eigen gebruikerscontext draait, zou het niet draaien, waardoor de “is niet digitaal ondertekend”-fout ontstaat. Het antwoord was om naar de Local Group Policy Editor te gaan -> Local Computer Policy -> Administrative Templates -> Windows Components -> Windows PowerShell en dubbelklik op ‘Turn on Script Execution’. Dit laat me dan veranderen in ‘Enabled’ en dan het uitvoeringsbeleid van ‘Allow local scripts and remote signed scripts’ en laat het wereldwijd werken, ongeacht de gebruikerscontext.

1
1
1
2019-04-24 14:47:15 +0000

Het (correct) instellen van het beleid is de beste keuze, maar op mijn beheerde systemen heb ik niet de mogelijkheid om dat beleid te wijzigen.

** Voor mij is de eenvoudigste manier om het beleid te wijzigen het openen van het script in de “PowerShell ISE”, de code (of een deel van de code) te markeren en dan te klikken op de “Run Selection” knop (of de F8 snelkoppeling te gebruiken). **

Dit is niet de beste oplossing & doet weinig voor het automatiseren van taken, maar het laat me wel het gebruik & nut van PowerShell toe terwijl het niet op mijn IS afdeling draait.

1
1
1
2018-12-15 01:09:31 +0000

Het geaccepteerde antwoord is juist, maar de beleidsaanpassing is alleen beschikbaar voor de momenteel lopende instantie van de Powershell, dat wil zeggen zodra de instantie van de Powershell is afgesloten. De polis zal worden gereset. Als een gebruiker een andere instantie van de Powershell opnieuw opent, zal de standaard policy worden toegepast die Restricted

is Voor mij moet ik de VisualStudio Code console en g++ van cygwin gebruiken om dingen te bouwen. De console maakt gebruik van Powershell, met het standaard beleid kan er niets gedaan worden. Een oplossing is het veranderen van het beleid telkens als de console wordt afgevuurd in VisualStudio Code console, misschien een script om het beleid te veranderen.

Ik ben lui, dus een andere oplossing is als ik de Powershell in admin mode draai, vergelijkbaar met wat het geaccepteerde antwoord doet. maar met een extra parameter die de waarden in de Registry tabel verandert. Als het eenmaal gedaan is. Andere instanties van Powershell zullen standaard het RemoteSigned beleid gebruiken.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

De reden dat de reg toets werkt, is omdat het precies doet wat de PS commando’s doen. De commando’s schrijven de wijzigingen in de reg toetsen. Commando’s zijn veel sneller en eenvoudiger dan het maken van een reg-sleutel of het graven in het register.