我尝试使用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
}
}
答案 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"