我正在尝试编程创建一个服务,其中binpath包含包含空格的参数的嵌套引号。
通过命令提示运行它可以正常工作,但使用Invoke-Expression在PowerShell中失败。我已经尝试在这里玩耍,但仍然无法正常工作。
$serviceName = "my service"
$svcBinaryPath = '"' + $pathToExe + '" "' + $parameterWithSpaces + '"'
$cmd = "sc.exe create $('"' + $serviceName + '"') binpath= $('"' + $svcBinaryPath + '"')"
Invoke-Command $cmd
打印$cmd
并在命令提示中运行它显示的内容正常。
请注意,有一个新的服务CMDLET用于创建服务。
PS C:usersj> get-command -noun service
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet New-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Restart-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Resume-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Start-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Stop-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Suspend-Service 3.1.0.0 Microsoft.PowerShell.Management
用引号创建新服务的示例:
New-Service -Name $serviceName -BinaryPathName "`"$pathToExe $parameterWithSpaces`""
您不能只将字符串传递给Invoke-Command
,而您不需要它,只需以这种方式运行它:
$serviceName = "my service"
$scvBinaryPath = '"' + $pathToExe + '" "' + $parameterWithSpaces + '"'
sc.exe create $serviceName binpath= $svbBinaryPath