Ik probeer een cmd
-bestand uit te voeren dat een PowerShell-script aanroept vanuit cmd.exe
, maar ik krijg deze foutmelding:
Management_Install.ps1
kan niet worden geladen omdat de uitvoering van scripts op dit systeem is uitgeschakeld.
Ik heb dit commando uitgevoerd:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Als ik Get-ExecutionPolicy
vanuit PowerShell uitvoer, wordt Unrestricted
geretourneerd.
PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> powershell .\Management_Install.ps1 1
WAARSCHUWING: x86 PowerShell uitvoeren…
Bestand
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.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 teken:25
.\Management_Install.ps1
<<<< 1
CategoryInfo: NotSpecified: (:) [], PSSecurityException
FullyQualifiedErrorId: RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> PAUZE
Druk op een willekeurige toets om door te gaan. . .
Het systeem is Windows Server 2008R2.
Wat doe ik verkeerd?
Antwoord 1, autoriteit 100%
Als u Windows Server 2008R2 gebruikt, is er een x64en x86versie van PowerShell die beide hun uitvoeringsbeleid moeten hebben. Heb je het uitvoeringsbeleid op beide hosts ingesteld?
Als Beheerderkunt u het uitvoeringsbeleid instellen door dit in uw PowerShell-venster te typen:
Set-ExecutionPolicy RemoteSigned
Zie voor meer informatie De set- ExecutionPolicy-cmdlet.
Als u klaar bent, kunt u het beleid terugzetten naar de standaardwaarde met:
Set-ExecutionPolicy Restricted
Mogelijk ziet u een fout:
Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
To change the execution policy for the default (LocalMachine) scope,
start Windows PowerShell with the "Run as administrator" option.
To change the execution policy for the current user,
run "Set-ExecutionPolicy -Scope CurrentUser".
Het kan dus nodig zijn om de opdracht als volgt uit te voeren (zoals te zien is in opmerkingen):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Antwoord 2, autoriteit 31%
U kunt dit beleid voor één bestand omzeilen door -ExecutionPolicy Bypass
toe te voegen wanneer u PowerShell uitvoert
powershell -ExecutionPolicy Bypass -File script.ps1
Antwoord 3, autoriteit 9%
Ik had een soortgelijk probleem en merkte op dat de standaard cmd
op Windows Server 2012 , draaide de x64-versie.
Voor Windows 10, Windows 7, Windows 8, Windows Server 2008 R2of Windows Server 2012, voer de volgende opdrachten uit als Beheerder:
x86(32 bit)
Open C:\Windows\SysWOW64\cmd.exe
Voer de opdracht uit powershell Set-ExecutionPolicy RemoteSigned
x64(64 bit)
Open C:\Windows\system32\cmd.exe
Voer de opdracht uit powershell Set-ExecutionPolicy RemoteSigned
Je kunt de modus controleren met
- In CMD:
echo %PROCESSOR_ARCHITECTURE%
- In Powershell:
[Environment]::Is64BitProcess
Referenties:
MSDN – Windows PowerShell-uitvoeringsbeleid
Windows – 32bit vs 64bit directory-uitleg
Antwoord 4, autoriteit 6%
De meeste bestaande antwoorden leggen het Hoeuit, maar weinigen leggen het Waaromuit. En voordat u code van vreemden op internet uitvoert, met name code die beveiligingsmaatregelen uitschakelt, moet u precies weten wat u doet. Dus hier is wat meer informatie over dit probleem.
Van de TechNet Over het uitvoeringsbeleid:
Met het uitvoeringsbeleid van Windows PowerShell kunt u bepalen onder welke voorwaarden Windows PowerShell configuratiebestanden laadt en scripts uitvoert.
Waarvan de voordelen, zoals opgesomd door PowerShell Basics – Uitvoeringsbeleid en Code Signingzijn:
- Controle van uitvoering– Beheers het vertrouwensniveau voor het uitvoeren van scripts.
- Command Highjack– Voorkom injectie van commando’s op mijn pad.
- Identiteit– Is het script gemaakt en ondertekend door een ontwikkelaar die ik vertrouw en/of ondertekend met een certificaat van een certificeringsinstantie die ik vertrouw.
- Integriteit– Scripts kunnen niet worden gewijzigd door malware of een kwaadwillende gebruiker.
Als u uw huidige uitvoeringsbeleid wilt controleren, kunt u Get-ExecutionPolicy
uitvoeren . Maar je bent hier waarschijnlijk omdat je het wilt veranderen.
Hiervoor voert u het Set-ExecutionPolicy
cmdlet.
U moet twee belangrijke beslissingen nemen bij het bijwerken van het uitvoeringsbeleid.
Type uitvoeringsbeleid:
Restricted
– Geen enkel lokaal, extern of gedownload script kan op het systeem worden uitgevoerd.AllSigned
– Alle scripts die worden uitgevoerd, moeten digitaal worden ondertekend.RemoteSigned
– Alle externe scripts (UNC) of gedownloade moeten worden ondertekend.Unrestricted
– Er is geen handtekening vereist voor welk type script dan ook.
Reikwijdte van nieuwe wijziging
LocalMachine
– Het uitvoeringsbeleid is van invloed op alle gebruikers van de computer.CurrentUser
– Het uitvoeringsbeleid is alleen van invloed op de huidige gebruiker.Process
– Het uitvoeringsbeleid is alleen van invloed op het huidige Windows PowerShell-proces.
= Standaard
Bijvoorbeeld: als u het beleid wilt wijzigen in RemoteSigned voor alleen de CurrentUser, voert u de volgende opdracht uit:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Opmerking: om het uitvoeringsbeleid te wijzigen, moet u PowerShell als beheerderuitvoeren.
Als u in de normale modus bent en probeert het uitvoeringsbeleid te wijzigen, krijgt u de volgende foutmelding:
Toegang tot de registersleutel ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’ is geweigerd. Als u het uitvoeringsbeleid voor het standaardbereik (LocalMachine) wilt wijzigen, start u Windows PowerShell met de optie “Als administrator uitvoeren”.
Als u de interne beperkingen op uw eigen scripts die niet van internet zijn gedownload (of in ieder geval geen UNC-metadata bevatten), wilt aanscherpen, kunt u het beleid dwingen om alleen ondertekende sripts uit te voeren. Om uw eigen scripts te ondertekenen, kunt u de instructies volgen in het artikel van Scott Hanselman over PowerShell-scripts ondertekenen.
Opmerking: de meeste mensen krijgen deze foutmelding waarschijnlijk wanneer ze Powershell openen, omdat het eerste wat PS probeert te doen wanneer het wordt gestart, het uitvoeren van uw gebruikersprofielscript is dat uw omgeving instelt zoals u dat wilt .
Het bestand bevindt zich meestal in:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Je kunt de exacte locatie vinden door de powershell-variabele uit te voeren
$profile
Als er niets is dat u belangrijk vindt in het profiel en u niet wilt poepen met uw beveiligingsinstellingen, kunt u het gewoon verwijderen en powershell zal niets vinden dat het niet kan uitvoeren.
Antwoord 5, autoriteit 2%
In Windows 7:
Ga naar het menu Start en zoek naar “Windows PowerShell ISE”.
Klik met de rechtermuisknop op de x86-versie en kies “Als administrator uitvoeren”.
Plak in het bovenste gedeelte Set-ExecutionPolicy RemoteSigned
; voer het script uit. Kies “Ja”.
Herhaal deze stappen ook voor de 64-bits versie van Powershell ISE (de niet-x86-versie).
Ik verduidelijk alleen de stappen waar @Chad Miller op gezinspeeld heeft. Bedankt Tsjaad!
Antwoord 6, autoriteit 2%
Ook dit commando uitvoeren voordat het script het probleem oplost:
set-executionpolicy unrestricted
Antwoord 7
Als u zich in een omgeving bevindt waar u geen beheerder bent, kunt u het uitvoeringsbeleid speciaal voor u instellen, zonder dat hiervoor een beheerder nodig is.
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
of
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
Je kunt er alles over lezen in het Help-item.
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
Antwoord 8
RemoteSigned: alle scripts die u zelf hebt gemaakt, worden uitgevoerd en alle scripts die van internet zijn gedownload, moeten worden ondertekend door een vertrouwde uitgever.
OK, verander het beleid door simpelweg te typen:
Set-ExecutionPolicy RemoteSigned
Antwoord 9
We kunnen de status van het huidige ExecutionPolicy
verkrijgen met de onderstaande opdracht:
Get-ExecutionPolicy;
Standaard is het Beperkt. Om de uitvoering van PowerShell-scripts mogelijk te maken, moeten we dit ExecutionPolicy instellen als Bypassof Unrestricted.
We kunnen het beleid voor Huidige gebruiker instellen als Bypass
of Unrestricted
door een van de onderstaande PowerShell-opdrachten te gebruiken:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
Onbeperktbeleid laadt alle configuratiebestanden en voert alle scripts uit. Als u een niet-ondertekend script uitvoert dat van internet is gedownload, wordt u om toestemming gevraagd voordat het wordt uitgevoerd.
Terwijl in het beleid Bypassniets wordt geblokkeerd en er geen waarschuwingen of prompts zijn tijdens het uitvoeren van het script. Bypass ExecutionPolicy
is meer ontspannen dan Unrestricted
.
Antwoord 10
Ik gebruik Windows 10en kon geen enkele opdracht uitvoeren. Het enige commando dat me wat aanwijzingen gaf was dit:
[x64]
- Open C:\Windows\SysWOW64\cmd.exe [als beheerder]
- Voer het commando> powershell Set-ExecutionPolicy Unrestricted
Maar dit werkte niet. Het was beperkt. Waarschijnlijk nieuw beveiligingsbeleid voor Windows10. Ik had deze fout:
Set-ExecutionPolicy: Windows PowerShell heeft uw uitvoeringsbeleid bijgewerkt, maar de instelling wordt overschreven door een beleid dat is gedefinieerd op een specifieker bereik. Vanwege de overschrijving behoudt uw shell zijn huidige effectieve uitvoeringsbeleid van…
Dus ik vond een andere manier (oplossing):
- Open opdracht/console uitvoeren (Win+ R)
- Type: gpedit.msc(GroepsbeleidEditor)
- Blader naar Lokaal computerbeleid-> Computerconfiguratie-> Beheersjablonen-> Windows-componenten-> Windows Powershell.
- Schakel “Scriptuitvoering in” in
- Stel het beleid naar wens in. Ik heb de mijne ingesteld op “Alle scripts toestaan“.
Open nu PowerShell en geniet ervan 😉
Antwoord 11
- Open powershell als administratie
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
gebruik deze opdracht
Antwoord 12
Win+ Ren typ de opdracht kopiëren en plakken en druk op OK:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
En voer je script uit.
Vervolg wijzigingen zoals:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
Antwoord 13
u kunt dit proberen en de optie “Alle” selecteren
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Antwoord 14
Het instellen van het uitvoeringsbeleid is omgevingsspecifiek. Als je een script probeert uit te voeren vanuit de draaiende x86 ISEdie je hebt om de x86 PowerShell te gebruiken om het uitvoeringsbeleid in te stellen. Evenzo, als u de 64-bits ISE gebruikt, moet u het beleid instellen met de 64-bits PowerShell.
Antwoord 15
Je kunt dit ook omzeilen door het volgende commando te gebruiken:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
Je kunt ook dit artikel van Scott Sutherland lezen waarin 15 verschillende manieren worden uitgelegd om het PowerShell Set-ExecutionPolicy
te omzeilen als je geen beheerdersrechten hebt:
15 manieren om de PowerShell te omzeilen Uitvoeringsbeleid
Antwoord 16
- Open opdracht/console uitvoeren (Win + R)
Typ: gpedit. msc(Groepsbeleid-editor) - Blader naar Lokaal computerbeleid-> Computerconfiguratie-> Beheersjablonen-> Windows-componenten-> Windows Powershell.
- Inschakelen“Scriptuitvoering inschakelen”
Stel het beleid naar behoefte in. Ik heb de mijne ingesteld op “Alle scripts toestaan”.
Voer nu het run-commando uit wat je ook gebruikt.. Vertrouw erop dat de app zal draaien.. Veel plezier 🙂
Antwoord 17
Ik heb ook een soortgelijk probleem gehad, probeer dit, ik hoop dat iemand er iets aan heeft
Omdat ik Windows gebruik, volgde ik de onderstaande stappen:
Open de opdrachtprompt als beheerder en ga dan naar dit pad
C:\Users\%username%\AppData\Roaming\npm\
Zoek naar het bestand ng.ps1 in deze map (dir)
en verwijder het vervolgens (del ng.ps1)
U kunt hierna ook de npm-cache wissen, hoewel het ook zonder deze stap zou moeten werken.
Ik hoop dat het helpt zoals het voor mij werkte.
Hopelijk helpt het
Antwoord 18
In de PowerShell ISE-editor vond ik eerst de volgende regel toegestane scripts.
Set-ExecutionPolicy RemoteSigned -Scope Process
Antwoord 19
- Open PowerShell als beheerder en voer Set-ExecutionPolicy -Scope CurrentUser
- Geef RemoteSignedop en druk op Enter
- Voer Set-ExecutionPolicy -Scope CurrentUser
- Geef Onbeperktop en druk op Enter
uit
uit
Antwoord 20
Dit heeft mijn probleem opgelost
Open Windows PowerShell
-opdracht en voer onderstaande query uit om ExecutionPolicy
te wijzigen
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
als het om bevestiging van wijzigingen vraagt, drukt u op ‘Y’ en drukt u op enter.
Antwoord 21
Ik krijg nog een waarschuwing wanneer ik probeer Set-ExecutionPolicy RemoteSigned
uit te voeren
Ik heb het opgelost met deze commando’s
Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false
Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false
Antwoord 22
Open de Powershell-console als beheerder en stel vervolgens het uitvoeringsbeleid in
Set-ExecutionPolicy -ExecutionPolicy Remotesigned
Antwoord 23
Set-ExecutionPolicy RemoteSigned
Het uitvoeren van deze opdracht in de beheerdersmodus in powershell zal het probleem oplossen.
Antwoord 24
In PowerShell 2.0 was het uitvoeringsbeleid standaard uitgeschakeld.
Vanaf dat moment heeft het PowerShell-team veel verbeteringen aangebracht en ze zijn ervan overtuigd dat gebruikers niet veel zullen breken tijdens het uitvoeren van scripts. Dus vanaf PowerShell 4.0 en later is het standaard ingeschakeld.
Typ in uw geval Set-ExecutionPolicy RemoteSigned
in de PowerShell-console en zeg ja.
Antwoord 25
Ik had vandaag hetzelfde probleem. 64-bits uitvoeringsbeleid was onbeperkt, terwijl 32-bits beperkt was.
Hier leest u hoe u alleen het 32-bits beleid op afstand kunt wijzigen:
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
Antwoord 26
Ga naar het registerpad HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
en stel ExecutionPolicy
in op RemoteSigned
.
Antwoord 27
Als je hier bent omdat je het uitvoert met Rubyof Chefen gebruik “ systeemuitvoering, voer als volgt uit:
`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`
Dat commando is om de map “MyDocuments” te krijgen.
-ExecutionPolicy Unrestricted
doet het.
Ik hoop dat het nuttig is voor iemand anders.
Antwoord 28
Verschillende antwoorden wijzen op uitvoeringsbeleid. Sommige dingen vereisen echter ook “runas administrator”. Dit is het veiligst omdat er geen permanente wijziging is in het uitvoeringsbeleid en voorbij beheerdersbeperkingen kan komen. Gebruik met schedtask om een batch te starten met:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
van zowel Jack Edmonds hierboven als Peter Mortensen / Dhana van post Hoe voer ik een applicatie uit als “uitvoeren als beheerder” vanaf de opdrachtprompt?
Antwoord 29
Ik ontdekte dat deze regel het beste werkte voor een van mijn Windows Server 2008R2-servers. Een paar anderen hadden geen problemen zonder deze regel in mijn PowerShell-scripts:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
Antwoord 30
Je kunt een speciale manier gebruiken om het te omzeilen:
Get-Content "PS1scriptfullpath.ps1" | Powershell-NoProfile -
Het stuurt de inhoud van het powershell-script naar powershell.exe en voert het uit waarbij het uitvoeringsbeleid wordt omzeild.