10

Windows イベントからログを収集する Java プログラムを Windows で実行しています。特定の操作が実行される .csv ファイルが作成されます。

コマンドが実行され、パイプされます。プロセスが完了するまで Java プログラムを待機させるにはどうすればよいですか?

私が使用しているコードスニペットは次のとおりです。

Runtime commandPrompt = Runtime.getRuntime();
try {           
    Process powershell = commandPrompt.exec("powershell -Command \"get-winevent -FilterHashTable @{ logname = 'Microsoft-Windows-PrintService/Operational';StartTime = '"+givenDate+" 12:00:01 AM'; EndTime = '"+beforeDay+" 23:59:59 ';  ID = 307 ;} | ConvertTo-csv| Out-file "+ file +"\"");
//I have tried waitFor() here but that does not seem to work, required command is executed but is still blocked
} catch (IOException e) { }
// Remaining code should get executed only after above is completed.
4

3 に答える 3

14

waitFor()の代わりに使用する必要がありますwait()。そうすれば、実行されたコマンドが終了するまでスレッドがブロックされます。

于 2012-09-16T17:07:57.653 に答える
7

ここで答えを見つけましたJava同期からシェルスクリプトを実行します

public static void executeScript(String script) {
    try {
        ProcessBuilder pb = new ProcessBuilder(script);
        Process p = pb.start(); // Start the process.
        p.waitFor(); // Wait for the process to finish.
        System.out.println("Script executed successfully");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2015-07-18T18:18:00.093 に答える
3

これは機能します。そうでない場合は、正確に何が機能しないかを指定してください

Runtime commandPrompt = Runtime.getRuntime();
try {           
    Process powershell = commandPrompt.exec("powershell -Command \"get-winevent -FilterHashTable @{ logname = 'Microsoft-Windows-PrintService/Operational';StartTime = '"+givenDate+" 12:00:01 AM'; EndTime = '"+beforeDay+" 23:59:59 ';  ID = 307 ;} | ConvertTo-csv| Out-file "+ file +"\"");
    powershell.waitFor();
} catch (IOException e) { }
// remaining code
于 2012-09-16T17:18:27.243 に答える