【问题标题】:PowerShell Invoke-Expression with ampersand in the command stringPowerShell Invoke-Expression 在命令字符串中带有与号
【发布时间】:2012-09-08 10:37:31
【问题描述】:

我正在尝试将一个带有与号的字符串的变量传递给 Invoke-Expression,它告诉我必须将它放在引号中并将其作为字符串传递。

我尝试了多种转义组合以及在变量中使用原始字符串和字符串以及 "" 和 '' 的组合,但无济于事。我该怎么做?

代码如下:

$streamout_calmedia01 = `
"rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"

$streamcmd_calmedia01 = "C:\avconv\usr\bin\avconv.exe 'rtmp://75.126.42.211/transcoder/mobileingest live=1' -f flv -c:v libx264 -r 30 -g 120 -b:v 410000 -c:a aac -ar 22050 -b:a 64000 -strict experimental -y $streamout_calmedia01"

Invoke-Expression "$streamcmd_calmedia01"

我尝试在 & 符号前使用 `,并在 Invoke-Expression 前使用双引号,然后再放入变量,

我已经尝试(如图所示)使用 -Command 为 Invoke-Expression 的变量加上引号,并加上 '&' 和 "&" 并将 & 符号连接到字符串。

我需要其中的 & 符号,以便 Flash Media Server 从流名称中解析命令并在开始 HTTP 实时流分块之前刷新之前记录的数据。

【问题讨论】:

    标签: string powershell command


    【解决方案1】:

    & 符号必须在字符串"&"用双引号括起来,所以你需要转义内部的双引号

    $streamout_calmedia01 = "rtmp://...vent`"&`"adbe-record-mode=record"
    

    或将字符串放在单引号中

    $streamout_calmedia01 = 'rtmp://...vent"&"adbe-record-mode=record'
    

    【讨论】:

      【解决方案2】:

      将 $streamout_calmedia01 更改为:

      $streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent```&adbe-record-mode=record"
      

      然后您必须重新分配 $streamout_calmedia1(使用 $streamout_calmedia1 的新值),它应该可以工作。

      【讨论】:

      • 这应该没有效果。 & 不需要在双引号字符串中转义,并且反引号被忽略/丢弃:"&".Length -> 1"``&".Length -> 1 (第二个示例应该只有一个反引号,似乎我无法弄清楚如何放入单个反引号降价反引号代码!)
      • 也许您的意思是使用单引号,或者使用带有 double 反引号的双引号?
      • 不,它应该有 3 个反引号。不知道那里发生了什么。
      【解决方案3】:

      您根本不需要使用Invoke-Expression。避免使用它会排除这个问题。直接调用EXE文件工具即可:

      $streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"
      
      C:\avconv\usr\bin\avconv.exe 'rtmp://75.126.42.211/transcoder/mobileingest live=1' -f flv -c:v libx264 -r 30 -g 120 -b:v 410000 -c:a aac -ar 22050 -b:a 64000 -strict experimental -y $streamout_calmedia01
      

      这避免了双重转义的所有复杂性,并且应该按照您的意图进行。

      【讨论】:

        猜你喜欢
        • 2013-04-09
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2014-12-24
        • 2010-09-05
        • 2020-04-27
        相关资源
        最近更新 更多