使用powershell安装上架服务
我试图使用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
}
}
你需要用一个空间界定来标记的工作示例。所以 -
& "`"$servicepath`" install --sudo"
应该是3个令牌 -
& $servicepath install --sudo
和符号是PowerShell的电话运营商。它的工作原理与在CMD.exe窗口中输入相同。如果一个令牌里有一个空格,你需要引用它。
查看更多关于通话运营商here的信息。
如果你不喜欢(奇怪/疯狂/采取你挑)语法,在参数名称和值之间添加冒号。
因此,假如你有在C:\Services\ItJustWorks\ItJustWorks.exe
topshelf内置的EXE,然后你可以运行PowerShell的从以下:
PS C:\Services\ItJustWorks> .\ItJustWorks.exe install -servicename:"ItJustWorks"
感谢完美地工作,但我不太知道为什么。我认为这只是通过在呼叫操作员处堵塞包含命令的字符串而起作用。这似乎并非如此?调用操作符是否接受一系列参数并首先推断为命令路径,然后推导出具体参数?为什么这不同于传递一个字符串? – 2013-04-22 22:37:27
@Luke,调用操作符语法是'&“[path] \ program.exe”[arguments]',其中参数可以是空格分隔的字符串或字符串数组。并感谢推送:D – 2013-04-22 23:16:17