2017-03-28 8 views
0

私のC#アプリケーションから次のPowerShellコマンドを実行しようとしました。C#からPowerShellを実行できません: 'Dism'モジュールで 'Get-WindowsOptionalFeature'コマンドが見つかりましたが、モジュールをロードできませんでした

$check = Get-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 
if ($check.Installed -eq 'False') { 
    Enable-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 
} 

しかし、私はこれを実行すると、PowerShellは、次の例外が発生します:

「ゲット・WindowsOptionalFeature」コマンドは、モジュールのます。Dism "で見つかりましたが、モジュールがロードできませんでした。詳細については、 'Import-Module Dism'を実行してください。

ただし、PowerShellウィンドウから同じスクリプトを実行するとうまく動作します。私の問題の根源は何ですか? 1 - - 5 14393から953

C#コード::私のオペレーティングシステムが

PowerShellのバージョンのWindows 10で、このようなあなたのスクリプト内の 'インポートモジュールます。Dism' を含む

const string psScript = @"$check = Get-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 
if ($check.Installed -eq 'False') { 
    Enable-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 
}"; 

using (var PowerShellInstance = PowerShell.Create()) 
{ 
    PowerShellInstance.AddScript(psScript); 
    var PSOutput = PowerShellInstance.Invoke(); 

    if (PowerShellInstance.Streams.Error.Count > 0) 
    {      
     foreach (var err in PowerShellInstance.Streams.Error) 
      logger.LogError(err.ToString()); 
    } 

    foreach (var outputItem in PSOutput) 
    {    
     if (outputItem != null) 
      logger.LogInfo(outputItem.ToString()); 
    } 
} 

答えて

1

してみてください。

const string psScript = @"Import-Module Dism; $check = Get-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 if ($check.Installed -eq 'False') { Enable-WindowsOptionalFeature -Online -FeatureName WCF-HTTP-Activation45 };"; 
+0

これが原因である可能性もありますが、この問題を起こしたマシンでは機能しませんでした。私のマシンでは正常に動作しますが、Windows 10マシンではそのスクリプトに失敗します。私が推測しているのは、Windowsマシン上にモジュールがないことです。どこかに壊れたモジュール。しかし、PowerShellコマンドラインアプリケーションでうまく動作するのはなぜですか?しかし、このエラーはC#で表示されますか? – Saeid

+1

はい、モジュールをインストールしていない可能性があります。 win10マシンにhttps://www.microsoft.com/es-ES/download/details.aspx?id=40855をインストールしてみてください。 –

関連する問題