2012-09-15 13 views
7

Próbuję przekazać zmienną z ciągiem, który zawiera znak ampersand do wyrażenia invoke i mówi mi, że muszę umieścić go w cudzysłowach i przekazać go jako ciąg znaków. Próbowałem wielu kombinacji ucieczki i używania nieprzetworzonego łańcucha i łańcucha w zmiennej z kombinacjami "" i "" bez skutku. Czy ktoś może mi pomóc? Oto kod:Wywołanie Wywołanie PowerShell z Ampersand w ciągu polecenia

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

Próbowałem przy użyciu ` przed Ampersand i stosując podwójne notowanie przed wywołać ekspresję przed wprowadzeniem w zmiennej, próbowałem (jak pokazano) oddanie cytaty wokół Zmienna z -Komendą dla Wyrażenia-Wywołania, a także wstawiającą "&" i "&" i łączącą znak ampersand z ciągiem znaków. Wszelkie pomysły byłyby WSPANIAŁE doceniane! Potrzebuję Ampersand tam dla Flash Media Server, aby przeanalizować polecenie z nazwy strumienia i przepłukać wcześniej zapisane dane przed rozpoczęciem przesyłania strumieniowego HTTP Live Streaming.

Odpowiedz

13

Znak & muszą być podwójnie cytowany wewnątrz napisu "&", więc trzeba uciekać wewnętrzne cudzysłowy podwójne

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

lub umieścić ciąg w apostrofach

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

Zmień $ streamout_calmedia01 do:

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

Następnie trzeba ponownie przypisać $ streamout_calmedia1 (z nowej wartości $ streamout_calmedia1) i powinno działać.

+0

Nie powinno to mieć żadnego efektu. '&' nie potrzebuje ucieczki w łańcuchach podwójnego cudzysłowu, a zwrotny jest ignorowany/odrzucany: '" & ". Długość -> 1' i" "' 'i". Długość -> 1' (Drugi przykład powinien mieć tylko jeden backtick, wydaje się, że nie mogę wymyślić, jak umieścić pojedynczy backtick w kodzie backtick Markdown!) – latkin

+0

Może miałeś użyć pojedynczych cudzysłowów lub podwójnych cudzysłowów z ** podwójnym zwrotnym? – latkin

+0

Nie powinno to mieć 3 zwrotów. Nie jestem pewien, co się tam stało. –

1

don w ogóle trzeba używać Invoke-Expression. Uniknięcie jego użycia wyklucza tę kwestię. Wystarczy zadzwonić bezpośrednio do narzędzia 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 

Pozwala to uniknąć wszystkich komplikacji związanych z podwójnym ucieczką, i niech będzie robić to, co zamierza.

Powiązane problemy