2

我有一个需要安装的服务,它的命令行如下所示:

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

对于命令行来说,这几乎是最坏的情况。我遇到的问题是 args 中的双引号

这是我尝试过的接近但不完全的方法:

$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。任何。

帮助!

4

3 回答 3

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)

于 2012-08-01T21:24:07.473 回答
0

如果您 100% 确定需要引号,那么您必须使用以下命令对它们进行转义\

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

回声输出:

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\')

回声输出:

Arg 0 is </AsService>
Arg 1 is </Config=d:\Config Files\TheConfig.config>
于 2015-02-19T11:17:14.313 回答
-2

这是我使用的一种方法。

在 powershell 中安装服务

于 2012-08-01T15:52:54.953 回答