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"));

    }

}

Commentaires

  1. Hello petite erreur dans ton code , ici ->
    while (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 ;
    }

    RépondreSupprimer

Enregistrer un commentaire