在双引号powershell命令中找不到语法错误

时间:2018-01-19 21:02:27

标签: windows powershell batch-file cmd

powershell "Start-Process -FilePath 'c:\PSexec.exe' -ArgumentList "-s -i -d -u .\USERNAME -p PASSWORD \\192.168.1.1 cmd /C "O: && cd O:\SOMEDIR && perl run.pl --socket 192.168.0.1:7890 & pause"" -Wait -Passthru -WindowStyle Hidden"

启动远程psexec进程并使用powershell包装器等待进程完成。

这一切都有效,除非我添加了powershell包装器,我似乎无法弄清楚如何正确地转义内部双引号。

The string is missing the terminator: '.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

'pause'`" -Wait -Passthru -WindowStyle Hidden"' is not recognized as an internal or external command,
operable program or batch file.

我尝试过的事情:

  1. 我不想使用-EncodedString将其编码为base64,因为将调用该命令,其中某些部分可能被替换为1000次。此外,这是从perl脚本调用的,并且不希望每次运行perl脚本时都必须检查一个powershell文件。 (即我更愿意使用perl脚本中包含的powershell命令)

  2. How to escape powershell double quotes from a bat file?建议用四重引号替换双引号。但是,当我这样做时,我得到了

    powershell "Start-Process -FilePath 'c:\PSexec.exe' -ArgumentList ""-s -i -d -u .\USERNAME -p PASSWORD \\192.168.1.1 cmd /C ""O: && cd O:\SOMEDIR && perl run.pl --socket 192.168.0.1:7890 & pause"""" -Wait -Passthru -WindowStyle Hidden"
    
  3. At line:1 char:1
    + Start-Process -FilePath 'c:\PSexec.exe' -ArgumentList -EncodedCommand ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
    
    1. `转义不起作用,因为你需要从命令提示符中转义“以便它可以传递给powershell。

1 个答案:

答案 0 :(得分:2)

删除PowerShell调用,不需要它。从psexec调用中删除-d选项,它将等待它启动的任何进程完成。 Read the psexec docs。从我们的文档:

  

-d不要等待进程终止(非交互式)。