我正在尝试使用 Java 库 winrm4j 从 Ubuntu 机器在远程 Windows 机器上运行 PowerShell 命令或脚本。
这是我的代码:
WinRmToolResponse resp = null;
try {
WinRmClientContext context = WinRmClientContext.newInstance();
WinRmTool tool = WinRmTool.Builder.builder("<window-hostname>", user, pass)
.authenticationScheme(AuthSchemes.NTLM)
.disableCertificateChecks(true)
.port(5985)
.useHttps(false)
.context(context)
.build();
resp = tool.executePs("Get-Date");
System.out.println(resp.getStatusCode());
System.out.println(resp.getStdOut());
System.out.println(resp.getStdErr());
context.shutdown();
}
catch (Exception e) {
System.out.println("Error in running powershell script");
e.printStackTrace();
}
当从本地 Windows 机器或 Eclipse 运行时,上面的代码运行成功,但是当从放在 Ubuntu 机器上的 JAR 运行这段代码时,我不断收到错误:
0 [main] INFO org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean - Creating Service {http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd}WinRmService from WSDL: jar:file:/home/ubuntu/demo2-0.0.1-SNAPSHOT.jar!/wsdl/WinRmService.wsdl
6 [main] WARN io.cloudsoft.winrm4j.client.WinRmClient - Error creating WinRm service with mbean strategy (trying other strategies): java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:85)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:393)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:527)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:262)
at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:159)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:95)
at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateServiceWithBean(WinRmFactory.java:140)
at io.cloudsoft.winrm4j.client.WinRmFactory.createService(WinRmFactory.java:44)
at io.cloudsoft.winrm4j.client.WinRmFactory.newInstance(WinRmFactory.java:32)
at io.cloudsoft.winrm4j.client.WinRmClient.getService(WinRmClient.java:244)
at io.cloudsoft.winrm4j.client.WinRmClient.<init>(WinRmClient.java:220)
at io.cloudsoft.winrm4j.client.WinRmClientBuilder.build(WinRmClientBuilder.java:285)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:396)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:422)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:413)
at PowershellTester.main(PowershellTester.java:58)
18 [main] WARN io.cloudsoft.winrm4j.client.WinRmClient - Error creating WinRm service with reflective delegate (trying other strategies): java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:85)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:217)
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:160)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:128)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.<init>(Service.java:77)
at io.cloudsoft.winrm4j.client.WinRmService.<init>(WinRmService.java:44)
at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateService_1_CreateMinimalServiceInstance(WinRmFactory.java:144)
at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateServiceWithReflectivelySetDelegate(WinRmFactory.java:86)
at io.cloudsoft.winrm4j.client.WinRmFactory.createService(WinRmFactory.java:61)
at io.cloudsoft.winrm4j.client.WinRmFactory.newInstance(WinRmFactory.java:32)
at io.cloudsoft.winrm4j.client.WinRmClient.getService(WinRmClient.java:244)
at io.cloudsoft.winrm4j.client.WinRmClient.<init>(WinRmClient.java:220)
at io.cloudsoft.winrm4j.client.WinRmClientBuilder.build(WinRmClientBuilder.java:285)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:396)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:422)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:413)
at PowershellTester.main(PowershellTester.java:58)
21 [main] WARN io.cloudsoft.winrm4j.client.WinRmClient - Error creating WinRm service with many strategies (giving up): java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:85)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:217)
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:160)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:128)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.<init>(Service.java:77)
at io.cloudsoft.winrm4j.client.WinRmService.<init>(WinRmService.java:44)
at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateService_1_CreateMinimalServiceInstance(WinRmFactory.java:144)
at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateServiceNormal(WinRmFactory.java:79)
at io.cloudsoft.winrm4j.client.WinRmFactory.createService(WinRmFactory.java:68)
at io.cloudsoft.winrm4j.client.WinRmFactory.newInstance(WinRmFactory.java:32)
at io.cloudsoft.winrm4j.client.WinRmClient.getService(WinRmClient.java:244)
at io.cloudsoft.winrm4j.client.WinRmClient.<init>(WinRmClient.java:220)
at io.cloudsoft.winrm4j.client.WinRmClientBuilder.build(WinRmClientBuilder.java:285)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:396)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:422)
at io.cloudsoft.winrm4j.winrm.WinRmTool.executePs(WinRmTool.java:413)
at PowershellTester.main(PowershellTester.java:58)
我在 build.gradle 中使用的 Gradle 依赖是:
implementation group: 'io.cloudsoft.windows', name: 'winrm4j', version: '0.12.3'