我有以下代码从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)作为服务运行。
答案 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"
的参考链接
您可以从 JAVA 中调用它,而应该可以解决您的目的。
如果您有Visual Studio,那么您可以直接执行Run PS Code as Windows Service
希望它有所帮助。