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

bvk5enib  于 2023-01-13  发布在  Shell
关注(0)|答案(2)|浏览(192)

我尝试以编程方式创建一个服务,其中的binpath包含嵌套引号,用于包含空格的参数。
通过命令提示符运行它可以正常工作,但是在powershell中使用调用表达式会失败。我试过在这里使用字符串和脚本块,但是仍然不能让它工作。

$serviceName = "my service"
$svcBinaryPath = '\"' + $pathToExe + '\" \"' + $parameterWithSpaces + '\"'

$cmd = "sc.exe create $('"' + $serviceName + '"') binpath= $('"' + $svcBinaryPath + '"')"
Invoke-Command $cmd

打印出$cmd并在命令提示符中运行它所显示的内容工作正常。

wljmcqd8

wljmcqd81#

请注意,有一个用于创建服务的new-service cmdlet。

PS C:\users\j> 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`""
ttygqcqt

ttygqcqt2#

你不能只把一个字符串传递给Invoke-Command,而且你不需要它,就这样运行它:

$serviceName = "my service"
$scvBinaryPath = '\"' + $pathToExe + '\" \"' + $parameterWithSpaces + '\"'
sc.exe create $serviceName binpath= $svbBinaryPath

相关问题