2014-03-22 4 views
0

У меня есть скрипт, который работает. Он запрашивает ссылку http, а затем передает ее вместе с Vlc Video Player. Теперь я пытаюсь сделать его более привлекательным и добавить окно формы, где снова будет введена ссылка http, а затем входная переменная, которую я сейчас вызываю $ X, будет передана видеоплееру Vlc. Что-то не так с кодом в новом скрипте, и Vlc-плеер не открывается. Может ли кто-нибудь мне помочь? БлагодаряПеременная не передается

Рабочий скрипт

$link = read-host "Enter your Http Link" 
$ip = read-host "Enter your Local Ip Address:Port " 
$processArgs = "$link",":sout=#transcode{vcodec=VP80,vb=2000,acodec=vorb,ab=128, 
channels=2,samplerate=44100}:http{mux=webm,dst=:8080/stream} :sout-all :sout-keep" 
start-process "C:\Program Files\VideoLAN\VLC\vlc.exe" $processArgs  
& "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  
"https://dabble.me/cast/?video_link=http://$ip/stream" 

неработающего сценария

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Data Entry Form" 
$objForm.Size = New-Object System.Drawing.Size(300,200) 
$objForm.StartPosition = "CenterScreen" 
$objForm.KeyPreview = $True 
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
{$x=$objTextBox.Text;$objForm.Close()}}) 
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
{$objForm.Close()}}) 
$OKButton = New-Object System.Windows.Forms.Button 
$OKButton.Location = New-Object System.Drawing.Size(75,120) 
$OKButton.Size = New-Object System.Drawing.Size(75,23) 
$OKButton.Text = "OK" 
$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()}) 
$objForm.Controls.Add($OKButton) 
$CancelButton = New-Object System.Windows.Forms.Button 
$CancelButton.Location = New-Object System.Drawing.Size(150,120) 
$CancelButton.Size = New-Object System.Drawing.Size(75,23) 
$CancelButton.Text = "Cancel" 
$CancelButton.Add_Click({$objForm.Close()}) 
$objForm.Controls.Add($CancelButton) 

$objLabel = New-Object System.Windows.Forms.Label 
$objLabel.Location = New-Object System.Drawing.Size(10,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = "Enter the Http Link:" 
$objForm.Controls.Add($objLabel) 

$objTextBox = New-Object System.Windows.Forms.TextBox 
$objTextBox.Location = New-Object System.Drawing.Size(10,40) 
$objTextBox.Size = New-Object System.Drawing.Size(260,20) 
$objForm.Controls.Add($objTextBox) 

$objForm.Topmost = $True 

$objForm.Add_Shown({$objForm.Activate()}) 
[void] $objForm.ShowDialog() 

**$x** 

$ip = read-host "Enter your Local Ip Address:Port " 
$processArgs = "$x",":sout=#transcode{vcodec=VP80,vb=2000,acodec=vorb, 
ab=128,channels=2, samplerate=44100}:http{mux=webm,dst=:8080/stream} 
:sout-all :sout-keep" 
start-process "C:\Program Files\VideoLAN\VLC\vlc.exe" $processArgs 
& "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  
"https://dabble.me/cast/?video_link=http://$ip/stream" 
+0

Как минимум, вам нужно указать, какой язык программирования вы используете. Кроме того, этого достаточно кода, который был бы полезен SSCCE; см. http://www.sscce.org/ –

+0

Извините, это сценарий Powershell. – user3444610

+0

Обновлено тегирование соответствующим образом. По-прежнему было бы полезно создать более минимальный репроектор; конечно, вам не нужны текстовые поля, ярлыки и т. д., чтобы воссоздать проблему. –

ответ

0

Fix:

Try replacing $x with $Script:x everywhere in your script 

Объяснение:

Вы принимаете $ x, который у вас есть в блоке сценария, доступен снаружи. Это не. Один из способов преодоления этого - использовать метод $ script: VariableName. Переменные, которые вы определили таким образом, будут видны всем кодовым блокам в этом скрипте

Смежные вопросы