我有一个我需要安装的服务,它有一个看起来像这样的命令行:
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。不管。
帮助!
答案 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)
这是我使用的方法。