在Windows服务中运行powershell脚本

时间:2014-11-12 15:20:57

标签: powershell windows-services

我有一个运行良好的PowerShell脚本, 我在power shelle命令行中调用此脚本:

PS C:> .\myscript.ps1 -var1 variable1 -var2 variable2 

我需要在一个带有愚蠢sc创建的服务中安装它,但我找不到启动它的方法

有什么帮助吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

使用Windows service wrapper。它具有高度可配置性,并提供了许多有用的选项,如日志轮换,服务帐户,失败操作等。它甚至可以自动从URL下载资源并将其作为文件本地放置,因此您可以在某处托管脚本并自动更新。以下是启动和运行PowerShell服务的基本步骤:

  1. 下载\ build winsw。可以找到版本1.x二进制文件here。构建最新的winsw 2.x使用Visual Studio Community 2013(免费用于开源项目)。更详细的构建说明是here
  2. 为您的服务创建XML配置文件。例如:

    <service>
        <id>MyPsSvc</id>
        <name>My PowerShell Service</name>
        <description>Does funny stuff with your PC</description>
        <executable>PowerShell.exe</executable>
        <logmode>reset</logmode>
        <arguments>-ExecutionPolicy Bypass -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -File "myscript.ps1" -var1 variable1 -var2 variable2</arguments>
    </service>
    

    配置文件必须与winsw可执行文件具有相同的基本名称,即:

    • winsw.exe
    • winsw.xml
  3. 如果您计划在没有互联网连接的PC上使用您的服务,disable digital signature verification for winsw。为此,请创建文件winsw.exe.config。例如:

    <configuration>
      <runtime>
        <generatePublisherEvidence enabled="false"/> 
      </runtime>
    </configuration>
    
  4. 如果您正在运行Windows Server 2012或Windows 8,并且不想在上述配置文件中安装.Net 2.0支持specify .NET 4.0 runtime support

    <configuration>
        <runtime>
            <generatePublisherEvidence enabled="false"/> 
        </runtime>
        <startup>
            <supportedRuntime version="v2.0.50727" />
            <supportedRuntime version="v4.0" />
        </startup>
    </configuration>
    
  5. 安装您的服务,从命令行运行winsw.exe install。安装服务后,您可以从Windows服务管理器启动它。