it-swarm.com.de

Wie können Sie die Ausführungsrichtlinie erfolgreich ändern und die Ausführung von PowerShell-Skripts aktivieren?

Ich habe ein Problem bezüglich der Änderung der Ausführungsrichtlinie in meinem Windows Server 2008+-Betriebssystem. Es ist das erste Mal, dass ich versuche, ein Skript auszuführen, für das ich vollen Zugriff auf die Ressource benötige. Ich versuche Folgendes: Powershell in erhöhter Modus

Set-ExecutionPolicy Unrestricted

Aber ich verstehe das:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your Shell will retain its current
effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. For more information please see
"Get-Help Set-ExecutionPolicy".
At line:1 char:1
+ Set-ExecutionPolicy Unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Obwohl ich Administrator bin, kann ich die Ausführungsrichtlinie nicht ändern. Was ist zu tun? 

28
Andry

Die Fehlermeldung zeigt an, dass die Einstellung, die Sie über Set-ExecutionPolicy zu definieren versuchen, von einer Einstellung in einem anderen Bereich überschrieben wird. Verwenden Sie Get-ExecutionPolicy -List, um zu sehen, welcher Bereich welche Einstellung hat.

PS C:\>Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process          Undefined
  CurrentUser          Undefined
 LocalMachine       RemoteSigned

PS C:\>Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:\>Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your Shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:\>Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process         RestrictedCurrentUser       Unrestricted
 LocalMachine       RemoteSigned

PS C:\>.\test.ps1
.\test.ps1 : File C:\test.ps1 cannot be loaded because running scripts is
disabled on this system. ...
PS C:\>Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:\>Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your Shell will retain its current
effective execution policy of Restricted. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. ...
PS C:\>Get-ExecutionPolicy -List

        Scope    ExecutionPolicy
        -----    ---------------
MachinePolicy          Undefined
   UserPolicy          Undefined
      Process       UnrestrictedCurrentUser         Restricted
 LocalMachine       RemoteSigned

PS C:\>.\test.ps1Hello World!

Wie Sie sehen können, wurden beide Einstellungen trotz des Fehlers definiert, aber die Einstellung im spezifischeren Bereich (Process) hat immer noch Vorrang, indem sie die Skriptausführung entweder verhindert oder zulässt.

Da der Standardbereich LocalMachine ist, kann der Fehler durch eine Einstellung im Bereich CurrentUser oder Process verursacht werden. Ein häufigerer Grund ist jedoch, dass die Skriptausführung über eine Gruppenrichtlinie (entweder lokal oder Domäne) konfiguriert wurde.

Eine lokale Gruppenrichtlinie kann von einem lokalen Administrator über gpedit.msc (Local Group Policy Editor) wie in diese Antwort beschrieben geändert werden.

Eine Domänengruppenrichtlinie kann nicht durch lokale Einstellungen/Richtlinien ersetzt werden und muss von einem Domänenadministrator über gpmc.msc (Gruppenrichtlinienverwaltung) auf einem Domänencontroller geändert werden.

Für lokale Richtlinien und Domänenrichtlinien kann die Einstellung als Computereinstellung definiert werden:

Computer Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

oder als Benutzereinstellung:

User Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

Erstere werden auf Computerobjekte angewendet, während Letztere auf Benutzerobjekte angewendet werden. Bei lokalen Richtlinien gibt es keinen signifikanten Unterschied zwischen Benutzer- und Computerrichtlinien, da Benutzerrichtlinien automatisch auf alle Benutzer auf dem Computer angewendet werden.

Eine Richtlinie kann einen von drei Status haben (oder fünf Status, wenn Sie die drei für den Status Enabled verfügbaren Einstellungen separat zählen):

  • Nicht konfiguriert: Die Richtlinie steuert nicht die Ausführung von PowerShell-Skripts.
  • Aktiviert: Erlaube die Ausführung des PowerShell-Skripts .
    • Nur signierte Skripts zulassen: Nur die Ausführung signierter Skripts zulassen (wie Set-ExecutionPolicy AllSigned).
    • Lokale Skripts und entfernte signierte Skripts zulassen: Ermöglicht die Ausführung aller (signierten oder nicht signierten) lokalen Skripts und signierten Skripts von entfernten Standorten aus (wie Set-ExecutionPolicy RemoteSigned).
    • Alle Skripts zulassen: Ermöglicht die Ausführung von lokalen und Remote-Skripts, unabhängig davon, ob sie signiert sind oder nicht (wie Set-ExecutionPolicy Unrestricted).
  • Disabled: Ausführung von PowerShell-Skripts nicht zulassen (wie Set-ExecutionPolicy Restricted).

