import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
public class PowerShellUtil {
public static void main(String[] args) {
System.out.println(remoteSh("ls /home", "192.168.2.2", "22", "root"));
System.out.println(remoteShNoRes("ll /home", "192.168.2.2", "22", "root"));
System.out.println(remoteShNoRes("ls /home", "192.168.2.2", "22", "root"));
System.out.println(runNoRes("pwd"));
System.out.println(runNoRes("ls"));
}
// 远程shell返回执行结果(有些无法执行)
public static String remoteSh(String cmd, String ip, String port, String username) {
return run("ssh -p " + port + " " + username + "@" + ip + " \"" + cmd + "\"");
}
// 远程shell返回是否执行成功(有些无法执行)
public static Boolean remoteShNoRes(String cmd, String ip, String port, String username) {
return runNoRes("ssh -p " + port + " " + username + "@" + ip + " \"" + cmd + " > /dev/null 2>&1\"");
}
// 执行list命令
public static String run(List<String> cmds) {
StringBuffer sb = new StringBuffer();
for (String cmd : cmds) {
sb.append(cmd).append("\n");
}
return run(sb.toString());
}
// 返回执行结果
// 多行命令 \n 分隔
public static String run(String cmd) {
StringBuffer sb = new StringBuffer();
try {
// 构建PowerShell命令
String command = "powershell.exe " + cmd;
// 创建ProcessBuilder对象
ProcessBuilder processBuilder = new ProcessBuilder("powershell.exe", "-Command", command);
// 启动PowerShell进程
Process process = processBuilder.start();
// 获取PowerShell输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// 读取输出
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
// 等待PowerShell进程结束
process.waitFor();
// 关闭流
reader.close();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
System.out.println(DateUtil.now() + "|执行powershell完成,cmd:[" + cmd + "],result:[" + sb + "]");
return sb.toString();
}
// 忽略输出返回是否执行成功
public static Boolean runNoRes(String cmd) {
Boolean res = Boolean.FALSE;
try {
System.out.println(DateUtil.now() + "|执行powershell完成,cmd:[" + cmd + "]");
// 构建PowerShell命令
String command = "powershell.exe " + cmd;
// 创建ProcessBuilder对象
ProcessBuilder processBuilder = new ProcessBuilder("powershell.exe", "-Command", command);
processBuilder.redirectOutput(ProcessBuilder.Redirect.PIPE);
processBuilder.redirectError(ProcessBuilder.Redirect.PIPE);
// 启动PowerShell进程
Process process = processBuilder.start();
// 等待PowerShell进程结束
int i = process.waitFor();
if (i == 0) {
res = Boolean.TRUE;
}
return res;
} catch (IOException | InterruptedException e) {
e.printStackTrace();
return res;
}
}
}
PowerShell(2) : java执行powershell
于 2023-09-20 14:45:41 首次发布