2010-12-02 28 views
3

selon la méthode que j'ai utilisée pour obtenir le paramètre de stratégie d'exécution pour Powershell, j'obtiens deux valeurs différentes.Powershell Get-ExecutionPolicy renvoie différentes valeurs

Si je cours Get-ExecutionPolicy dans une invite Powershell, je reçois «sans restriction».

Si j'utilise le code suivant, j'obtiens 'Restreint'.

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; 
    } 
} 

Encore une fois, je suis 'restreint' avec le code suivant:

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

J'ai également vérifié dans le registre ici: HKEY_Local_Machine\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.Powershell\ExecutionPolicy et là, il dit Unrestricted.

Une idée de pourquoi j'obtiens un résultat différent? Est-ce que mon code est incorrect peut-être?

Répondre

5

Implémentez-vous un hôte personnalisé? Si tel est le cas, la stratégie d'exécution par défaut sera restreinte et devra être définie pour cet hôte (sous ShellIds).

Quoi qu'il en soit, vous devriez être en mesure d'exécuter cette commande d'abord dans votre code pour remplacer le paramètre:

Set-ExecutionPolicy RemoteSigned -Scope process 
+0

Merci. En fin de compte, ce code sera exécuté dans un service Windows. Pour l'instant, je le teste dans une application Windows. De quels droits aurai-je besoin pour pouvoir remplacer le paramètre? – joerage

+0

En outre, existe-t-il un moyen de savoir quel est le paramètre global? De cette façon, je serai en mesure d'exécuter mon script PS sous cette stratégie, et si les droits ne suffisent pas (par exemple, si la stratégie est restreinte), elle échouera (ce qui me convient). – joerage

+1

Aucun droit spécial n'est requis pour remplacer le paramètre AFAIK. En gardant à l'esprit que le paramètre est par shell/hôte, Get-ExecutionPolicy vous indique la stratégie effective pour cet hôte. La stratégie effective est déterminée en évaluant les paramètres de différents niveaux de priorité, de la stratégie de groupe de machines à la stratégie de machine locale. Voir la rubrique d'aide 'about_execution_policies' pour plus de détails. –