在命令字符串中使用&符号进行PowerShell Invoke-Expression
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在命令字符串中使用&符号进行PowerShell Invoke-Expression相关的知识,希望对你有一定的参考价值。
我试图将包含一个&符号的字符串的变量传递给Invoke-Expression,它告诉我必须将它放在引号中并将其作为字符串传递。
我尝试了多种转义组合,并使用原始字符串和变量中的字符串组合“”和“”无效。我该怎么做?
这是代码:
$streamout_calmedia01 = `
"rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"
$streamcmd_calmedia01 = "C:avconvusrinavconv.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实时流式传输分块之前刷新先前记录的数据。
答案
&符必须在字符串"&"
中双引号,所以你需要转义内部双引号
$streamout_calmedia01 = "rtmp://...vent`"&`"adbe-record-mode=record"
或者将字符串放在单引号中
$streamout_calmedia01 = 'rtmp://...vent"&"adbe-record-mode=record'
另一答案
将$ streamout_calmedia01更改为:
$streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent```&adbe-record-mode=record"
然后你必须重新分配$ streamout_calmedia1(使用$ streamout_calmedia1的新值),它应该工作。
另一答案
您根本不需要使用Invoke-Expression
。避免使用它将排除这个问题。只需直接调用EXE文件工具:
$streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"
C:avconvusrinavconv.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
这避免了双重逃逸的所有复杂性,应该做你想要的。
以上是关于在命令字符串中使用&符号进行PowerShell Invoke-Expression的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Linux 的 Powershell:将命令与管道符号结合起来不起作用