在命令字符串中使用&符号进行PowerShell Invoke-Expression

时间:2012-09-15 15:07:04

标签: string powershell command

我正在尝试将包含&符号的字符串传递给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实时流式传输分块之前刷新之前记录的数据。

3 个答案:

答案 0 :(得分:17)

&符号必须在字符串"&"内双引号,因此您需要转义内部双引号

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

或将字符串放在单引号中

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

答案 1 :(得分:1)

将$ streamout_calmedia01更改为:

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

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

答案 2 :(得分:1)

您根本不需要使用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

这可以避免双重逃逸的所有复杂情况,并且应该按照您的意图行事。