尝试使用嵌套引号从PowerShell运行sc创建,但无法使其工作



我正在尝试编程创建一个服务,其中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

最新更新