Exécution d'une commande PowerShell avec Java
import java.util.Map;
import java.util.HashMap;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class PowerShell {
public Map<String, String> execute(String command) throws IOException {
Map<String, String> std = new HashMap<String, String>();
/*
* La commande on ajoute powershell.exe devant pour exécuter dans PowerShell
*/
command = "powershell.exe " + command;
/* Exécution */
Process powerShellProcess = Runtime.getRuntime().exec(command);
powerShellProcess.getOutputStream().close();
/* Lecture de la sortie en cp850 */
String outputLine = "";
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream(), "Cp850"));
String nextLine;
while ((nextLine = stdout.readLine()) != null) {
outputLine += nextLine + "\n";
}
/* On enlève les caractères en trop notamment le saut de ligne */
outputLine = outputLine.trim();
stdout.close();
/* Lecture des erreurs en cp850 */
String outputErrorLine = "";
BufferedReader stderr = new BufferedReader(new InputStreamReader(powerShellProcess.getErrorStream(), "Cp850"));
String nextErrorLine;
while ((nextErrorLine = stderr.readLine()) != null) {
outputErrorLine += nextErrorLine + "\n";
}
/* On enlève les caractères en trop notamment le saut de ligne */
outputErrorLine = outputErrorLine.trim();
stderr.close();
/* On stocke la sortie et les erreurs dans une map */
std.put("output", outputLine);
std.put("error", outputErrorLine);
return std;
}
}
Pour trouver l'encodage de la console, vous pouvez exécuter la commande cmd /c chcp
le tableau d'encodage de Windows et le tableau d'encodage de Java.
import java.io.IOException;
import java.util.Map;
public class PowerShellCommand {
public static void main(String[] args) throws IOException {
PowerShell ps = new PowerShell();
Map<String, String> std = ps.execute("$PSVersionTable.PSVersion");
System.out.println("Sortie : \n\n" + std.get("output"));
System.out.println("\nErreurs : \n\n" + std.get("error"));
}
}
Hello petite erreur dans ton code , ici ->
RépondreSupprimerwhile (stderr.readLine() != null) {
outputErrorLine += stderr.readLine() + "\n";
}
tu fait appel à stderr /stdout .readline et donc tu va passer à la suivante sans enregistrer son contenue dans ta variable outputLine /outputErrorLine.
solution :
String temp= "";
while (temp!= null){
temp = stdout.readLine()
outputLine += temp ;
}
Bonjour,
RépondreSupprimerMerci !! C'est corrigé ! 👍