【问题标题】:Java and Hyper-VJava 和 Hyper-V
【发布时间】:2011-05-17 07:58:24
【问题描述】:

我正在尝试学习一些关于 JAVA 的知识,而做到这一点的最佳方法是创建一些我会实际使用并知道它的目的是什么的东西。 我正在尝试与 HyperV(WMI 库)通信。

例如我发现了以下内容,我的问题是:如何使用它?我正在使用 Netbeans 创建 GUI。

http://www.paulneve.com/wlab/javadoc/org/paulneve/wlab/virtualisation/VirtualisationAccessHyperVImpl.html

另外,如何将 jInterop 加载到我的项目中以便我可以使用它?

谢谢。

【问题讨论】:

    标签: java user-interface netbeans wmi hyper-v


    【解决方案1】:

    您可以使用 JInterop 来管理 HyperV 的所有操作。
    here下载 JInterop。
    将所有 JInterop jar 文件添加到您的项目构建路径。
    以下是获取 Hyper 服务器所有虚拟机的示例:

    public class ManageHyperV {
        static final int RETURN_IMMEDIATE = 0x10;
        static final int FORWARD_ONLY = 0x20;     
        private static final int STOP = 0;
        private static final int START = 1;
        static IJIDispatch msvmServices = null;
    
    
        private static IJIDispatch createCOMServer(String namespace) { //root//virtualization
            JIComServer comServer;
            try {           
                JISystem.getLogger().setLevel(Level.WARNING);
                JISystem.setAutoRegisteration(true);
    
                JISession session = JISession.createSession(domainName,userName,password);
                session.useSessionSecurity(false);
                comServer = new JIComServer(valueOf("WbemScripting.SWbemLocator"),hostIP,session);
    
                IJIDispatch wbemLocator = (IJIDispatch) narrowObject(comServer.createInstance().queryInterface(IID));
                //parameters to connect to WbemScripting.SWbemLocator
                Object[] params = new Object[] {
                        new JIString(hostIP),//strServer
                        new JIString(namespace),//strNamespace
                        //                  new JIString("ROOT\\CIMV2"),
                        JIVariant.OPTIONAL_PARAM(),//strUser 
                        JIVariant.OPTIONAL_PARAM(),//strPassword 
                        JIVariant.OPTIONAL_PARAM(),//strLocale 
                        JIVariant.OPTIONAL_PARAM(),//strAuthority
                        new Integer(0),//iSecurityFlags 
                        JIVariant.OPTIONAL_PARAM()//objwbemNamedValueSet
                };
                JIVariant results[] = wbemLocator.callMethodA("ConnectServer", params);
                IJIDispatch wbemServices = (IJIDispatch) narrowObject(results[0].getObjectAsComObject());
                return wbemServices;
            } catch (JIException jie) {
                System.out.println(jie.getMessage());
                jie.printStackTrace();
            } catch (JIRuntimeException jire) {
                jire.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        private static void getVMList() throws JIException {
    
                String temp = "select * from Msvm_ComputerSystem";          
                String[] arrQuery = new String[]{temp};
    
                for (int k=0;k<arrQuery.length;k++) {
    
                    Object[] params = new Object[] {
                            new JIString(arrQuery[k]),
                            JIVariant.OPTIONAL_PARAM(),
                            new JIVariant(new Integer(RETURN_IMMEDIATE + FORWARD_ONLY))
                    };
    
                    JIVariant[] servicesSet = msvmServices.callMethodA("ExecQuery", params);
                    iterateEnum(servicesSet);
    
                }       
        }
    
        private  static void iterateEnum(JIVariant[] servicesSet) {
            try {
                IJIDispatch wbemObjectSet = (IJIDispatch) narrowObject(servicesSet[0].getObjectAsComObject());
                JIVariant newEnumvariant = wbemObjectSet.get("_NewEnum");
                IJIComObject enumComObject = newEnumvariant.getObjectAsComObject();
                IJIEnumVariant enumVariant = (IJIEnumVariant) narrowObject(enumComObject.queryInterface(IJIEnumVariant.IID));
                List<Object[]> respArr = getEnumIterations(enumVariant);
    
                for (Object[] elements : respArr) {
                    JIArray aJIArray = (JIArray) elements[0];
                    JIVariant[] array = (JIVariant[]) aJIArray.getArrayInstance();
    
                    for (JIVariant variant : array) {
                        IJIDispatch wbemObjectDispatch = (IJIDispatch) narrowObject(variant.getObjectAsComObject());
    
                        JIVariant[] v = wbemObjectDispatch.callMethodA("GetObjectText_", new Object[] {});
                        System.out.println("----------------------------------------------------------------------");
                        System.out.println(v[0].getObjectAsString().getString());
                        System.out.println("----------------------------------------------------------------------");
                    }
                }
            } catch (JIRuntimeException e) {
                e.printStackTrace();
            } catch (JIException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {    
            msvmServices = createCOMServer("root\\virtualization");
            getVMList();
        }
    
    }
    
    private static List<Object[]> getEnumIterations(IJIEnumVariant enumVariant) {
        List<Object[]> list = new ArrayList<Object[]>(); 
        int i=0;
    
        for (i=0;i<100;i++) {
            try {
                list.add(enumVariant.next(1));
            }catch (JIRuntimeException jre) {
                break;
            }
            catch (JIException jie) {
                break;              
            }
            catch (Exception e) {
                break;
            }
        }
        return list;
    }
    

    另外,请提供管理员用户名和密码。
    它应该可以工作。
    谢谢。

    【讨论】:

    • 你能给我举个例子来说明如何恢复快照吗?
    • 我认为你应该试试这个例子。如果它对你有用?那就继续吧。
    • IJIDispatch getInterfaceIdentifier() 会返回网络接口的 MAC 吗?谢谢!
    • 请详细说明您的问题.. IJIDispatch 属于哪个类?
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多