在命令字符串中使用&符号进行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:将命令与管道符号结合起来不起作用

Powershell 管道总结

powershell 带有Dropbox命令的符号链接

如何从PowerShell命令行转义管道字符以传递到非PowerShell命令

Powershell中变量的定义和使用

Powershell Basic