从 Linux box 在远程 Windows 机器上运行 PowerShell 脚本

问题描述 投票:0回答:0

我正在尝试使用 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'
java windows-server-2012-r2 powershell-remoting winrm
© www.soinside.com 2019 - 2024. All rights reserved.