PowerShell Invoke-выражение с амперсандом в командной строке

Я пытаюсь передать переменную со строкой, которая содержит амперсанд в Invoke-Expression, и она говорит мне, что я должен поместить ее в цитаты и передать ее как строку.

Я пробовал несколько комбинаций экранирования и использования необработанной строки и строки в переменной с комбинациями "" и " безрезультатно. Как я могу это сделать?

вот код:

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

$streamcmd_calmedia01 = "C:avconvusrbinavconv.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 live streaming chunking.

3 ответов


амперсанд должен быть дважды процитирован внутри строка "&", поэтому вам нужно избежать внутренних двойных кавычек

$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:\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

это позволяет избежать всех осложнений двойного побега и должно делать то, что вы намереваетесь.