PowerShell mówi, że „skrypty są wyłączone w tym systemie”.


Próbuję uruchomić plik
cmd
, który wywołuje skrypt PowerShell z
cmd.exe
, ale pojawia się ten błąd:

Nie można załadować
Management_Install.ps1
, ponieważ w tym systemie wyłączono obsługę skryptów.

Uruchomiłem to polecenie:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Kiedy uruchamiam
Get-ExecutionPolicy
z PowerShell, zwraca on
Unrestricted
.
PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1WARNING: Running x86 PowerShell...
Nie można załadować pliku
C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scripts \ Management_Install.ps1
, ponieważ w tym systemie skrypty są wyłączone. Więcej informacji można znaleźć w sekcji „
get-help about_signing
”.
W Internecie: 1 znak: rok 25
  • .\Management_Install.ps1
    <<<< 1

  • CategoryInfo: NotSpecified: (:) [], PSSecurityException

  • FullyQualifiedErrorId : RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSEPress any key to continue . . .

Ten system nosi nazwę Windows Server 2008R2.
Co ja robię źle?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz

Windows Server 2008
https://en.wikipedia.org/wiki/Windows_Server_2008
To znaczy R2

x64

i

x86

wersje programu PowerShell, które muszą mieć własne zasady wykonywania. Czy skonfigurowałeś zasady wykonywania na obu hostach?
w jaki sposób

administrator
, możesz ustawić zasady wykonywania, wpisując to w oknie programu PowerShell:
Set-ExecutionPolicy RemoteSigned

Więcej informacji znajdziesz w
za pomocą polecenia cmdlet Set-ExecutionPolicy

https://docs.microsoft.com/pow ... olicy
.
Gdy skończysz, możesz przywrócić zasadę domyślną za pomocą:
Set-ExecutionPolicy Restricted
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz ominąć te zasady dotyczące pojedynczego pliku, dodając
-ExecutionPolicy Bypass
podczas uruchamiania PowerShell
powershell -ExecutionPolicy Bypass -File script.ps1
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem podobny problem i zauważyłem, że domyślnie włączone jest
cmd
Windows Server 2012
https://en.wikipedia.org/wiki/Windows_Server_2012
x64 został uruchomiony.
Dla

Windows 7

,

Windows 8

,

Windows 10

,

Windows Server 2008 R2

lub

Windows Server 2012

uruchom następujące polecenia jako

administrator

:

x86

(32-bitowy)

Otwórz
C: \ Windows \ SysWOW64 \ cmd.exe

Uruchom polecenie
powershell Set-ExecutionPolicy RemoteSigned

x64

(64 bit)

Otwórz
C: \ Windows \ system32 \ cmd.exe

Uruchom polecenie
powershell Set-ExecutionPolicy RemoteSigned
Możesz sprawdzić tryb za pomocą
  • W CMD:
    echo% PROCESSOR_ARCHITECTURE%
  • W programie Powershell:
    [Environment] :: Is64BitProcess


Zalecenia

:
MSDN - zasady wykonywania programu Windows PowerShell
https://technet.microsoft.com/ ... .aspx
Windows - wyjaśnienie katalogu 32-bitowego i 64-bitowego
http://www.samlogic.net/articl ... 4.htm
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Większość istniejących odpowiedzi wyjaśnia

tak jak

ale bardzo niewielu wyjaśnia

czemu
... Zanim zaczniesz wykonywać kod od nieznajomych w Internecie, zwłaszcza kod wyłączający środki bezpieczeństwa, musisz dokładnie zrozumieć, co robisz. Oto więcej szczegółów na temat tego problemu.
Na

Strona TechNet dotycząca zasad wykonywania
http://technet.microsoft.com/library/hh847748.aspx
:

Zasady wykonywania programu Windows PowerShell umożliwiają zdefiniowanie warunków, w jakich program Windows PowerShell ładuje pliki konfiguracyjne i uruchamia skrypty.

Korzyści, które, jak wspomniano

