私はPowershellをC#から呼び出して情報を収集し、Out-Fileを使ってテキストファイルに送ります。次に、私は上記のファイルから行を読んで、C#の中のデータを使って処理する必要があります。それは、テキストファイルを開こうとするとPowershellからファイルを作成してからC#
string MyCommand = "-Command &{ get-process | Out-File C:\\MyFile.txt}";
ProcessStartInfo MyProcInfo = new ProcessStartInfo();
MyProcInfo.FileName = "powershell.exe";
MyProcInfo.Arguments = MyCommand;
Process MyProcess = new Process();
MyProcess.StartInfo = MyProcInfo;
MyProcess.Start();
MyProcess.WaitForExit();
try
{
var lines = File.ReadLines(@"C:\MyFile.txt");
(etc)
}
catch (Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
は、だから私は
例外 "ファイルが見つかりません"
を取得しています。ファイルは、が毎回書かれているので、私は、タイミングの事が起きていると仮定しています。それは、なぜ私が
WaitForExit
を使用しているのかということです。しかし、それはまだファイルを見つけることができません。
を助けるあなたがC 'への書き込みアクセス権を持っているあなたは確かにあります:'とファイルが書かれていますか? 'C:'に直接書き込むときにスローされる 'UnauthorizedAccessException'のために、私はそれを疑っています。 'MyProcInfo.UseShellExecute = false;を使用してください。 MyProcInfo.RedirectStandardOutput = true; '、その出力を' string'にリダイレクトし、どこに問題があるかを確認します。 'MyProcess.StandardOutput.ReadLine();'を囲む 'while(!MyProcess.StandardOutput.EndOfStream)'はそのトリックを行うべきです。 – jAC
注:Powershell側が動作しています。ファイルは書き込まれます...私は実際にテストするたびに手動で削除します。だから、私はC:\への書き込みアクセス権を持っています。 File.ReadLinesにアクセスすると問題が発生します。それは私がファイルを見つけられなかったときです – PSNewb
@wOxxOm置換を行う予定がない場合は、実際には一重引用符の文字列リテラルを使用してください。 – TheIncorrigible1