Änderungen, die über Set-ExecutionPolicy vorgenommen werden, werden nur wirksam, wenn lokale und Domänenrichtlinien auf Not Configured gesetzt sind (Ausführungsrichtlinie Undefined in den Bereichen MachinePolicy und UserPolicy).

30
Ansgar Wiechers

Das Problem ist, dass Windows nicht zulässt, dass alle Skripts im Unrestricted-Modus ausgeführt werden. Unabhängig von der Ausführungsrichtlinie für Ihren Benutzer (auch wenn der Administrator dies tut) hat der Local Group Policy Priorität. 

Standardmäßig ist die lokale Gruppenskriptausführungsrichtlinie eine solche, für die keine Skripts ausgeführt werden dürfen. Wir müssen es ändern!

Ändern der Ausführungsrichtlinie für lokale Gruppen

Wir machen dies über den Local Group Policy Editor, den Sie erreichen können, indem Sie in der Windows-Suchleiste nach "Gruppenrichtlinien" suchen. Oder mache das:

  1. Öffnen Sie die Management Console, indem Sie Win + r drücken und den Befehl mmc eingeben.
  2. Gehe zu File -> Add Remove Snap In....
  3. Suchen Sie im linken Bereich Group Policy Object Editor und fügen Sie es hinzu.
  4. Schließen Sie das Formular.

Im linken Bereich kann dann der Gruppeneditor erweitert werden. Erweitern Sie es und navigieren Sie zu Computer Configuration -> Administrative Templates -> Windows Components.

enter image description here

Dann zu Windows PowerShell.

enter image description here

Wählen Sie also Turn on Script Execution aus. Ändern Sie die Konfiguration in Enabled und geben Sie Allow all scripts in Execution Policy an.

enter image description here

Bestätigen Sie mit Ok und schließen Sie die Management Console.

26
Andry
11
Diganta Kumar

Wenn Sie kürzlich mit Visual Studio 2015 darauf stoßen, prüfen Sie, ob Updates für den Nuget-Paketmanager in Tools> Erweiterungen und Updates vorhanden sind 

8
Jhayes2118

Wenn die PowerShell ExecutionPolicy von einem Domänencontroller über eine Gruppenrichtlinie festgelegt wird, müssen Sie die ExecutionPolicy nach jedem Start in der Registrierung auf "Bypass" zurücksetzen. Ich habe ein Paar Startskripte erstellt, um den Prozess zu automatisieren. Im Folgenden beschreibe ich meinen Prozess.

Erstellen Sie einen Ordner mit dem Namen% USERPROFILE%\Documents\StartupScripts, und fügen Sie ein PowerShell-Skript mit dem Namen ExecutionPolicy.ps1 mit folgendem Code hinzu:

Push-Location
Set-Location HKLM:\Software\Policies\Microsoft\Windows\PowerShell
Set-ItemProperty . ExecutionPolicy "Bypass"
Pop-Location

Erstellen Sie dann eine Datei mit dem Namen% USERPROFILE%\AppData\Roaming\Microsoft\Windows\Startmenü\Programme\Startup\Startup.cmd, und fügen Sie den folgenden Code ein:

PowerShell -Version 3.0 -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell -Version 3.0 "%USERPROFILE%\Documents\StartupScripts\ExecutionPolicy.ps1" >> "%TEMP%\StartupLog.txt" 2>&1

Dieses Skript wird zu Beginn jeder Anmeldung ausgeführt.

4
Perry Tribolet

Auch wenn die Antwort von @Ansgar Wiechers nicht funktioniert. Dann kann es zu Problemen mit Ihrem MachinePolicy Scope kommen. Es kann also eine Problemumgehung für dieses Problem geben: Bearbeiten Sie den Registrierungswert für den ExecutionPolicy-Schlüssel unter

HKEY_LOCAL_MACHINE -> SOFTWARE -> Richtlinien -> Microsoft -> Windows -> Powershell

nachdem ich so viele Lösungen ausprobiert hatte, funktionierte es für mich, ps script auszuführen.

2
Rashmi Jain

Erstellen Sie den folgenden ps.cmd und fügen Sie ihn in Ihren PFAD ein:

POWERSHELL -Command "$enccmd=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content '%1' | Out-String)));POWERSHELL -EncodedCommand $enccmd"

Jetzt können Sie jedes Powershell-Skript wie folgt ausführen:

psa mypowershell.ps1
0
Marc