如果命令行中有引号,如何在Powershell中安装Windows服务?

时间:2012-08-01 15:45:29

标签: powershell windows-services

我有一个我需要安装的服务,它有一个看起来像这样的命令行:

d:\My Service\service.exe /AsService /Config="d:\Config Files\TheConfig.config"

这几乎是命令行最糟糕的情况。 我遇到的问题是args中的双引号

这就是我尝试过的 close 但不完全:

$cmd = "create ""$ServiceName"" binPath= $FullServicePath start= $StartMethod"
Invoke-Expression "cmd.exe /c sc.exe $cmd" | Write-Host

$FullServicePath的位置:

d:\My Service\service.exe /AsService /Config="d:\Config Files\TheConfig.config"

连连呢?我对任何事都持开放态度。 WMI。不管。

帮助!

3 个答案:

答案 0 :(得分:0)

尝试像这样声明$FullServicePath

$FullServicePath = "d:\My Service\service.exe /AsService /Config=`"d:\Config Files\TheConfig.config`""

这使用转义字符`来告诉它将引号作为文本处理。 (转义字符是大多数键盘上1键旁边的后退字符)

我相信您也可以使用以下语法:

$FullServicePath = $('d:\My Service\service.exe /AsService /Config="d:\Config Files\TheConfig.config"') 

两者都在我的系统上创建了没有问题的变量。

当您致电$FullServicePath时,请执行以下操作:$($FullServicePath)

答案 1 :(得分:0)

如果您100%确定需要引号,则必须使用\转义它们:

&'d:\My Service\service.exe' '/AsService' '/Config=\"d:\Config Files\TheConfig.config\"'

Echoargs输出:

Arg 0 is </AsService>
Arg 1 is </Config="d:\Config Files\TheConfig.config">

但可能这也会奏效,而且更容易:

&'d:\My Service\service.exe' @('/AsService', '/Config=d:\Config Files\TheConfig.config\')

Echoargs输出:

Arg 0 is </AsService>
Arg 1 is </Config=d:\Config Files\TheConfig.config>

答案 2 :(得分:-2)

这是我使用的方法。

Installing a service in powershell