2012-09-15 12 views
7

Sto provando a passare una variabile con una stringa che contiene una e commerciale in invoke-expression e mi sta dicendo che devo metterla tra virgolette e passarla come una stringa. Ho provato più combinazioni di escape e utilizzando una stringa raw e una stringa in una variabile con combinazioni di "" e "" inutilmente. Qualcuno può aiutarmi qui? Ecco il codice:PowerShell Invoke-Expression with E commerciale nella stringa di comando

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

Ho provato con un ` prima che la e commerciale e l'utilizzo di una doppia citazione davanti a invocare l'espressione prima di mettere nella variabile, ho provato (come mostrato) mettendo citazioni in tutto il variabile con -Command per Invoke-Expression e anche mettendo '&' e "&" e concatenando la e commerciale alla stringa. Qualsiasi idea sarebbe GRANDE apprezzata! Ho bisogno di un Ampersand per Flash Media Server per analizzare il comando dal nome del flusso e svuotare i dati registrati prima di iniziare il chunking di HTTP Live Streaming.

risposta

13

La e commerciale deve essere a doppio citato all'interno la stringa "&", quindi è necessario per sfuggire le virgolette interne

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

o mettere la stringa tra virgolette singole

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

Change $ streamout_calmedia01 a:

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

poi si deve riassegnare $ streamout_calmedia1 (con il nuovo valore di $ streamout_calmedia1) e dovrebbe funzionare.

+0

Ciò non dovrebbe avere alcun effetto. '&' non ha bisogno di eseguire l'escape in stringhe di virgolette doppie e l'apice viene ignorato/scartato: '" & ". Length -> 1' e' "' '&". Length -> 1' (il secondo esempio dovrebbe avere solo uno backtick, sembra che non riesca a capire come inserire un solo backtick nel codice backtick di markdown!) – latkin

+0

Forse intendevi usare le virgolette singole o le doppie virgolette con un ** backtick ** doppio **? – latkin

+0

No, si supponeva che avessero 3 apici inversi. Non sono sicuro di cosa sia successo lì. –

1

È don 't bisogno di usare Invoke-Expression affatto. Evitare il suo uso preclude il problema. Basta chiamare lo strumento exe direttamente.

$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 

Questa evitare tutte le complicazioni di doppio escape e shoud fare quello che avete intenzione.

Problemi correlati