![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Передача переменных в функцию |
|
PowerShell - Передача переменных в функцию
|
Старожил Сообщения: 232 |
Добрый вечер всем!
Подскажите, пожалуйста, как правильно передать переменные в функцию. На WinForm расположены две радиокнопки. По активации каждой из них должен выполняться один и тот же скриптблок, но с разными переменными. Скриптблок обернул в функцию, в параметрах указываю эти переменные, но с условий активации радиокнопок они не передаются. function GenerateForm { [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null $form1 = New-Object System.Windows.Forms.Form $button1 = New-Object System.Windows.Forms.Button $listBox1 = New-Object System.Windows.Forms.ListBox $RadioButton = New-Object System.Windows.Forms.RadioButton $RadioButton1 = New-Object System.Windows.Forms.RadioButton $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState $b1= $false $b2= $false $b3= $false #---------------------------------------------- #Generated Event Script Blocks #---------------------------------------------- function online ($url, $name) { $watch = [System.Diagnostics.Stopwatch]::StartNew() $watch.Start() #Запуск таймера $file = New-TemporaryFile $lfile = New-TemporaryFile $d = '#EXTM3U' (Invoke-WebRequest -UseBasicParsing -Uri $url -TimeoutSec 20).Links.Href | Where {$_ -match "html"} | Sort-Object -Unique ` | ForEach {$_ -replace "(.*html)","$url`$1"} | Out-File $file.FullName $ls = Get-Content $file.FullName -Encoding utf8 ForEach ($link in $ls){ $a = Invoke-WebRequest -Uri $link -TimeoutSec 20 -Method GET if ($a.Content -match '<h1>') { $a.Content -match '<h1>(.*) смотреть онлайн</h1>' | Out-Null $matches[1] | ForEach-Object {[Void]$listbox1.Items.Add($_)} $listBox1.SelectedIndex = $listBox1.Items.Count -1 $listBox1.SelectedIndex = -1 $n = '#EXTINF:-1,'+$matches[1] if ($a -notmatch "iframe.*https?.*html") { $a.Content -match 'iframe.*"(https?.+php)".*' | Out-Null $Global:l = $matches[1] if ($l -notmatch "youtube") { (Invoke-WebRequest -UseBasicParsing -URI $l -Headers @{"Referer"=$link}).Content -match 'file:"([^"]+)"' | Out-Null $m = $matches[1] Add-Content $lfile.FullName -Encoding utf8 -Value $n,$m } else { continue } } else { $a.Content -match 'iframe.*"(https?.+html)".*' | Out-Null $Global:l = $matches[1] (Invoke-WebRequest -UseBasicParsing -URI $l -Headers @{"Referer"=$link}).Content -match 'var videoLink.*(https?[^"]+m3u8)' | Out-Null $m = $matches[1] Add-Content $lfile.FullName -Encoding utf8 -Value $n,$m } } else { continue } } $c = Get-Content $lfile.FullName -Encoding utf8 Set-Content $name -Encoding utf8 -value $d,$c Remove-Item $file.FullName -errorAction silentlycontinue Remove-Item $lfile.FullName -errorAction silentlycontinue $listBox1.Items.Add("Плейлист создан!") $listBox1.SelectedIndex = $listBox1.Items.Count -1 $listBox1.SelectedIndex = -1 $watch.Stop() #Остановка таймера $watch.Elapsed #Время выполнения $time = $watch.Elapsed } $handler_button1_Click= { $listBox1.Items.Clear(); if ($RadioButton.Checked) { $url = 'http://первый сайт' $name = '.\первый.txt' online } elseif ($RadioButton1.Checked) { $url = 'http://второй сайт' $name = '.\второй.txt' online } if ( !$RadioButton.Checked -and !$RadioButton1.Checked ) { $listBox1.Items.Add("No CheckBox selected....")} } $OnLoadForm_StateCorrection= {#Correct the initial state of the form to prevent the .Net maximized form issue $form1.WindowState = $InitialFormWindowState } #---------------------------------------------- #region Generated Form Code $form1.Text = "TV" $form1.Name = "form1" $form1.DataBindings.DefaultDataSourceUpdateMode = 0 $form1.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle $form1.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 450 $System_Drawing_Size.Height = 660 $form1.BackColor = "0x7AC5E7" $form1.Opacity = 0.96 $form1.Icon = New-Object System.Drawing.Icon(".\favicon.ico") $form1.ClientSize = $System_Drawing_Size $button1.TabIndex = 1 $button1.Name = "button1" $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 75 $System_Drawing_Size.Height = 23 $button1.Size = $System_Drawing_Size $button1.UseVisualStyleBackColor = $True $button1.Text = "Run Script" $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 25 $System_Drawing_Point.Y = 585 $button1.Location = $System_Drawing_Point $button1.DataBindings.DefaultDataSourceUpdateMode = 0 $button1.add_Click($handler_button1_Click) $form1.Controls.Add($button1) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Point(25,615) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = "Cancel" $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel $CancelButton.UseVisualStyleBackColor = $True $button1.TabIndex = 2 $form1.CancelButton = $CancelButton $form1.Controls.Add($CancelButton) $listBox1.FormattingEnabled = $True $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 210 $System_Drawing_Size.Height = 640 $listBox1.Size = $System_Drawing_Size $listBox1.DataBindings.DefaultDataSourceUpdateMode = 0 $listBox1.Name = "listBox1" $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 220 $System_Drawing_Point.Y = 13 $listBox1.Location = $System_Drawing_Point $listBox1.TabIndex = 3 $form1.Controls.Add($listBox1) $RadioButton.UseVisualStyleBackColor = $True $RadioButton.Checked = $false $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 154 $System_Drawing_Size.Height = 30 $RadioButton.Size = $System_Drawing_Size $RadioButton.TabIndex = 4 $RadioButton.Text = "TV1" $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 25 $System_Drawing_Point.Y = 40 $RadioButton.Location = $System_Drawing_Point $RadioButton.DataBindings.DefaultDataSourceUpdateMode = 0 $RadioButton.Name = "RadioButton" $RadioButton.add_CheckedChanged({ if ($RadioButton.Checked){ $listBox1.Items.Add( "TV1" ) } else { $listBox1.Items.Clear(); } }) $form1.Controls.Add($RadioButton) $RadioButton1.UseVisualStyleBackColor = $True $RadioButton1.Checked = $false $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Width = 154 $System_Drawing_Size.Height = 30 $RadioButton1.Size = $System_Drawing_Size $RadioButton1.TabIndex = 5 $RadioButton1.Text = "TV2" $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 25 $System_Drawing_Point.Y = 75 $RadioButton1.Location = $System_Drawing_Point $RadioButton1.DataBindings.DefaultDataSourceUpdateMode = 0 $RadioButton1.Name = "RadioButton1" $RadioButton1.add_CheckedChanged({ if ($RadioButton1.Checked){ $listBox1.Items.Add( "TV2" ) } else { $listBox1.Items.Clear(); } }) $form1.Controls.Add($RadioButton1) #Save the initial state of the form $InitialFormWindowState = $form1.WindowState #Init the OnLoad event to correct the initial state of the form $form1.add_Load($OnLoadForm_StateCorrection) #Show the Form $form1.ShowDialog()| Out-Null } #End Function #Call the Function GenerateForm Заранее благодарен за советы и помощь! |
|
Отправлено: 18:27, 17-12-2019 |
Старожил Сообщения: 232
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:08, 17-12-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 232
|
Профиль | Отправить PM | Цитировать Но осталась одна нерешенная проблема, может кто подскажет, буду премного благодарен.
Пока не запущен скрипт блок внутри EventHandler, с окном формы можно делать всё (сворачивать в панель задач, разворачивать и т.д.). Но, после запуска скриптблока, окно становится неуправляемым, его нельзя ни свернуть, ни передвинуть. Можно ли решить эту проблему, с чем это связано ? |
Отправлено: 22:16, 17-12-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Uragan66:
|
|
Отправлено: 03:02, 18-12-2019 | #4 |
Старожил Сообщения: 232
|
Профиль | Отправить PM | Цитировать Iska, то что, после запуска скриптблока, окно делается неподвижным, это, в некотором роде проблема, бывает нужно свернуть его.
|
|
Отправлено: 08:57, 18-12-2019 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Возможно, правильный ответ — «…create a Background Task» (winforms - Why is my WindowsForm not responding while executing loop - Stack Overflow, там же разъяснения, почему оно становится freeze).
|
Отправлено: 17:36, 18-12-2019 | #6 |
Старожил Сообщения: 232
|
Профиль | Отправить PM | Цитировать Iska, спасибо!
Наверное так и оставлю, не так то и велика проблема. Переписывать весь код для запуска через Start-Job как-то неохота, слишком много работы, да и может не получиться... |
Отправлено: 20:04, 18-12-2019 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Uragan66, сделайте в форме строку состояния и выводите в неё перед началом обработки что-нибудь типа «Ожидайте, идёт обработка…».
|
Отправлено: 20:42, 18-12-2019 | #8 |
Старожил Сообщения: 232
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Да и, непонятно почему, не всегда процесс формы занят циклом, во время работы оного. Бывает что можно и свернуть в панель задач. |
|
Отправлено: 21:04, 18-12-2019 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Uragan66:
|
|
Отправлено: 22:33, 18-12-2019 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - передача переменных bat>vbs | Imago_ | Скриптовые языки администрирования Windows | 2 | 23-06-2015 18:50 | |
C/C++ - Передача объекта (матрици в функцию) | _Goodwin | Программирование и базы данных | 4 | 25-10-2013 03:02 | |
VBS/WHS/JS - Передача объекта в функцию | ven00m | Программирование и базы данных | 3 | 17-07-2008 16:13 | |
JavaScript: Передача переменных | Crowner | Вебмастеру | 10 | 03-08-2005 09:52 | |
PHP и передача значений переменных... | Guest | Вебмастеру | 3 | 13-04-2004 14:01 |
|