Podstawy zasad programu PowerShell, pisanie i podpisywanie kodu
http://www.darkoperator.com/bl ... .html
:

  • Kontrola wykonania - kontrola poziomu zaufania do wykonywalnych skryptów.
  • Command Highjack - zapobiegaj wprowadzaniu komend na mojej drodze.
  • Identity to skrypt utworzony i podpisany przez zaufanego programistę i/lub podpisany certyfikatem z urzędu certyfikacji, któremu ufam.
  • Integralność - Skrypty nie mogą być modyfikowane przez złośliwe oprogramowanie ani złośliwego użytkownika.
Aby sprawdzić aktualną politykę wykonywania, możesz uruchomić
Get-ExecutionPolicy
http://technet.microsoft.com/l ... px... Ale prawdopodobnie jesteś tutaj, ponieważ chcesz to zmienić.
Aby to zrobić, uruchom polecenie cmdlet
Set-ExecutionPolicy
.
Podczas aktualizowania zasad wykonywania należy podjąć dwie ważne decyzje.

Typ zasad wykonywania:
>
  • Restricted
    <sup> † </sup>- w systemie nie można uruchomić żadnego skryptu, lokalnego, zdalnego lub pobranego.
  • AllSigned
    - wszystkie uruchomione skrypty muszą być podpisane cyfrowo.
  • RemoteSigned
    - wszystkie zdalne skrypty (UNC) lub pobrane muszą być podpisane.
  • Unrestricted
    - nie jest wymagany podpis dla żadnego typu skryptu.


Zakres nowych zmian
>
  • LocalMachine
    <sup> † </sup>- polityka wykonywania dotyczy wszystkich użytkowników komputera.
  • CurrentUser
    - polityka wykonywania dotyczy tylko bieżącego użytkownika.
  • Process
    - Zasady wykonywania dotyczą tylko bieżącego procesu programu Windows PowerShell.

<sup>
† = Domyślnie
</sup>na przykład
: jeśli chcesz zmienić politykę na RemoteSigned tylko dla CurrentUser, musisz uruchomić następujące polecenie:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser


Uwaga
: aby zmienić zasady wykonywania, należy uruchomić PowerShell

jako administrator

.
Jeśli jesteś w trybie normalnym i spróbujesz zmienić zasady wykonywania, pojawi się następujący błąd:

Odmowa dostępu do klucza rejestru „HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell”. Aby zmienić zasady wykonywania dla dziedziny domyślnej (LocalMachine), uruchom program Windows PowerShell z opcją Uruchom jako administrator.

Jeśli chcesz zaostrzyć wewnętrzne ograniczenia dotyczące własnych skryptów, które nie zostały pobrane z Internetu (lub przynajmniej nie zawierają metadanych UNC), możesz wymusić uruchamianie tylko podpisanych skryptów. Aby podpisać własne skrypty, postępuj zgodnie z instrukcjami zawartymi w artykule Scotta Hanselmana na temat

podpisywanie skryptów PowerShell
http://www.hanselman.com/blog/ ... .aspx
.

Uwaga
: Większość ludzi prawdopodobnie otrzyma ten błąd za każdym razem, gdy otworzą Powershell, ponieważ pierwszą rzeczą, którą PS próbuje zrobić podczas uruchamiania, jest wykonanie skryptu profilu użytkownika, który ustawia twoje środowisko tak, jak lubisz.
Ten plik zwykle znajduje się w:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

Możesz znaleźć dokładną lokalizację, uruchamiając zmienną PowerShell
$profile

Jeśli w profilu nie ma nic, na czym Ci zależy i nie chcesz zepsuć ustawień zabezpieczeń, możesz go po prostu usunąć, a PowerShell nie znajdzie niczego, czego nie może wykonać.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W systemie Windows 7:
Przejdź do menu Start i wyszukaj „Windows PowerShell ISE”.
Kliknij prawym przyciskiem myszy wersję x86 i wybierz „Uruchom jako administrator”.
U góry wklej
Set-ExecutionPolicy RemoteSigned
; uruchom skrypt. Wybierz „Tak”.
Powtórz te kroki dla 64-bitowej technologii PowerShell ISE (nie x86).
Dopracowuję tylko kroki, do których sugerował Miller. Dzięki Chad!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ponadto uruchomienie tego polecenia przed skryptem rozwiązuje również ten problem:
set-executionpolicy unrestricted
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli jesteś w środowisku, w którym nie jesteś administratorem, możesz ustawić zasady wykonywania tylko dla siebie i nie będzie to wymagało administratora.
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

