如何从Java程序内部运行PowerShell脚本作为Windows服务?

时间:2017-03-21 12:28:25

标签: java powershell wmi wmi-service j-interop

我有以下代码从Java内部运行Windows服务。代码使用JInterop Java库,JInterop是Windows COM服务器的纯Java COM客户端。有关JIntop的更多详细信息,请参见[http://fishi.devtail.io/weblog/2015/01/21/pure-java-dcom-bridge-j-interop/]

    String cmdFile = "service.bat";
results = wbemServices_dispatch.callMethodA(
                "Get", new Object[]{ new JIString("Win32_Process"),
                new Integer(0), JIVariant.OPTIONAL_PARAM()});

        IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)JIObjectFactory.narrowObject(
                (results[0]).getObjectAsComObject());
results = wbemObjectSet_dispatch.callMethodA("Create",
                new Object[]{ new JIString(targetFilePrefix + cmdFile),
                JIVariant.OPTIONAL_PARAM(),
                JIVariant.OPTIONAL_PARAM()});

是否可以使用相同的库或其他方式以与上述相同的方式将powershell文件(.ps1)作为服务运行。

2 个答案:

答案 0 :(得分:2)

您可以创建一个批处理文件,然后可以触发PowerShell脚本,如下所示:

@echo off
Powershell.exe set-executionpolicy remotesigned -File  C:\folder\MyScript.ps1
pause

将其另存为 " Trigger_ps.bat"

然后你可以使用 sc命令来创建一个Windows服务,方法是提到这个批处理文件路径:

SC CREATE PS_Trigger_Service Displayname= "PS_Trigger_Service" binpath= "C:\folder\Trigger_ps.bat" start= auto

这应该可以解决你的目的。

答案 1 :(得分:1)

您可以使用 SC 新服务创建Windows服务,然后可以运行 ps1 这样的文件:

sc.exe create "PS1Service" binPath= "powershell.exe -NoLogo -Path D:\Script.ps1"

Creating User Defined Service

的参考链接

参考链接Usage of New-Service

您可以从 JAVA 中调用它,而应该可以解决您的目的。

如果您有Visual Studio,那么您可以直接执行Run PS Code as Windows Service

希望它有所帮助。