Java与WMI的互操作

时间:2017-10-19 17:22:56

标签: java powershell wmi

我有一个问题wmi4java lib: 它可以连接到远程Win机器并在那里运行WMI查询吗?搜索了文档,甚至查看了主类的源代码,发现没有任何内容指向与身份验证的远程连接。

github页面没有提供连接远程机器的示例: https://github.com/profesorfalken/WMI4Java

和类WMI4Java的javadoc仅提到localhost:

https://jar-download.com/java-documentation-javadoc.php?a=WMI4Java&g=com.profesorfalken&v=1.6

e.g: 。WMI4Java.get()计算机名("&#34)的命名空间。("根/ CIMV2&#34)getWMIObject(" Win32_BaseBoard&#34);

如果我指定另一个主机(又名computerName(" 10.10.172.214")...),它会显然抛出异常,因为它没有找到凭据。

我知道这个lib在内部使用jPowerShell所以必须有办法。 谢谢。

1 个答案:

答案 0 :(得分:0)

通过getRawWMIObjectOutput调用找到它的方法。这不是理想的,因为它看起来不优雅,你得到输出为字符串而不是整洁的属性映射。但无论如何它是:

_log.info("\n-- Get raw output in String format on remote host (Win32_Process) --\n");
wmiObjectPropsRaw = WMI4Java.get()
    .computerName("10.10.172.214")
    .namespace("root/cimv2")
    .filters(Arrays.asList("$_.Name -eq \"lsass.exe\""))
    .getRawWMIObjectOutput(
       "Win32_Process" 
        + " -Impersonation 3" 
        +  " -Credential (new-object -typename System.Management.Automation.PSCredential"
            + " -argumentlist Administrator, " 
            + " (ConvertTo-SecureString Sysdreamworks123 -AsPlainText -Force))");
_log.info(wmiObjectPropsRaw + "\n");