2010-12-02 12 views
3

Abhängig von der Methode, die ich verwendet habe, um die Ausführungsrichtlinie für Powershell abzurufen, erhalte ich zwei verschiedene Werte.Powershell Get-ExecutionPolicy gibt verschiedene Werte zurück

Wenn ich Get-ExecutionPolicy in einer Powershell-Eingabeaufforderung ausführen, bekomme ich 'Unrestricted'.

Wenn ich den folgenden Code verwende, bekomme ich "Restricted".

using (var runspace = RunspaceFactory.CreateRunspace()) 
{ 
    runspace.Open(); 

    var pipeline = runspace.CreatePipeline(); 
    pipeline.Commands.AddScript("Get-ExecutionPolicy"); 

    foreach (var result in pipeline.Invoke()) 
    { 
     var restriction = ((ExecutionPolicy)result.BaseObject); 
     break; 
    } 
} 

Noch einmal, ich mit dem folgenden Code 'Restricted' erhalten:

using (var invoker = new RunspaceInvoke()) 
{ 
    foreach (var result in invoker.Invoke("Get-ExecutionPolicy")) 
    { 
     var restriction = ((ExecutionPolicy)result.BaseObject); 
     break; 
    } 
} 

ich auch hier in der Registrierung überprüft: HKEY_Local_Machine\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.Powershell\ExecutionPolicy und dort heißt es uneinnehmbar.

Eine Idee, warum ich ein anderes Ergebnis bekomme? Ist mein Code vielleicht falsch?

Antwort

5

Implementieren Sie einen benutzerdefinierten Host? Wenn dies der Fall ist, wäre die Standardausführungsrichtlinie eingeschränkt und müsste für diesen Host (unter ShellIds) festgelegt werden.

So oder so, sollten Sie in der Lage sein, diesen Befehl auszuführen, zunächst in dem Code, um die Einstellung zu überschreiben:

Set-ExecutionPolicy RemoteSigned -Scope process 
+0

Dank. Letztendlich wird dieser Code in einem Windows-Dienst ausgeführt. Im Moment teste ich es in einer Windows-Anwendung. Welche Rechte benötige ich, um die Einstellung außer Kraft setzen zu können? – joerage

+0

Gibt es auch eine Möglichkeit zu wissen, was die Gesamteinstellung ist? Auf diese Weise kann ich mein PS-Skript unter dieser Richtlinie ausführen, und wenn die Rechte nicht ausreichen (z. B. wenn die Richtlinie auf eingeschränkt festgelegt ist), wird es fehlschlagen (womit ich einverstanden bin). – joerage

+1

Zum Überschreiben der Einstellung AFAIK sind keine speziellen Rechte erforderlich. Wenn Sie bedenken, dass die Einstellung pro Shell-ID/Host erfolgt, zeigt Get-ExecutionPolicy die effektive Richtlinie für diesen Host an. Die effektive Richtlinie wird ermittelt, indem Einstellungen für verschiedene Prioritätsstufen von der Maschinengruppenrichtlinie bis zur lokalen Maschinenrichtlinie ausgewertet werden. Weitere Informationen finden Sie im Hilfethema 'about_execution_policies'. –

Verwandte Themen