Nie można załadować ps1, ponieważ uruchamianie skryptów jest wyłączone w tym systemie

120

Próbuję uruchomić powershellskrypt z poziomu C #.

Najpierw ustawiłem wartość ExecutionPolicyna, Unrestricteda skrypt jest teraz uruchamiany z PowerShell ISE.

Teraz to jest C # mój kod:

class Program
{
    private static PowerShell ps;
    static void Main(string[] args)
    {
        ps = PowerShell.Create();
        string ps1File = Path.Combine(Environment.CurrentDirectory, "script.ps1");
        ExecuteScript(ps1File);
        Console.ReadLine();
    }

    static void ExecuteScript(string script)
    {
        try
        {
            ps.AddScript(script);
            Collection<PSObject> results = ps.Invoke();
            Console.WriteLine("Output:");
            foreach (var psObject in results)
            {
                Console.WriteLine(psObject);
            }
            Console.WriteLine("Non-terminating errors:");
            foreach (ErrorRecord err in ps.Streams.Error)
            {
                Console.WriteLine(err.ToString());
            }
        }
        catch (RuntimeException ex)
        {
            Console.WriteLine("Terminating error:");
            Console.WriteLine(ex.Message);
        }
    }
}

A wynik to:

Nie można załadować ps1, ponieważ uruchamianie skryptów jest wyłączone w tym systemie. Więcej informacji można znaleźć pod adresem about_Execution_Policies pod adresem http://go.microsoft.com/fwlink/?LinkID=135170 .

user979033
źródło
1
Czy próbowałeś ustawić zakres zasad na komputer lokalny? „Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted”
Totem
6
Uruchom Get-ExecutionPolicy -Listi edytuj swoje pytanie z wynikami. To polecenie pokaże różne zakresy i ich ustawienia ExecutionPolicy.
James C.
Obawiam się, że to nie działa, ale żeby było jasne, NIE jest to na poziomie wiersza poleceń, ponieważ mogę bez problemów uruchomić na zdalnym pulpicie.
yorkshireflatcap

Odpowiedzi:

372

Może to być spowodowane tym, że aktualny użytkownik ma undefined ExecutionPolicy.

Możesz spróbować następujących rzeczy:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Tomek
źródło
3
Pracuje !! Dzięki !
Rakhi Dhavale
2
Miałem ten problem z Parcelem i rozwiązałem twoją odpowiedź, dziękuję!
Ângelo Polotto
12
Przy okazji, powinno to być wykonane w Powershellcmd systemu Windows, a nie w cmd.
user218867
Dzięki wielkie!! Faceci powinni najpierw spróbować tego!
Fes Nguyen
3
@HDJEMAI, myślę, że to zależy od kontekstu, w którym to uruchamiasz. Unrestrictedoznacza, że ​​możesz uruchomić wszystkie skrypty. Inną opcją byłoby ustawienie zasad wykonywania na RemoteSignedtaką, na jaką pozwala, Allow local scripts and remote signed scriptsale w zależności od aplikacji i tego, co robi, może nadal powodować ten sam błąd. Myślę, że Twoje podejście jest uzasadnione w zakresie bezpieczeństwa i zawsze możesz przeczytać, jakie zasady są przed jej użyciem Get-ExecutionPloicy. Chociaż to powiedziane, zakres jest aktualnym użytkownikiem, więc moim zdaniem ryzyko jest niewielkie. Mam nadzieję, że to pomoże.
Tom
27

Otwórz PowerShell w trybie administracyjnym i uruchom następujące polecenie

Set-ExecutionPolicy RemoteSigned

Słoneczny
źródło
25

Uruchom ten kod w programie PowerShell lub cmd

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Harrish Selvarajah
źródło
1
Działa również w innych językach (edycja aplikacji Ionic teraz)!
Chiwda
Pracował dla mnie, jak również, ran wewnątrz terminalu kod wizualny Studio w celu uzyskania Typescript uruchomiony przy użyciu polecenia TSC
aonepathan
12

Jeśli używasz kodu Visual Studio:

  1. Otwórz terminal
  2. Uruchom polecenie: Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
  3. Następnie uruchom polecenie kątomierz conf.js

Jest to związane z wykonywaniem skryptu testowego kątomierza i napotkałem ten sam problem i został on rozwiązany w ten sposób.

Mohd Yusuf
źródło
7

Poniższe trzy kroki służą do naprawienia opcji Uruchomione skrypty są wyłączone w przypadku tego błędu systemu

Krok 1: Aby rozwiązać tego rodzaju problem, musimy uruchomić powłokę zasilania w trybie administratora.

Krok 2: Wpisz następujące polecenie set-ExecutionPolicy RemoteSigned Krok 3: Naciśnij klawisz Y, aby potwierdzić.

Odwiedź poniższe, aby uzyskać więcej informacji, https://youtu.be/J_596H-sWsk

dr Chandra Kant Sharma
źródło
4

Zasady wykonywania programu PowerShell są domyślnie ustawione na Ograniczone. Zasady wykonywania programu PowerShell można zmienić za pomocą polecenia cmdlet Set-ExecutionPolicy. Aby uruchomić poza skryptem, ustaw zasady na RemoteSigned.

PS C:> Set-ExecutionPolicy RemoteSigned Poniżej znajduje się lista czterech różnych zasad wykonywania w PowerShell

Ograniczone - nie można uruchamiać żadnych skryptów. AllSigned - można uruchamiać tylko skrypty podpisane przez zaufanego wydawcę. RemoteSigned - pobrane skrypty muszą być podpisane przez zaufanego wydawcę. Bez ograniczeń - można uruchomić wszystkie skrypty programu Windows PowerShell.

Nabeh Nabeh
źródło
3

otwórz Windows PowerShell w trybie administratora i uruchom następujące polecenie i jego pracę VOILA !!

Set-ExecutionPolicy RemoteSigned

akshay jain
źródło
2

Innym rozwiązaniem jest usunięcie ng.ps1 z katalogu C: \ Users% username% \ AppData \ Roaming \ npm \ i wyczyszczenie pamięci podręcznej npm

Prabhath Withanage
źródło
1
Miałem ten sam błąd z modułem npm i to jest rozwiązanie, które lubię najbardziej. Jeśli usuniesz plik .ps1, zdarzy się, że użyje jednego z dwóch pozostałych skryptów (np. .Cmd w systemie Windows, tego bez rozszerzenia) i nie musisz zmieniać konfiguracji zabezpieczeń
Giovanni P.
0

Myślę, że możesz użyć PowerShell w trybie administracyjnym lub w wierszu polecenia.

Sashini Hettiarachchi
źródło