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
это позволяет избежать всех осложнений двойного побега и должно делать то, что вы намереваетесь.