目录
前言
java调用powershell的简单使用。
一、基本准备
- 开发语言:Java
- 操作系统:Windows10(建议Win7版本以上,如果在Win7上使用,需要更新powershell的版本)
- JDK:8
- 项目构建:Maven工程
- 依赖:Jpowershell
二、编码
1. 创建普通的Maven工程
2. Maven配置阿里云镜像仓库
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
3. maven仓库搜索JPowershell依赖
我就选最新的版本了
引入依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.profesorfalken/jPowerShell -->
<dependency>
<groupId>com.profesorfalken</groupId>
<artifactId>jPowerShell</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
4. 测试
4.1 执行单条powershell命令
需求:获取所有进程信息,并显示前5条
结果
public static void execSingleCmd(){
// 开始时间
long stime = System.currentTimeMillis();
//1.要执行的命令
String cmd = "Get-Process | Select-Object -First 5";
//2.调用 executeSingleCommand 静态方法执行单条命令
PowerShellResponse powerShellResponse = PowerShell.executeSingleCommand(cmd);
// 3.获取结果输出
System.out.println(powerShellResponse.getCommandOutput());
// 结束时间
long etime = System.currentTimeMillis();
System.err.println("程序执行了 "+((etime-stime)/1000)+" s");
}
4.2 执行多条powershell命令
多条powershell命令演示
结果
/**
*
* 多条powershell命令演示
* 1. 进入 D:\
* 2. 创建一个文件夹 mkdir ps_test
* 3.将 powershell版本信息输入到 a.txt文件中
*
*/
public static void execMulCmd(){
// 开始时间
long stime = System.currentTimeMillis();
//1.打开一个powershell会话
PowerShell ps = PowerShell.openSession();
ps.executeCommand("cd \\");
//2.进入 D:\
ps.executeCommand("D:");
//3.创建一个文件夹
ps.executeCommand("mkdir ps_test");
ps.executeCommand("cd ps_test");
//4.将 host 信息写入 a.txt
ps.executeCommand(" host > a.txt");
//5.关闭powershell
ps.close();
System.out.println("ps command exec success!");
// 结束时间
long etime = System.currentTimeMillis();
System.err.println("程序执行了 "+((etime-stime)/1000)+" s");
}
看的出来,以上仅显示和输出内容到文件的操作,程序执行的时间 “非常可观”。估计再写几行代码,就可以让他执行一天了(轻松摸鱼)。性能问题布吉岛如何解决,只能先这样了。或者有大佬给个解决方案,在下洗耳恭听。
三、完整代码
package com.jp.test;
import com.profesorfalken.jpowershell.PowerShell;
import com.profesorfalken.jpowershell.PowerShellResponse;
public class PowerShellTest {
public static void main(String[] args){
// execSingleCmd();
execMulCmd();
}
/**
* 执行单条powershell命令,获取所有进程信息,且只显示前5条数据
*
*/
public static void execSingleCmd(){
// 开始时间
long stime = System.currentTimeMillis();
//1.要执行的命令
String cmd = "Get-Process | Select-Object -First 5";
//2.调用 executeSingleCommand 静态方法执行单条命令
PowerShellResponse powerShellResponse = PowerShell.executeSingleCommand(cmd);
// 3.获取结果输出
System.out.println(powerShellResponse.getCommandOutput());
// 结束时间
long etime = System.currentTimeMillis();
System.err.println("程序执行了 "+((etime-stime)/1000)+" s");
}
/**
*
* 多条powershell命令演示
* 1. 进入 D:\
* 2. 创建一个文件夹 mkdir ps_test
* 3.将 powershell版本信息输入到 a.txt文件中
*
*/
public static void execMulCmd(){
// 开始时间
long stime = System.currentTimeMillis();
//1.打开一个powershell会话
PowerShell ps = PowerShell.openSession();
ps.executeCommand("cd \\");
//2.进入 D:\
ps.executeCommand("D:");
//3.创建一个文件夹
ps.executeCommand("mkdir ps_test");
ps.executeCommand("cd ps_test");
//4.将 host 信息写入 a.txt
ps.executeCommand(" host > a.txt");
//5.关闭powershell
ps.close();
System.out.println("ps command exec success!");
// 结束时间
long etime = System.currentTimeMillis();
System.err.println("程序执行了 "+((etime-stime)/1000)+" s");
}
}
结语
以上就是Java程序调用Windows Powershell 的实现,如果你也有这个需求,那么希望能帮到你。