wmi协议支持远程执行cmd命令,并返回获取命令相关信息

package windows;


import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.UnknownHostException;
import java.util.Iterator;


import jcifs.UniAddress;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbSession;
import cn.chenlichao.wmi4j.SWbemLocator;
import cn.chenlichao.wmi4j.SWbemObject;
import cn.chenlichao.wmi4j.SWbemObjectSet;
import cn.chenlichao.wmi4j.SWbemServices;
import cn.chenlichao.wmi4j.WMIVariant;


public class WmiProcess {
private SWbemLocator locator;


private SWbemServices wbemServices;


private static final String service_name = "10.128.9.27";
private static final String user_name = "administrator";
private static final String password = "password";


public WmiProcess() throws UnknownHostException, Exception {
locator = new SWbemLocator(service_name, user_name, password, "root\\cimv2");//


wbemServices = locator.connectServer();
}


void startNotepad() throws Exception {


SWbemObjectSet process = wbemServices.get("Win32_Process").instances();
Iterator<SWbemObject> iterator = process.iterator();
while (iterator.hasNext()) {
SWbemObject obj = iterator.next();
WMIVariant caption = obj.getPropertyByName("Caption");
if (caption.getStringValue().equals("mysqld.exe")) {
System.out.println("ReturnValue: " + obj.getObjectText());
}


}


}


public static void main(String[] args) throws Exception {


WmiProcess manager = new WmiProcess();


long start = System.currentTimeMillis();
String path = "c:\\aa";
String name = "aa";
String fileName = "aa.txt";
int create = manager.execCommand("md " + path);// 新建文件夹
if (create == 0) {
int share = manager.createShareFoder(path, name);// 共享文件夹
Thread.sleep(1200);// 防止共享没完成
System.out.println("--------------" + share);
if (share == 0 || share == 22) {


// int write = manager.execCommand("netstat -ano >" + path +
// File.separator + fileName);// 执行命令写文件
// char[] dd={'"'};
// String comm = new String(dd);
String comm ="\"";
int write = manager.execCommand("db2cmd -c "+comm+"db2 list database directory >" + path + File.separator + fileName+comm);// 执行命令写文件
System.out.println("write------" + write);
Thread.sleep(1200);// 防止文件没有写完
if (write == 0) {
boolean read = true;


manager.getFile();


if (read) {
// int del = manager.execCommand("rd/s/q " + path);//
// 强制删除文件文件夹和文件夹内所有文
boolean del = manager.deleteShare(name);
manager.execCommand("rd/s/q " + path);//
// 强制删除文件文件夹和文件夹内所有文
if (!del) {
System.out.println("删除文件夹及文件失败" + path);
}
} else {
System.out.println("读取文件失败" + path);
}
} else {
System.out.println("写文件失败" + path);
}


} else {
System.out.println("共享文件夹失败" + path);
}
} else {
System.out.println("新建文件夹失败" + path);
}
System.out.println("整体耗时:" + (System.currentTimeMillis() - start) / 1000 + "s");
}


private int createShareFoder(String path, String name) throws Exception {


SWbemObject shareClass = wbemServices.get("Win32_Share");
SWbemObject inParams = shareClass.getInParametersByMethodName("Create");
inParams.setPropertyByName("Path", new WMIVariant(path));
inParams.setPropertyByName("Name", new WMIVariant(name));
inParams.setPropertyByName("Type", new WMIVariant("0"));// Disk Drive
SWbemObject result = shareClass.execMethod("Create", inParams);


// System.out.print("result=" + result.getObjectText());
int flag = result.getPropertyByName("ReturnValue").getIntValue();


return flag;
}


private int execCommand(String command) throws Exception {
// 获取Win32_Process类
SWbemObject processClass = wbemServices.get("Win32_Process");


// 实例化Create方法需要的ProcessStartupInformation参数,并设定相关属性
SWbemObject processStartup = wbemServices.get("Win32_ProcessStartup").spawnInstance();
processStartup.setPropertyByName("ShowWindow", new WMIVariant(1));


// 获取Create方法的参数定义,并设定相关参数值
SWbemObject inParams = processClass.getInParametersByMethodName("Create");


inParams.setPropertyByName("CommandLine", new WMIVariant("cmd.exe /c " + command));
inParams.setPropertyByName("ProcessStartupInformation", new WMIVariant(processStartup));
System.out.print("inParams=" + inParams.getObjectText());
// 执行Create方法
SWbemObject result = processClass.execMethod("Create", inParams);


// System.out.print("result=" + result.getObjectText());
// 验证执行结果
int flag = result.getPropertyByName("ReturnValue").getIntValue();


return flag;
}


private int execCommandDb2(String commandDb2) throws Exception {
// 获取Win32_Process类
SWbemObject processClass = wbemServices.get("Win32_Process");


// 实例化Create方法需要的ProcessStartupInformation参数,并设定相关属性
SWbemObject processStartup = wbemServices.get("Win32_ProcessStartup").spawnInstance();
processStartup.setPropertyByName("ShowWindow", new WMIVariant(1));


// 获取Create方法的参数定义,并设定相关参数值
SWbemObject inParams = processClass.getInParametersByMethodName("Create");


inParams.setPropertyByName("CommandLine", new WMIVariant("db2cmd.exe /c " + commandDb2));
inParams.setPropertyByName("ProcessStartupInformation", new WMIVariant(processStartup));
System.out.print("inParams=" + inParams.getObjectText());
// 执行Create方法
SWbemObject result = processClass.execMethod("Create", inParams);


// System.out.print("result=" + result.getObjectText());
// 验证执行结果
int flag = result.getPropertyByName("ReturnValue").getIntValue();


return flag;
}


public void getFile() throws Exception {
System.out.println("-----------共享文件夹---------------");
long start = System.currentTimeMillis();
// int BUFFER_SIZE = 1024;
BufferedReader reader = null;
// SmbFile file = new
// SmbFile("smb://finchina;daieel:123456@192.168.100.246/Soft/sc8
// key.txt");
// SmbFile file = new
// SmbFile("smb://10.15.97.181/xx部资料库/工作文档/查询逻辑.txt");d
// http://samba.2283325.n4.nabble.com/Peformance-questions-td4644647.html
System.setProperty("jcifs.smb.client.dfs.disabled", "true");


UniAddress dc = UniAddress.getByName(service_name);
NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", user_name, password);
SmbSession.logon(dc, authentication);
SmbFile file = new SmbFile("smb://"+service_name+"/aa/aa.txt", authentication);


reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(file)));

// 循环对文件进行读取
String line;
try {


// resultLines = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
            //GBK、UTf-8、iso8859-1、GB2312
String aa=new String(line.getBytes("UTf-8"), "GBK");
System.out.println(aa);
System.out.println("line=" + new String(aa.getBytes("UTf-8"),"UTf-8"));
// resultLines.add(line);
}


} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (Exception e) {
}
}
// System.out.println(content);
System.out.println("读文件耗时:" + (System.currentTimeMillis() - start) / 1000 + "s");
}


private boolean deleteShare(String name) throws Exception {
boolean flag = false;
// SWbemObjectSet set = wbemServices.execQuery("Select * from
// Win32_Share Where Name = '" + name + "'");
// Iterator<SWbemObject> iterator = set.iterator();
// while (iterator.hasNext()) {
// SWbemObject obj = iterator.next();
// obj.delete();
// }
flag = true;
return flag;
}

}



需要jar,maven依赖地址


<dependency>
<groupId>org.kohsuke.jinterop</groupId>
<artifactId>j-interop</artifactId>
<version>2.0.8-kohsuke-1</version>
</dependency>


<dependency>
<groupId>cn.chenlichao</groupId>
<artifactId>wmi4j</artifactId>
<version>0.9</version>
</dependency>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值