lub
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

Możesz przeczytać o tym wszystko w poście pomocy.
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Stan aktualnego
ExecutionPolicy
możemy uzyskać za pomocą następującego polecenia:
Get-ExecutionPolicy;

Domyślnie to

ograniczony
... Aby umożliwić wykonywanie skryptów PowerShell, musimy ustawić ten ExecutionPolicy jako

objazd

albo jak

bez limitu

.
Możemy ustawić zasady dla bieżącego użytkownika na
Bypass
lub
Unrestricted
za pomocą dowolnego z następujących poleceń PowerShell:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;


bez limitu

polityka ładuje wszystkie pliki konfiguracyjne i uruchamia wszystkie skrypty. Jeśli używasz niepodpisanego skryptu pobranego z Internetu, zostaniesz poproszony o pozwolenie przed jego uruchomieniem.
W polityce

objazd

nic nie jest blokowane i nie ma ostrzeżeń ani podpowiedzi podczas wykonywania skryptu. Omijanie
ExecutionPolicy
jest łatwiejsze niż
Unrestricted
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

RemoteSigned: wszystkie utworzone przez Ciebie skrypty będą uruchamiane, a wszelkie skrypty pobrane z Internetu muszą być podpisane przez zaufanego wydawcę.
OK, zmień zasady, wpisując po prostu:
Set-ExecutionPolicy RemoteSigned
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

używam

Windows 10

i nie mógł wykonać żadnych poleceń. Jedyne polecenie, które dało mi kilka wskazówek, brzmiało:
[x64]

  • Otwórz C: \ Windows \ SysWOW64 \ cmd.exe [jako administrator ]
  • Uruchom polecenie & > powershell Set-ExecutionPolicy Unrestricted
Ale to nie zadziałało. Był ograniczony. Prawdopodobnie nowe zasady bezpieczeństwa dla systemu Windows 10. Wystąpił taki błąd:

Set-ExecutionPolicy: program Windows PowerShell pomyślnie zaktualizował zasady wykonywania, ale to ustawienie jest zastępowane przez zasady zdefiniowane w bardziej szczegółowym zakresie. Z powodu zastąpienia Twoja powłoka zachowa swoją obecną skuteczną politykę wykonywania ...

Więc znalazłem inny sposób (

decyzja

):
  • Otwórz polecenie Uruchom/konsolę ( <kbd> Win </kbd> + <kbd> R </kbd> )
  • Typ: gpedit.msc (Redaktor Zasady grupy http://en.wikipedia.org/wiki/Group_Policy )
  • Przejdź do sekcji Zasady dotyczące komputera lokalnego -> Konfiguracja komputera -> Szablony administracyjne -> składniki Windows -> Windows Powershell .
  • Włączyć " włączyć wykonywanie skryptu "
  • Zainstaluj zasady zgodnie z potrzebami. Ustawiłem moje na „ zezwalaj na wszystkie skrypty ".

Teraz otwórz PowerShell i ciesz się;)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

<kbd>
Win
</kbd>
+
<kbd>
R
</kbd>
i wprowadź polecenie kopiuj wklej i naciśnij
<kbd>
OK
</kbd>
:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

I wykonaj swój skrypt.
Następnie przywróć zmiany, takie jak:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Konfigurowanie zasad wykonywania zależy od środowiska. Jeśli próbujesz wykonać skrypt z uruchomionego x86

ISE
https://technet.microsoft.com/ ... .aspx, aby ustawić zasady wykonywania, musisz użyć x86 PowerShell. Podobnie, jeśli używasz 64-bitowego ISE, musisz zainstalować zasady za pomocą 64-bitowego programu PowerShell.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz również obejść ten problem za pomocą następującego polecenia:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression

Możesz również przeczytać ten artykuł Scotta Sutherlanda, który wyjaśnia 15 różnych sposobów obejścia PowerShell
Set-ExecutionPolicy
, jeśli nie masz uprawnień administratora:

15 sposobów na ominięcie polityki wykonywania

