5

我正在尝试使用 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"
    }
}

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

安装 test... & : 术语 '"c:\A Test\Test.exe" install --sudo' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 C:\Users\luke.mcgregor\Documents\Test.ps1:11 char:11 + & " "$servicepath" install --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
    }
}
4

2 回答 2

6

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

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

应该是 3 个令牌 -

& $servicepath install --sudo

与号是 PowerShell 调用运算符。它之后的任何内容都与您在 CMD.exe 窗口中键入它一样。如果单个标记中有空格,则需要引用它。

在此处查看有关呼叫运营商的更多信息。

于 2013-04-22T22:03:53.627 回答
1

如果您不喜欢 (weird/crazy/take-your-pick) 语法,请在参数名称和值之间添加一个冒号。

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

PS C:\Services\ItJustWorks> .\ItJustWorks.exe install -servicename:"ItJustWorks"
于 2016-10-17T05:34:43.300 回答