PowerShell Invoke-Expression with ampersand in the command string

心已入冬 提交于 2019-12-04 11:28:26

问题


I am trying to pass a variable with a string that contains an ampersand into Invoke-Expression, and it is telling me I have to put it in quotations and pass it as a string.

I've tried multiple combinations of escaping and using a raw string and a string in a variable with combinations of "" and '' to no avail. How can I do it?

Here's the code:

$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"

I've tried using a ` before the ampersand and using a double quotation in front of Invoke-Expression before putting in the variable,

I've tried (as is shown) putting quotations around the variable with the -Command for Invoke-Expression and also putting '&' and "&" and concatenating the ampersand to the string.

I need the ampersand in there for Flash Media Server to parse the command out of the stream name and flush prior recorded data before beginning HTTP live streaming chunking.


回答1:


The ampersand must be double-quoted inside the string "&", so you need to escape the inner double quotes

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

or put the string in single quotes

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



回答2:


Change $streamout_calmedia01 to:

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

Then you have to re-assign $streamout_calmedia1 (with the new value of $streamout_calmedia1) and it should work.




回答3:


You don't need to be using Invoke-Expression at all. Avoiding its use will preclude the issue. Just call the EXE file tool directly:

$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

This avoids all of the complications of double-escaping and should do what you are intending.



来源:https://stackoverflow.com/questions/12438479/powershell-invoke-expression-with-ampersand-in-the-command-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!