Anzeige

Am Puls von Microsoft

Anzeige

[gelöst] Poswershellscripte ausführbar machen

o0Julia0o

gehört zum Inventar
hey, wie kann ich powershell scripte ausführbar machen?

Beim Ausführversuch erhalte ich:
Code:
Die Datei "E:\test.ps1" kann nicht geladen werden, da die Ausführung von
Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies"
(https:/go.microsoft.com/fwlink/?LinkID=135170).
    + CategoryInfo          : Sicherheitsfehler: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess
Ich werde also an diese Seite verwiesen:
https://technet.microsoft.com/de-DE/library/hh847748.aspx

Ich gebe also folgendes ein:
Code:
Set-ExecutionPolicy -ExecutionPolicy Localmachine
Doch dann erhalte ich folgende Fehlermeldung:
Code:
Set-ExecutionPolicy : Der Parameter "ExecutionPolicy" kann nicht gebunden werden. Der Wert "Localmachine" kann nicht
in den Typ "Microsoft.PowerShell.ExecutionPolicy" konvertiert werden. Fehler: "Der Bezeichner "Localmachine" kann
keinem gültigen Enumeratornamen zugeordnet werden. Geben Sie einen der folgenden Enumeratornamen an, und wiederholen
Sie den Vorgang:
Unrestricted, RemoteSigned, AllSigned, Restricted, Default, Bypass, Undefined"
In Zeile:1 Zeichen:38
+ Set-ExecutionPolicy -ExecutionPolicy Localmachine
+                                      ~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-ExecutionPolicy], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Ich möchte, dass Powershellscripte ausgeführt werden auf dem PC. Und das auch wieder rückgängig machen können, wenn das nicht mehr gebraucht wird. Damit die Sicherheit nicht so lange gefährtdet ist.

Bei:
Code:
 Get-ExecutionPolicy -List
erhalte ich:
Code:
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined
 
Zuletzt bearbeitet:
Anzeige
Hallo.

In die Suche "powershell" (ohne "") eingeben. Dann mit rechter Maustaste anklicken und "Als Administrator ausführen".

Dann in die Konsole eingeben:

Set-ExecutionPolicy -ExecutionPolicy 'RemoteSigned' -Force
 
Hallo o0Julia0o,
Microsoft schreibt hier about_Execution_Policies dazu folgendes:
UNDEFINED

- Im aktuellen Gültigkeitsbereich ist keine Ausführungsrichtlinie festgelegt.
- Wenn die Ausführungsrichtlinie in allen Gültigkeitsbereichen den Wert „Undefined“ aufweist, lautet die gültige Ausführungsrichtlinie „Restricted“, bei der es sich um die Standardausführungsrichtlinie handelt.
Hinweis: Auf Systemen, die nicht zwischen UNC-Pfaden (Universal Naming Convention) und Internetpfaden unterscheiden, werden Skripts, die über einen UNC-Pfad identifiziert werden, mit der RemoteSigned-Ausführungsrichtlinie möglicherweise nicht ausgeführt.
Du musst also folgenden Befehl eingeben:
Code:
Set-ExecutionPolicy Unrestricted
oder folgenden Befehl ausführen:
Code:
Set-ExecutionPolicy Bypass

Bitte lies dir den verlinkten Artikel noch einmal genau durch!
 
Danke, hab das auf beiden PC´s so eingegeben(bis auf das -Force am Ende, weil ich das nach dem Neustart wieder weghaben möchte, solange ich nicht den Befehl zum wiederwegmachen kenne). Aber es ändert nichts. der Fehler bleibt identisch.
Also so eingegeben:
Code:
Set-ExecutionPolicy -ExecutionPolicy 'RemoteSigned'

Bei:
Code:
Get-ExecutionPolicy -List
erhalte ich nun
Code:
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

@skorpion
danke! Auch das ändert nichts. Habe es auf beiden PC´s geändert. Der Fehler bleibt identisch.
Der 2. Befehl scheint den 1. auch zu ersetzen. Und den von Micha auch. Wobei der 1. Befehl identisch zu dem von Micha scheint(jedenfalls im Ergebnis von "Get-ExecutionPolicy -List").

Das habe ich dann:
Code:
Get-ExecutionPolicy -List
Code:
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    Bypass
 
Dann versuche es mal so:

Set-ExecutionPolicy -Scope 'LocalMachine' -ExecutionPolicy 'RemoteSigned'

Set-ExecutionPolicy -Scope 'CurrentUser' -ExecutionPolicy 'RemoteSigned'

oder

Set-ExecutionPolicy -Scope 'LocalMachine' -ExecutionPolicy 'Bypass'

Set-ExecutionPolicy -Scope 'CurrentUser' -ExecutionPolicy 'Bypass'

---------------
Edit:
Rückgängig machen geht dann so:

Set-ExecutionPolicy -Scope 'LocalMachine' -ExecutionPolicy 'Undefined'

Set-ExecutionPolicy -Scope 'CurrentUser' -ExecutionPolicy 'Undefined'
 
Warum so kompliziert? Einstellungen - "Update und Sicherheit" - "Für Entwickler", ganz unten lässt sich die Ausführungsrichtlinie für lokale Scripte jederzeit auf Mausklick ein- oder ausschalten.
 
Der Fehler bleibt immer identisch. Egal ob ich die beiden RemoteSigned oder Bypass-Befehle abgesetzt habe.

Komischerweise muss ich zuerst immer den CurrentUser-Befehl da machen, und danach den LocalMachine-Befehl. Bei RemoteSigned und bei Bypass. Sonst kommt eine Fehlermeldung:
Code:
Sicherheitsfehler
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
Aber in der richtige Reihenfolge abgesetzt, geht es ja.

Wenn ich das Script ausführe, dann öffnet sich immer ein weitere Powershell-Fenster. Also nicht das, wo ich die Befehler absetze. Ist das egal?

Mit areilands Tipp funktioniert es!
 
Das Powershellfenster, das sich nach Start eines Scripts öffnet und sichtbar bleibt, kann man wie folgt unterdrücken:

Direkt an den Anfang des Scripts einfügen:

Code:
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'
[Void][Console.Window]::ShowWindow([Console.Window]::GetConsoleWindow(),0)

Danach poppt das Fenster kurz auf und verschwindet dauerhaft.
 
Anzeige
Oben