使用PowerShell安装topshelf服务

时间:2013-04-22 20:36:20

标签: powershell

我尝试使用powershell安装topshelf服务,但我真的很难让PowerShell运行安装程序。

Function EnsureTopshelfService([string]$serviceName, [string]$servicePath){
    $service = get-service $serviceName -ErrorAction SilentlyContinue 
    if ($service –ne $null){
        "$serviceName is already installed on this server";
    }
    else{
        Write-Host "Installing $serviceName...";

        #the problem is here
        & "`"$servicepath`" install --sudo"
    }
}

当我运行此命令时,我得到以下

  

安装测试...   &安培; :术语'“c:\ A Test \ Test.exe”install --sudo'无法识别为cmdlet,函数,脚本文件或   可操作程序。检查名称的拼写,或路径是否正确   包含,验证路径是否正确,然后重试。在   C:\ Users \ luke.mcgregor \ Documents \ Test.ps1:11 char:11   +& “"$servicepath”安装--sudo“   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ObjectNotFound:(“c:\ A Test \ Test.exe”install --sudo:String)[],CommandNotFoundException       + FullyQualifiedErrorId:CommandNotFoundException

在命令提示符下运行"c:\A Test\Test.exe" install --sudo工作正常,因此它是如何调用现有程序的问题。有谁知道我在哪里出错?我对powershell很新,所以我猜它很简单。

修改 以下是上述

的工作示例
Function EnsureTopshelfService([string]$serviceName, [string]$servicePath){
    $service = get-service $serviceName -ErrorAction SilentlyContinue 
    if ($service –ne $null){
        "$serviceName is already installed on this server";
    }
    else{
        Write-Host "Installing $serviceName...";

        & "$servicepath" install --sudo
    }
}

2 个答案:

答案 0 :(得分:6)

您需要通过使用空格分隔来进行标记。所以 -

& "`"$servicepath`" install --sudo"

应该是3个令牌 -

& $servicepath install --sudo

&符号是PowerShell调用操作符。它之后的任何操作都与您在CMD.exe窗口中键入的内容相同。如果单个令牌中有空格,则需要引用它。

查看有关呼叫运营商here的更多信息。

答案 1 :(得分:1)

如果你不喜欢(怪异/疯狂/采摘你的选择)语法,请在参数名称和值之间添加冒号。

假设您在C:\Services\ItJustWorks\ItJustWorks.exe处使用topshelf构建了EXE,那么您可以从powershell运行以下命令:

PS C:\Services\ItJustWorks> .\ItJustWorks.exe install -servicename:"ItJustWorks"