2

J'héberge powershell dans mon application et j'ai mis en place un espace restreint, qui est vide (au meilleur de ma connaissance).Héberger un Powershell restreint avec des applets de commande personnalisées

public class MyPowerShell : IDisposable 
{ 
    private RunspacePool _runspacePool; 
    private PowerShell _shell; 

    public MyPowerShell() 
    { 
     try 
     { 
      var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer); 

      _runspacePool = RunspaceFactory.CreateRunspacePool(initialSessionState); 

      _shell = PowerShell.Create(); 
      _shell.RunspacePool = _runspacePool; 
      _shell.RunspacePool.Open(); 

      _shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly()); 
      _shell.Invoke(); 
      _shell.Commands.Clear(); 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 

    public void Dispose() 
    { 
     _shell.RunspacePool.Close(); 
     _shell.Dispose(); 
    } 

    public string[] Exec(string commandText) 
    { 
     var results = new List<string>(); 

     try 
     { 
      _shell.AddScript(commandText); 
      foreach (var str in _shell.AddCommand("Out-String").Invoke<string>()) 
      { 
       results.Add(str); 
      } 
     } 
     catch (Exception ex) 
     { 
      results.Add(ex.Message); 
     } 
     return results.ToArray(); 
    } 

} 

évidemment, quand je lance ce code ...

 _shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly()); 
     _shell.Invoke(); 
     _shell.Commands.Clear(); 

échoue parce qu'il n'y a pas d'applet de commande "Import-Module" disponible. Donc, ma question est comment puis-je importer un module sans que l'applet de commande "Import-Module" soit disponible?

Tel est le message d'erreur que je reçois ...

Le terme « Import-Module » est pas reconnu comme le nom d'une applet de commande, la fonction , fichier de script ou d'un programme opérationnel. Vérifiez l'orthographe du nom , ou si un chemin a été inclus, vérifiez que le chemin est correct et réessayez.

+0

Est-ce que la réponse de x0n aide? http://stackoverflow.com/questions/6266108/powershell-how-to-import-module-in-a-runspace –

+0

il montre une manière alternative d'importer des modules, mais je reçois toujours la même erreur (I ' ll mettra à jour ma question avec le texte d'erreur réel). Merci quand même. –

+0

Juste une question stupide, mais vous avez installé PS v2 droite? Votre code fonctionne-t-il avec d'autres cmdlets telles que Get-Process? –

Répondre

3

J'ai trouvé une solution, je ne me souviens pas où je l'ai fait maintenant et j'aurais oublié que j'avais posé cette question! Quoi qu'il en soit, ici c'est pour le bénéfice de n'importe qui avec le même problème.

var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer); 
initialSessionState.ImportPSModule(new [] { "ModuleName1", "ModuleName2" }); 

Je ne peux pas vraiment voir quel module je cherchais à importer quand je pose cette question, mais je l'ai utilisé avec succès le code ci-dessus pour l'utilisation de cmdlets powershell d'administration AppFabric.

Questions connexes