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
RemoteSignedpolityka wykonywania uniemożliwia wykonanie skryptu, a nie powinna.RemoteSignedjest 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 zRemoteSignednaRemoteSignednie 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 PowerShellto jedyna zaangażowana aplikacja. NieWindows PowerShell ISEaniCommand Promptani ż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, Desktopktó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 RemoteSignedwykonywania 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 ' streamsnarzędzia i plik Propertiesdialogowe 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 LocalMachineskrypt lokalny nadal nie będzie mógł wykonać, co ma sens, ponieważ zasady wykonywania w MachinePolicyzakresie będą miały pierwszeństwo.
Zgodnie z dokumentacją about_Execution_Policies( aktualna ; w momencie zapytania ) RemoteSignedpolityka 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?