Ponieważ to pytanie nadal przyciąga odpowiedzi, które są albo odrzucane przez treść pytania, albo nie odnoszą się do rzeczywistego problemu, przeczytaj to proste podsumowanie tego, co musisz wiedzieć:
- To nie jest pytanie „Dlaczego moja domyślna instalacja programu PowerShell nie uruchamia skryptów?” pytanie.
- To nie jest pytanie „Dlaczego moja instalacja programu PowerShell nie uruchamia skryptów pobranych z Internetu?” pytanie.
- Powstaje pytanie, dlaczego
RemoteSigned
polityka wykonywania uniemożliwia wykonanie skryptu, a nie powinna.RemoteSigned
jest jedyną zasadą wykonywania, której chcę używać. Zdaję sobie sprawę, że dostępne są inne, mniej restrykcyjne zasady. Gdyby te zasady były akceptowalnymi substytutami, po prostu użyłbym ich zamiast tego, a to pytanie by nie istniało.- Zasady wykonywania są już ustawione na
RemoteSigned
. Zmiana zRemoteSigned
naRemoteSigned
nie jest rozwiązaniem.- Plik skryptu jest tworzony i przechowywany lokalnie.
- Plik skryptu nie jest blokowany. Plik skryptu nigdy nie został zablokowany (patrz poprzedni punkt).
- Pliku skryptu nie można odblokować, ponieważ nie ma nic do odblokowania (patrz poprzedni punkt).
- Plik skryptu jest (próbuje) wykonać administrator.
Windows PowerShell
to jedyna zaangażowana aplikacja. NieWindows PowerShell ISE
aniCommand Prompt
ani żadnych innych narzędzi lub redaktorzy są istotne.- Przyczyna problemu została już zidentyfikowana (patrz zaakceptowana odpowiedź). Myślę, że po prawie 8 latach opublikowano również wszystkie inne oczywiste wyjaśnienia, mające zastosowanie lub nie. Jeśli uważasz, że jest inaczej, przeczytaj pytanie i istniejące odpowiedzi w całości, zanim dodasz swoje.
Używam programu Windows PowerShell 2.0 w 64-bitowym systemie Windows 7 Professional. Mam na swoim komputerze skrypt, Desktop
który powoduje następujący błąd, gdy próbuję go uruchomić:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Jestem zarówno administratorem domeny, jak i administratorem lokalnym, a jeśli uruchomię Get-ExecutionPolicy -List
, widzę, Group Policy Object
że utworzony w celu skonfigurowania PowerShell poprawnie stosuje zasady RemoteSigned
wykonywania na poziomie komputera:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Stworzyłem skrypt w sobie Notepad
, i użył Sysinternals ' streams
narzędzia i plik Properties
dialogowe potwierdzające, że skrypt nie jest traktowane jako mające pochodzić z internetu. Jeśli skopiuję skrypt do udziału sieciowego na serwerze domeny, będzie można go wykonać. Jeśli uruchomię, Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
skrypt lokalny nadal nie będzie mógł wykonać, co ma sens, ponieważ zasady wykonywania w MachinePolicy
zakresie będą miały pierwszeństwo.
Zgodnie z dokumentacją about_Execution_Policies
( aktualna ; w momencie zapytania ) RemoteSigned
polityka oznacza:
Skrypty mogą działać.
Wymaga podpisu cyfrowego od zaufanego wydawcy na skryptach i plikach konfiguracyjnych pobieranych z Internetu (w tym w programach do obsługi poczty e-mail i komunikatorów internetowych).
Nie wymaga podpisów cyfrowych w skryptach, które uruchomiłeś i które napisałeś na lokalnym komputerze (nie pobrano z Internetu).
Ryzyko uruchamiania niepodpisanych skryptów ze źródeł innych niż Internet oraz podpisanych, ale złośliwych skryptów.
Mój skrypt nie jest podpisany, ale ponieważ jest tworzony i wykonywany lokalnie, powinien spełniać wymagania trzeciego podpunktu powyżej. W związku z tym...
- Dlaczego mój skrypt nie może działać?
- Dlaczego program PowerShell narzeka, że mój skrypt „nie jest podpisany cyfrowo”, podczas gdy to wymaganie powinno dotyczyć tylko plików z Internetu?
- Dlaczego program PowerShell nie przejmuje się już tym, że skrypt nie jest podpisywany, gdy jest uruchamiany z udziału sieciowego?