Próbuję uruchomić cmd plik, który wywołuje a PowerShellskrypt z cmd.exe
i otrzymuję następujący błąd:
Management_Install.ps1
nie można załadować, ponieważ wykonywanie skryptów jest wyłączone w tym systemie.
Uciekłem
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
a kiedy biegnę Get-ExecutionPolicy
zPowerShell, Unrestricted
Wracam.
PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1
WARNING: Running x86 PowerShell...
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1
Nie można załadować pliku, ponieważ wykonywanie skryptów jest wyłączone w tym systemie. Aby uzyskaćget-help about_signing
więcej informacji, zobacz „ ”.W linii: 1 znak: 25
.\Management_Install.ps1
<<<< 1
CategoryInfo: NotSpecified: (:) [], PSSecurityException
FullyQualifiedErrorId: RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE
Press any key to continue . . .
System to Windows Server 2008R2.
Co ja robię źle?
Get-ExecutionPolicy -List
.Odpowiedzi:
Jeśli używasz systemu Windows Server 2008 R2, istnieje wersja programu PowerShell x64 i x86, które muszą mieć ustawione zasady wykonywania. Czy ustawiłeś zasady wykonywania na obu hostach?
Jako administrator możesz ustawić zasady wykonywania, wpisując to w oknie PowerShell:
Aby uzyskać więcej informacji, zobacz Korzystanie z polecenia cmdlet Set-ExecutionPolicy .
Po zakończeniu możesz przywrócić domyślną wartość zasad za pomocą:
źródło
Set-ExecutionPolicy Restricted
wydaje się być sposobem na cofnięcie tego, jeśli chcesz przywrócić uprawnienia bez zmian : technet.microsoft.com/en-us/library/ee176961.aspx . Tymczasowa metoda obejścia@Jack Edmonds
wydaje mi się bezpieczniejsza:powershell -ExecutionPolicy ByPass -File script.ps1
Get-ExecutionPolicy -List
pomogły mi zobaczyć różne zakresy. CmdGet-ExecutionPolicy
nie pokazuje wszystkich zakresów.Import-Module SQLPS
Teraz działa z zasady zmieniły się w sposób następujący:{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}
.Możesz ominąć tę zasadę dla pojedynczego pliku, dodając
-ExecutionPolicy Bypass
podczas uruchamiania programu PowerShellźródło
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass
mojego paska zadań.type script.ps1 | powershell -
Jednak wywoływanie ps1 z .bat przez działanie działa..ps1
i przypadkowemu uruchomieniu przez ludzi czegoś, czego nie chcieli. Tak by się stało z.bat
plikamiMiałem podobny problem i zauważyłem, że domyślnie
cmd
w systemie Windows Server 2012 działał system x64.W systemie Windows 7 , Windows 8 , Windows 10 , Windows Server 2008 R2 lub Windows Server 2012 uruchom następujące polecenia jako Administrator :
x86 (32 bity)
Otwórz
C:\Windows\SysWOW64\cmd.exe
Uruchom polecenie
powershell Set-ExecutionPolicy RemoteSigned
x64 (64-bitowy)
Otwórz
C:\Windows\system32\cmd.exe
Uruchom polecenie
powershell Set-ExecutionPolicy RemoteSigned
Możesz sprawdzić tryb za pomocą
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
Odniesienia:
MSDN - zasady wykonywania Windows PowerShell
Windows - wersja 32-bitowa vs 64-bitowa
źródło
Większość istniejących odpowiedzi wyjaśnia, jak , ale bardzo niewiele wyjaśnia, dlaczego . A zanim zaczniesz wykonywać w Internecie kod od nieznajomych, zwłaszcza kod wyłączający środki bezpieczeństwa, powinieneś dokładnie zrozumieć, co robisz. Oto trochę więcej szczegółów na temat tego problemu.
Ze strony TechNet About Execution Policies :
Korzyści, które, jak wyliczono w programie PowerShell Basics - Zasady wykonywania i podpisywanie kodu , to:
Aby sprawdzić bieżące zasady wykonywania, możesz uruchomić
Get-ExecutionPolicy
. Ale prawdopodobnie jesteś tutaj, ponieważ chcesz to zmienić.Aby to zrobić, uruchom polecenie
Set-ExecutionPolicy
cmdlet.Podczas aktualizacji zasad wykonywania będziesz musiał podjąć dwie główne decyzje.
Typ zasad wykonania:
Restricted
† - W systemie nie można wykonać skryptu lokalnego, zdalnego ani pobranego.AllSigned
- Wszystkie uruchamiane skrypty wymagają podpisu cyfrowego.RemoteSigned
- Wszystkie zdalne skrypty (UNC) lub pobrane muszą być podpisane.Unrestricted
- Nie jest wymagany podpis dla żadnego rodzaju skryptu.Zakres nowej zmiany
LocalMachine
† - Zasady wykonania dotyczą wszystkich użytkowników komputera.CurrentUser
- Polityka wykonywania dotyczy tylko bieżącego użytkownika.Process
- Zasady wykonywania dotyczą tylko bieżącego procesu Windows PowerShell.† = Domyślnie
Na przykład : jeśli chcesz zmienić zasadę na RemoteSigned tylko dla CurrentUser, uruchom następującą komendę:
Uwaga : Aby zmienić zasady wykonywania, musisz uruchomić PowerShell As Adminstrator . Jeśli jesteś w trybie zwykłym i próbujesz zmienić zasady wykonywania, pojawi się następujący błąd:
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 zmusić zasadę do uruchamiania tylko podpisanych skryptów. Aby podpisać własne skrypty, możesz postępować zgodnie z instrukcjami w artykule Scotta Hanselmana na temat Podpisywanie skryptów PowerShell .
Uwaga : większość osób może otrzymać ten błąd przy każdym otwarciu programu Powershell, ponieważ pierwszą rzeczą, którą PS próbuje zrobić po uruchomieniu, jest wykonanie skryptu profilu użytkownika, który konfiguruje środowisko w dowolny sposób.
Plik zazwyczaj znajduje się w:
Dokładną lokalizację można znaleźć, uruchamiając zmienną PowerShell
Jeśli w profilu nie ma nic, na czym ci zależy i nie chcesz niepokoić się ustawieniami zabezpieczeń, możesz go po prostu usunąć, a PowerShell nie znajdzie niczego, czego nie mógłby wykonać.
źródło
Get-Content .\MyFile.ps1 | powershell.exe -NoProfile -
.-ExecutionPolicy ByPass
, jaki jest cel tej polityki? Czy to po to, aby uniemożliwić użytkownikom przypadkowe otwarcie konsoli PowerShell i uruchomienie złośliwego skryptu? Czy osoba atakująca nie może po prostu użyć pliku wykonywalnego lub skryptu wsadowego, jeśli chce to obejść? Nawet po przeczytaniu komentarza @BaconBits nie jestem do końca pewien, jaki scenariusz ma zapobiec tej polityce ...W systemie Windows 7:
Przejdź do menu Start i wyszukaj „Windows PowerShell ISE”.
Kliknij prawym przyciskiem myszy wersję x86 i wybierz „Uruchom jako administrator”.
W górnej części wklej
Set-ExecutionPolicy RemoteSigned
; uruchom skrypt. Wybierz „Tak”.Powtórz te kroki dla 64-bitowej wersji Powershell ISE (wersja inna niż x86).
Właśnie wyjaśniam kroki, o których wspomniał @Chad Miller. Dzięki Czad!
źródło
Również uruchomienie tego polecenia przed skryptem rozwiązuje problem:
źródło
RemoteSigned
przed usunięciem wszystkich ograniczeń swojej polityki bezpieczeństwa. Jeśli to nie zadziała, ponownie sprawdź, jakie są twoje punkty bólu i dlaczego to nie działa. Możesz ustawićunrestricted
jako ostateczność, ale nie powinien to być punkt wyjścia.Remotesigned
.Jeśli znajdujesz się w środowisku, w którym nie jesteś administratorem, możesz ustawić Zasady wykonywania tylko dla siebie i nie będzie to wymagało administratora.
lub
Możesz przeczytać o tym wszystko we wpisie pomocy.
źródło
Set-ExecutionPolicy Unrestricted
jako administrator nie wydawał się „nieograniczony” na tyle, aby faktycznie pomóc.RemoteSigned: wszystkie skrypty, które sam stworzyłeś, zostaną uruchomione, a wszystkie skrypty pobrane z Internetu będą musiały zostać podpisane przez zaufanego wydawcę.
OK, zmień zasady, po prostu wpisując:
źródło
Status prądu możemy uzyskać
ExecutionPolicy
poleceniem poniżej:Domyślnie jest ograniczony . Aby umożliwić wykonywanie skryptów PowerShell, musimy ustawić ExecutionPolicy jako Bypass lub Unrestricted .
Możemy ustawić zasady dla bieżącego użytkownika jako
Bypass
lubUnrestricted
przy użyciu dowolnego z poniższych poleceń PowerShell:Nieograniczone zasady ładują wszystkie pliki konfiguracyjne i uruchamiają wszystkie skrypty. Jeśli uruchomisz niepodpisany skrypt pobrany z Internetu, przed uruchomieniem zostaniesz zapytany o zgodę.
Natomiast w polityce Bypass nic nie jest blokowane, a podczas wykonywania skryptu nie ma żadnych ostrzeżeń ani monitów. Obwodnica
ExecutionPolicy
jest bardziej zrelaksowana niżUnrestricted
.źródło
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
AKA szybki i brudny sposób, aby powiedzieć VS2015, aby przestał narzekać i uruchomił mój cholerny skrypt. dzięki. ratownik.Korzystam z systemu Windows 10 i nie mogłem uruchomić żadnego polecenia. Jedyne polecenie, które dało mi pewne wskazówki, to:
[x64]
Ale to nie zadziałało. To było ograniczone. Prawdopodobnie nowe zasady bezpieczeństwa dla Windows10. Miałem ten błąd:
Więc znalazłem inny sposób ( rozwiązanie ):
Teraz otwórz PowerShell i ciesz się;)
źródło
Set-ExecutionPolicy RemoteSigned
Unrestricted
. Lepiej jest używaćRemoteSigned
Ustawienie zasad wykonywania zależy od środowiska. Jeśli próbujesz wykonać skrypt z uruchomionego ISE x86 , musisz użyć PowerShell x86, aby ustawić zasady wykonywania. Podobnie, jeśli używasz 64-bitowego ISE, musisz ustawić zasady za pomocą 64-bitowego programu PowerShell.
źródło
Win+ Ri wpisz polecenie kopiuj wklej i naciśnij OK:
I uruchom skrypt.
Następnie przywróć zmiany, takie jak:
źródło
Możesz to również obejść, używając następującego polecenia:
Możesz również przeczytać ten artykuł autorstwa Scotta Sutherlanda, który wyjaśnia 15 różnych sposobów obchodzenia programu PowerShell,
Set-ExecutionPolicy
jeśli nie masz uprawnień administratora:15 sposobów na ominięcie zasad wykonywania PowerShell
źródło
źródło
możesz spróbować i wybrać opcję „Wszystkie”
źródło
W edytorze ISE programu PowerShell znalazłem, że najpierw uruchomiłem następujący skrypt:
źródło
W PowerShell 2.0, zasady wykonywania były domyślnie wyłączone.
Od tego czasu zespół programu PowerShell wprowadził wiele ulepszeń i są przekonani, że użytkownicy nie będą wiele zepsuć podczas uruchamiania skryptów. Począwszy od PowerShell 4.0, jest on domyślnie włączony.
W twoim przypadku wpisz
Set-ExecutionPolicy RemoteSigned
z konsoli PowerShell i powiedz tak.źródło
Miałem dzisiaj ten sam problem. 64-bitowe zasady wykonywania były nieograniczone, a 32-bitowe ograniczone.
Oto jak zdalnie zmienić tylko zasady 32-bitowe:
źródło
Przejdź do ścieżki rejestru
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
i ustawExecutionPolicy
naRemoteSigned
.źródło
Otrzymuję kolejne ostrzeżenie, gdy próbuję uruchomić
Set-ExecutionPolicy RemoteSigned
Rozwiązałem za pomocą tych poleceń
źródło
Jeśli jesteś tutaj z powodu uruchamiania go z Ruby lub Chef i używania `` wykonywania systemu, wykonaj następujące czynności:
To polecenie służy do pobierania folderu „MyDocuments”.
-ExecutionPolicy Unrestricted
Zrób sztuczkę.Mam nadzieję, że jest to pomocne dla kogoś innego.
źródło
Kilka odpowiedzi wskazuje na zasady wykonywania. Jednak niektóre rzeczy wymagają również „administratora runas”. Jest to najbezpieczniejsze, ponieważ nie ma trwałych zmian w zasadach wykonywania i można ominąć ograniczenia administratora. Użyj z harmonogramem, aby rozpocząć wsad z:
zarówno powyżej Jacka Edmondsa, jak i Petera Mortensena / Dhany z posta Jak uruchomić aplikację jako „uruchom jako administrator” z wiersza poleceń?
źródło
Przekonałem się, że ta linia działa najlepiej na jednym z moich serwerów Windows Server 2008 R2. Kilka innych nie miało problemów bez tej linii w moich skryptach PowerShell:
źródło
Otwórz konsolę PowerShell jako administrator, a następnie ustaw zasady wykonywania
źródło
Możesz to zrobić w specjalny sposób:
Potokuje zawartość skryptu powershell do powershell.exe i wykonuje go z pominięciem zasad wykonywania.
źródło
To rozwiązało mój problem
Otwórz
PowerShell
polecenie Windows i uruchom poniżej zapytania, aby zmienićExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
jeśli poprosi o potwierdzenie zmian, naciśnij „Y” i naciśnij Enter.
źródło
Uruchom
Set-ExecutionPolicy RemoteSigned
polecenieźródło
użyj tego polecenia
źródło
Otwórz cmd zamiast PowerShell. Pomogło mi to ...
źródło
Otwórz okno PowerShell jako administrator . To będzie działać.
źródło