https://blog.netspi.com/15-way ... licy/
PowerShell
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Otwórz PowerShell jako administrację

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

użyj tego polecenia
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

możesz spróbować tego i wybrać opcję „Wszystkie”
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Otwórz PowerShell jako administrator i uruchom Set-ExecutionPolicy -Scope CurrentUser
  • Wchodzić RemoteSigned i naciśnij Enter
  • Wykonać Set-ExecutionPolicy -Scope CurrentUser
  • Zapewniać bez limitu dostęp i naciśnij Enter
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Otwórz polecenie Uruchom/konsolę (klawisz Win + R) Typ: gpedit. msc (Edytor zasad grupy)
  • Przejdź do sekcji Zasady dotyczące komputera lokalnego -> Konfiguracja komputera -> Szablony administracyjne -> składniki Windows -> Windows Powershell.
  • Włączyć " włączyć wykonywanie skryptu "Zainstaluj zasady zgodnie z potrzebami. Ustawiłem moje na „Zezwalaj na wszystkie skrypty” .

Teraz uruchom polecenie uruchomienia, cokolwiek używasz .. Zaufaj mi, ta aplikacja będzie działać .. Zamów :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W PowerShell ISE znalazłem skrypty, które mogą najpierw uruchomić następujący wiersz.
Set-ExecutionPolicy RemoteSigned -Scope Process
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W programie PowerShell 2.0 domyślne zasady wykonywania zostały wyłączone.
Od tego czasu zespół PowerShell wprowadził wiele ulepszeń i jest przekonany, że użytkownicy nie zepsują zbyt wiele podczas uruchamiania skryptów. Dlatego począwszy od programu PowerShell 4.0 jest on domyślnie włączony.
W twoim przypadku wprowadź
Set-ExecutionPolicy RemoteSigned
z konsoli PowerShell i powiedz tak.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Przejdź do ścieżki rejestru
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell
i ustaw
ExecutionPolicy
na
RemoteSigned
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem dzisiaj ten sam problem. 64-bitowa polityka wykonywania była nieograniczona, podczas gdy polityka 32-bitowa była ograniczona.
Oto jak zdalnie zmienić tylko zasady 32-bitowe:
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Otrzymuję kolejne ostrzeżenie, kiedy próbuję uruchomić
Set-ExecutionPolicy RemoteSigned

Rozwiązałem tym poleceniem

<pre class="lang-bsh prettyprint-override">
Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$falseSet-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ja też stanąłem przed podobnym problemem, spróbuj tego, mam nadzieję, że to komuś pomoże
Ponieważ używam systemu Windows, wykonaj poniższe czynności
Otwórz wiersz polecenia jako administrator i podążaj tą ścieżką
C:\Users\%username%\AppData\Roaming\npm\

Znajdź plik ng.ps1 w tym folderze (dir)
a następnie usuń go (del ng.ps1)
Możesz także wyczyścić pamięć podręczną npm, chociaż powinno działać bez tego kroku.
Mam nadzieję, że to pomoże, ponieważ zadziałało dla mnie.
Mam nadzieję że to pomoże
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli jesteś tutaj, ponieważ używasz go z

Wsparcie
http://en.wikipedia.org/wiki/R ... %2529
Ruby lub

Chef
http://en.wikipedia.org/wiki/Chef_%28software%29
i używając `wykonanie systemu, wykonaj następujące czynności:
`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

To polecenie służy do pobierania folderu „MyDocuments”.
-ExecutionPolicy Unrestricted
załatwia sprawę.
Mam nadzieję, że komuś to pomoże.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Kilka odpowiedzi wskazuje na politykę wykonywania. Jednak niektóre rzeczy wymagają również „administratora runas”. Jest to najbezpieczniejsze w tym sensie, że nie ma trwałych zmian w zasadach wykonywania i można ominąć ograniczenia administratora. Użyj z scheduletask, aby uruchomić pakiet z:
runas.exe/savecred/user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

zarówno od Jacka Edmondsa powyżej, jak i od Petera Mortensena/Dhany ze słupka

How to run an application as "run as administrator" from the command prompt?
https://coderoad.ru/8249705/

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się