2013-04-22 72 views
5

我试图使用powershell安装上架服务,但我真的很努力让PowerShell运行安装程序。使用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.exe” 安装--sudo' 是不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径 ,请验证路径是否正确,然后重试。在 C:\ Users \ luke.mcgregor \ Documents \ Test.ps1:11 char:11 + &“"$servicepath”install --sudo“ + ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(“c:\ Test \ Test.exe”)+ 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 
    } 
} 

回答

5

你需要用一个空间界定来标记的工作示例。所以 -

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

应该是3个令牌 -

& $servicepath install --sudo 

和符号是PowerShell的电话运营商。它的工作原理与在CMD.exe窗口中输入相同。如果一个令牌里有一个空格,你需要引用它。

查看更多关于通话运营商here的信息。

+0

感谢完美地工作,但我不太知道为什么。我认为这只是通过在呼叫操作员处堵塞包含命令的字符串而起作用。这似乎并非如此?调用操作符是否接受一系列参数并首先推断为命令路径,然后推导出具体参数?为什么这不同于传递一个字符串? – 2013-04-22 22:37:27

+0

@Luke,调用操作符语法是'&“[path] \ program.exe”[arguments]',其中参数可以是空格分隔的字符串或字符串数​​组。并感谢推送:D – 2013-04-22 23:16:17

0

如果你不喜欢(奇怪/疯狂/采取你挑)语法,在参数名称和值之间添加冒号。

因此,假如你有在C:\Services\ItJustWorks\ItJustWorks.exe topshelf内置的EXE,然后你可以运行PowerShell的从以下:

PS C:\Services\ItJustWorks> .\ItJustWorks.exe install -servicename:"ItJustWorks" 
相关问题