2017-11-07 10 views
1

Powershellコマンドを呼び出すWindows 10で動作するC#WPFアプリケーションがあります。通常、コードは正常に実行され、すべて正常ですが、今はありません。C#のPowershellコマンドは機能しません

Powershellコマンドはエラーなく実行されますが、何もしません。私はこれらのコマンドに関するコードを変更していません。

私が呼ぶ方法は以下の通りです:

using (var ps = PowerShell.Create()) //Mounts iso image 
{ 
     ps.AddScript("Mount-DiskImage"); 
     ps.AddParameter("ImagePath", IMG); 
     string outp = ""; 
     Collection<PSObject> PSOutput = ps.Invoke(); 
     using (StringWriter sw = new StringWriter()) 
     { 
      foreach (PSObject invoke in PSOutput) 
       sw.WriteLine(invoke.ToString()); 
      outp = sw.ToString(); 
     } 
     if (ps.Streams.Error.Count > 0) 
     { 
      outp += Environment.NewLine + string.Format("{0} errors: ", ps.Streams.Error.Count); 
      foreach (ErrorRecord err in ps.Streams.Error) 
        outp += Environment.NewLine + err.ToString(); 
      MessageBox.Show(outp); 
     } 
} 

編集:1が発生した場合はエラーを返すように変更コード。テスト時にエラーは表示されませんでした。

編集2:エラーチェックを追加しました。これはエラーを返しますが、それが何であるかはわかりません。

編集3:エラー出力を表示するようにコードを変更しましたが、ImagePathパラメータを提供できませんでした(私はそうしませんでした)。私はメソッドに渡す前にIMGパラメータをチェックしました。実際にはフルパスです。ここで何が間違っていますか?

+0

コードが正しいように見えます。 'IMG'パラメータが有効であることを確認してください。 – Icemanind

+0

@Icemanidパラメータも変更されていないことを確かめてください。イメージへの有効なグローバルパスである必要があります。 –

+0

https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/「同期実行」までスクロールします。エラー出力を取得する方法があります(存在する場合)。 – Fildor

答えて

1

まあ、自分の問題を修正しました(少なくとも今のところは問題ありません)。一つは、もともと私はそれを修正するために別のものを試していたときに、私はps.AddCommand()ps.AddScript()に変更し、動作しなかったときにそれを元に戻すのを忘れた。このシナリオを呼び出す正しい方法は、明らかにps.AddCommand()です。これは私の問題を解決しませんでした。 HERE同様の問題の解決策を見つけたので、私はそれを試してみました。

要約すると、レジストリでHKLM\System\CurrentControlSet\Services\FsDependsにナビゲートします。 DWORD値Startをクリックし、3から0に変更します。適用するために再起動します。どうやらそれは、その特定のWindowsサービスの混乱したタイミングと関係がある。これが恒久的な解決策であるかどうかはわかりませんが、すべてのコードが順番になっているようです。

+1

@Fildor完了。 –

関連する問題