Java를 통해 Powershell 스크립트를 호출하려고하지만 해당 스크립트의 출력을 읽으려고하면 스크립트가 중단됩니다. 그것은에 달려 "input.readLine()"여기 powershell 스크립트를 시작한 후 java input.readLine이 중단됩니다.
우리가 시도 코드입니다 : 우리는이 솔루션 Java program hangs when trying to invoke powershell script 보고 시도 String command = "cmd /c powershell C:\\_checkouts\\TestPowerShell\\passwordExpirationTime.ps1";
Process p = Runtime.getRuntime().exec(command);
new InputStreamReader(p.getInputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();;
for (String line = input.readLine(); line != null; line = input.readLine()) {
stringBuilder.append(line);
}
input.close();
String msg = stringBuilder.toString();
System.out.println("msg: " + msg);
그러나 그 제안 중 어느 것도 우리를 위해 일했다.
또한 cmd/c 및 cmd/k를 사용하지 않고 시도했습니다. 모든 스크립트를 호출 할 수있는 제네릭 클래스로이 스크립트를 사용하기를 원합니다. 즉 BAT, BASH, SH, Powershell 등
아이디어가 있으십니까?
try{
final ProcessBuilder pb = new ProcessBuilder("powershell","C:\\psFile.ps1");
pb.redirectInput(Redirect.from(new File("NUL")));
final Process p = pb.start();
final int retcode = p.waitFor();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}catch (Exception e){
e.printStackTrace();
}
는 여기에 몇 가지 추가 정보입니다 : 여기 아래의 대답
덕분에 일 코드입니다. 우리의 파워 쉘은 제한적이기 때문에 오류를 반환하고있었습니다. 그래서 NUL 로의 모든 리디렉션이 필요했습니다. 우리는 그 고정 그것은 우리가 우리의 코드를 단순화 할 수 있었다 오류를 반환하지되자 :
try{
final ProcessBuilder pb;
pb = new ProcessBuilder(args);
final Process p = pb.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}catch (Exception e){
e.printStackTrace();
}
내가이 일을 시도했지만이 p.waitFor에 달려(); 내가 주석을 달고 디버거를 기다리거나 잠시 멈추고 계속 작동하면 계속됩니다. 하지만 waitFor()를 사용하면 프로세스가 끝나지 않아 계속 진행되지 않습니다. – user2533615
'pb.redirectInput (Redirect.from (new File ("NUL"))' – fge
Ok '가 성공했습니다! 입력을 어딘가에 보내야하는 것 같습니다. Linux와 OSX에서이 크로스 플랫폼을 사용하는 데 관심이 있습니까? ? 그것을 만드는 방법에 대한 아이디어는 임시 파일에 쓸 필요는 없지만 모두 메모리에서 끝낼 수는 있겠습니까? – user2533615