2012-02-08 15 views
2

私は自分のアプリケーション内でpowershellをホストしており、制限されたrunspacepoolを設定しています。明らかにカスタムコマンドレットで制限されたPowershellをホストする

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

} 

、私はこのコードを実行すると...

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

利用可能な「インポート・モジュール」コマンドレットがないので、それが失敗しました。だから、私の質問は、 "Import-Module"コマンドレットが利用できないままモジュールをインポートする方法です。

これは私が取得していますエラーメッセージ...

用語「インポート・モジュールは、」コマンドレットの名前、 機能、スクリプトファイル、または操作可能なプログラムとして認識されていないです。 の名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから、 を再試行してください。

+0

x0nの回答は役に立ちますか? http://stackoverflow.com/questions/6266108/powershell-how-to-import-module-in-a-runspace –

+0

これはモジュールをインポートする別の方法を示していますが、私はまだ同じエラーが発生しています(私は、私の質問を実際のエラーテキストで更新します)。とにかくありがとう。 –

+0

ちょっとばかげた質問ですが、PS v2が正しくインストールされていますか?あなたのコードは 'Get-Process'のような他のコマンドレットで動作しますか? –

答えて

3

私は解決策を見つけました。私は今どこに行ったのか覚えていません。私はこの質問をしました。とにかく、ここでは同じ問題を抱えている人の利益のためです。

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

私は実際に私はこの質問をした際にインポートしようとしたモジュールを参照することはできませんが、私は成功しAppFabricの管理PowerShellコマンドレットを使用するため、上記のコードを使用しています。

関連する問題