De ce nu sunt difuzate scripturile mele?

Am scris un fișier batch simplu ca un script de powershell, iar eu primesc erori atunci când rulează.

Este într-un director de scripturi pe calea mea.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

M-am uitat în ajutor, dar este mai puțin decât util.

0
fr hi bn
acesta este motivul pentru care fișierele batch live pe!
adăugat autor Matthew Lock, sursa

7 răspunsuri

De asemenea, merită să știți că este posibil să fie necesar să includeți . \ în fața numelui de script. De exemplu:

.\scriptname.ps1
0
adăugat

Ar putea fi nivelul de securitate implicit al PowerShell, care (IIRC) va rula numai scripturi semnate.

Încercați să tastați acest lucru:

set-executionpolicy remotesigned

Acest lucru va spune PowerShell pentru a permite script-uri nesemnate locale pentru a rula (care este, pe o unitate locală).

Apoi, încercați să executați din nou scriptul.

0
adăugat
Și trebuie să rulați scriptul PowerShell cu privilegii administrative sub Windows 7, de asemenea.
adăugat autor Rod, sursa
Trebuie să rulați Powershell cu privilegii de administrator, cel puțin sub Windows 8!
adăugat autor ComFreek, sursa
Acesta este un răspuns destul de terifiant. Pentru unul, acesta permanent modifică nivelul de securitate implicit al Powershell în moduri potențial nedorite (și nesigure). În al doilea rând, nu reușește să explice în mod adecvat scripturile semnate la distanță și scripturile locale nesemnate? dar nu scripturile de la distanță nesemnate, care necesită ocazional Chocolatey ? vor fi acordate privilegii de execuție. Cei mai mulți utilizatori probabil vor
În timp ce îngrijorarea lui Cecil asupra unor deficiențe ale răspunsului este corectă, am vrut să subliniez câteva lucruri. 1) Cele două legături ale lui par să deschidă aceeași pagină pentru mine. 2) Dacă doriți ca script-urile să ruleze pur și simplu, setarea politicii de execuție este probabil cea mai bună cale și poate să nu aibă legătură cu OP: 3) se pare că politica cea mai bună este pentru script-urile de pornire, specificați politica de execuție și domeniul de aplicare în linia de comandă execută scriptul și pentru conectare setați configurația sesiunii după cum este necesar. Dacă dori
adăugat autor omJohn8372, sursa

trebuie să executați set-execuțiepolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

Sper că acest lucru vă ajută!

0
adăugat
@MatthewLock Restricted este politica implicită. Citește mai mult
adăugat autor Nadeem_MK, sursa
Acesta ar trebui să fie primul răspuns.
adăugat autor WhiteHotLoveTiger, sursa
Care este valoarea implicită ExecutionPolicy pe care Windows o stabilește pentru o nouă instalare?
adăugat autor Matthew Lock, sursa

Am reușit să ocolească această eroare invocând puteri asemănătoare:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Adică, am adăugat codul -executionpolicy bypass la modul în care am invocat scriptul.

Acest lucru a lucrat la Windows 7 Service Pack 1. Sunt nou la powershell, deci ar putea fi avertismente pentru a face acest lucru pe care nu sunt conștienți de.

[Edit 2017-06-26] Am continuat să utilizez această tehnică pe alte sisteme, inclusiv Windows 10 și Windows 2012r2, fără probleme.

Iată ce folosesc acum. Acest lucru mă împiedică să rulez în mod accidental scriptul făcând clic pe el. Când o execut în planificator, adaug un argument: "scheduler" și care ocolește promptul.

Acest lucru întrerupe, de asemenea, fereastra de la sfârșitul, astfel încât am putea vedea de ieșire de powershell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%
0
adăugat
Aceasta este ceea ce folosește ciocolată pentru a descărca și instala ciocolata
adăugat autor icc97, sursa
Orice actualizare cu privire la avertismente?
adăugat autor RockPaperLizard, sursa

Comanda set-executionpolicy nerestricționată va permite ca orice script pe care îl creați să fie difuzat ca utilizator autentificat. Doar asigurați-vă că setați setarea de politică de execuție înapoi la semnat utilizând comanda set-execuțiepolicy semnată înainte de a vă deconecta.

0
adăugat
set-executionpolicy semnat Nu poate lega parametrul 'ExecutionPolicy' etc.
adăugat autor JinSnow, sursa
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Utilizați întotdeauna codurile de mai sus cmd pentru a permite executarea șahurilor în sesiunea curentă.

0
adăugat
O.K. Acesta este și un răspuns delicios. Vă imaginez să adăugați această comandă la profile.ps1 în curând. Begone, sigur de Powershell!
adăugat autor Cecil Curry, sursa
acest + superuser.com/questions/612409/… + shorcut link = perfecțiune
adăugat autor user300375, sursa
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Comanda de mai sus a lucrat pentru mine chiar și atunci când se întâmplă următoarea eroare:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
0
adăugat