Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136

Работа с JS в GUI PowerShell

07.07.2021, 17:49. Показов 1937. Ответов 11

Студворк — интернет-сервис помощи студентам
Привет, форумчане!

Задался вопросом, можно ли использовать js форму, используемую сайтом, для поиска телефонных номеров в GUI на Powershell.

Суть следующая: есть корпоративный портал, который имеет свою телефонную книгу (поиск по базам осуществляется через js скрипт)


посмотрел код через хром, выглядит так.

Гуглил вопрос, вроде как можно внедрить используя Invoke-WebRequest, но промучался не чего не выходит, любая попытка связать textbox в скрипте выливается ошибкой.

Вот примерно такая форма, единственное с подписями-надписями, но в целом, хотел, чтобы работало примерно так же как на сайте, а там вводя в поле быстрого поиска, например тел: 1111 ниже вываливается список с номером и данными контакта, так понимаю это все выполняется силами js скрипта, от сюда решил, если смогу интегрировать его в свою форму, то получу работоспособность как на сайте.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
$main_form = New-Object System.Windows.Forms.Form
$main_form.AutoSize = $true
 
$CallTextBox = New-Object System.Windows.Forms.TextBox  
$CallTextBox.Location  = New-Object System.Drawing.Point(10,10)
$CallTextBox.Width = 200
$CallTextBox.Height = 5
$CallTextBox.Text = ''
$main_form.Controls.Add($CallTextBox)
 
 
$main_form.ShowDialog()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2021, 17:49
Ответы с готовыми решениями:

GUI Powershell для работы с AD
Всем доброго времени суток. Имеется такой код: Add-Type -assembly System.Windows.Forms #Создаем форму $window_form =...

Выгрузка c DHCP сервера, Powershell GUI
Нужно произвести выгрузку необходимых данных с DHCP сервера, который вводит пользователь. Все было хорошо ровно до того момента, как я...

Поиск по имени в Powershell GUI в Active Directory
Добрый день уважаемые пользователи форума. Прошу помочь мне в следующем вопросе. Я пытаюсь создать приложение с графическим интерфейсом в...

11
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 832
09.07.2021, 00:49
вы можете попытаться открыто страницу в форме через
System.Winfows.Forms.WebBrowser
browser = new System.Winfows.Forms.WebBrowser();
browser.Navigate($url);
но скорее всего очено старая версия IE будет вызвана и JS будет плохо или вообще НЕ работать
2
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136
09.07.2021, 09:11  [ТС]
Думал про WebBrowser, погуглил, примерно вот что вышло (на примере Google.com):



PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function Call-Demo-WebBrowserCtl_pff {
    [System.Windows.Forms.Application]::EnableVisualStyles()
    $form1 = New-Object 'System.Windows.Forms.Form'
    $webbrowser1 = New-Object 'System.Windows.Forms.WebBrowser'
    $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'
    $FormEvent_Load={
    $webbrowser1.navigate("https://www.google.com/")
    }
    
    $ButtonClick={
    $el=$webbrowser1.Document.GetElementById('gstyle')
    [System.Windows.Forms.MessageBox]::Show($el.InnerHtml)
    }
    $Form_StateCorrection_Load=
    {
        $form1.WindowState = $InitialFormWindowState
    }
    
    $Form_Cleanup_FormClosed=
    {
        try
        {
            $buttonGetElement.remove_Click($buttonGetElement_Click)
            $form1.remove_Load($FormEvent_Load)
            $form1.remove_Load($Form_StateCorrection_Load)
            $form1.remove_FormClosed($Form_Cleanup_FormClosed)
        }
        catch [Exception]
        { }
    }
    #Основная форма
    $form1.Controls.Add($webbrowser1)
    $form1.ClientSize = '520, 475'
    $form1.FormBorderStyle = 'FixedDialog'
    $form1.MaximizeBox = $False
    $form1.MinimizeBox = $False
    $form1.StartPosition = 'CenterScreen'
    $form1.add_Load($FormEvent_Load)
        
    #Браузер
    $webbrowser1.Location = '39, 27'
    $webbrowser1.MinimumSize = '20, 20'
    $webbrowser1.Name = "webbrowser1"
    $webbrowser1.Size = '469, 385'
    $webbrowser1.TabIndex = 1
 
    $InitialFormWindowState = $form1.WindowState
    $form1.add_Load($Form_StateCorrection_Load)
    $form1.add_FormClosed($Form_Cleanup_FormClosed)
    return $form1.ShowDialog()
}
if((OnApplicationLoad) -eq $true)
{
    Call-Demo-WebBrowserCtl_pff | Out-Null
    OnApplicationExit
}
Но, тут открывается полностью страница, а я бы хотел, чтобы в GUI отображалась только строка поиска и раскрывающийся под ней список, то есть часть элементов страницы, но реализовать не выходит пока что.
0
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136
09.07.2021, 09:57  [ТС]
Что бы отображалась только эта форма
0
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136
09.07.2021, 14:09  [ТС]
Что бы отображалась только эта форма
Вложение 1267050

Добавлено через 4 часа 12 минут
Полный код:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#Функции приложения
function OnApplicationLoad {
    #Примечание: Эта функция не вызывается в проектах
    #Примечание: Эта функция запускается до создания формы
    #Примечание: Чтобы получить каталог скриптов в упаковщике, используйте: Split-Path $hostinvocation.MyCommand.path
    #Примечание: Для получения вывода консоли в упаковщике (режим Windows) используйте: $ConsoleOutput (Тип: System.Collections.ArrayLis)
    #Важно: Элементы управления формами недоступны в этой функции
    #Необходимо добавить привязки и пользовательский код для проверки загрузки приложения
    
    return $true #значение true возвращается в случае успеха или false в случае неудачи
}
function OnApplicationExit {
    #Примечание: Эта функция не вызывается в проектах
    #Примечание: Эта функция запускается после закрытия формы
    #Необходимо добавить пользовательский код для очистки и выгрузки привязок при выходе из приложения
 
    $script:ExitCode = 0 #Код для выхода из упаковщика
}
# Функции приложения endregion
#----------------------------------------------
# Функция Сгенерированной Формы
#----------------------------------------------
function Call-Demo-WebBrowserCtl_pff {
    #----------------------------------------------
    # Импорт сборок
    #----------------------------------------------
    [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][reflection.assembly]::Load("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
    [void][reflection.assembly]::Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
    [void][reflection.assembly]::Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
    [void][reflection.assembly]::Load("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
    [void][reflection.assembly]::Load("System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
    [void][reflection.assembly]::Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
    
    #----------------------------------------------
    # Объединение ранее созданных форм
    #----------------------------------------------
    [System.Windows.Forms.Application]::EnableVisualStyles()
    $form1 = New-Object 'System.Windows.Forms.Form'
    $buttonGetElement = New-Object 'System.Windows.Forms.Button'
    $webbrowser1 = New-Object 'System.Windows.Forms.WebBrowser'
    $buttonOK = New-Object 'System.Windows.Forms.Button'
    $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'
    
    #----------------------------------------------
    # Пользовательский скрипт
    #----------------------------------------------
    
    $FormEvent_Load={
        #Необходимо инициализировать элементы управления формой 
    $webbrowser1.navigate("http://www.google.com")
    }
    
    $buttonGetElement_Click={
        #Необходимо разместить здесь пользовательский скрипт
    $el=$webbrowser1.Document.GetElementById('gstyle')
    [System.Windows.Forms.MessageBox]::Show($el.InnerHtml)
        
    }
 
    #Созданные события
    $Form_StateCorrection_Load=
    {
        # Исправьте начальное состояние формы, чтобы предотвратить .Net maximized формы
        $form1.WindowState = $InitialFormWindowState
    }
    
    $Form_Cleanup_FormClosed=
    {
        #Удалите все обработчики событий из элементов управления
        try
        {
            $buttonGetElement.remove_Click($buttonGetElement_Click)
            $form1.remove_Load($FormEvent_Load)
            $form1.remove_Load($Form_StateCorrection_Load)
            $form1.remove_FormClosed($Form_Cleanup_FormClosed)
        }
        catch [Exception]
        { }
    }
    #Сгенерированный код формы
    #----------------------------------------------
    # Форма 1
    $form1.Controls.Add($buttonGetElement)
    $form1.Controls.Add($webbrowser1)
    $form1.Controls.Add($buttonOK)
    $form1.AcceptButton = $buttonOK
    $form1.ClientSize = '520, 475'
    $form1.FormBorderStyle = 'FixedDialog'
    $form1.MaximizeBox = $False
    $form1.MinimizeBox = $False
    $form1.Name = "form1"
    $form1.StartPosition = 'CenterScreen'
    $form1.Text = "Form"
    $form1.add_Load($FormEvent_Load)
    #
    # Элемент кнопка
    #
    $buttonGetElement.Location = '50, 438'
    $buttonGetElement.Name = "buttonGetElement"
    $buttonGetElement.Size = '84, 24'
    $buttonGetElement.TabIndex = 2
    $buttonGetElement.Text = "Get Element"
    $buttonGetElement.UseVisualStyleBackColor = $True
    $buttonGetElement.add_Click($buttonGetElement_Click)
    #
    # Веб-браузер 1
    #
    $webbrowser1.Location = '39, 27'
    $webbrowser1.MinimumSize = '20, 20'
    $webbrowser1.Name = "webbrowser1"
    $webbrowser1.Size = '469, 385'
    $webbrowser1.TabIndex = 1
    #
    # Кнопка "ОК"
    #
    $buttonOK.Anchor = 'Bottom, Right'
    $buttonOK.DialogResult = 'OK'
    $buttonOK.Location = '433, 440'
    $buttonOK.Name = "buttonOK"
    $buttonOK.Size = '75, 23'
    $buttonOK.TabIndex = 0
    $buttonOK.Text = "OK"
    $buttonOK.UseVisualStyleBackColor = $True
    
    #----------------------------------------------
    #Сохранение начального состояния формы
    $InitialFormWindowState = $form1.WindowState
    #Начало инициализации события OnLoad, чтобы исправить состояние формы до начального
    $form1.add_Load($Form_StateCorrection_Load)
    #Очистка контрольного события
    $form1.add_FormClosed($Form_Cleanup_FormClosed)
    #Показ формы
    return $form1.ShowDialog()
} 
#Вызовите OnApplicationLoad для инициализации
if((OnApplicationLoad) -eq $true)
{
    #Вызов формы
    Call-Demo-WebBrowserCtl_pff | Out-Null
    #Очистка
    OnApplicationExit
}
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.07.2021, 22:39
А как же Selenium? Под него вроде даже бинд на PS есть.
1
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 832
09.07.2021, 22:49
пожоже ТС нужен электрон
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.07.2021, 23:02
¯\_(ツ)_/¯
0
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136
12.07.2021, 10:46  [ТС]
Есть 2 довода против использования Selenium.. на сколько я понял под него требуется установка доп. ПО, чтобы можно было осуществить запуск модуля Selenium (хотя могу ошибаться на счет установки, но несколько англоязычных форума настойчиво об этом утверждали), в моем случае установка доп. ПО невозможна, второй довод, Selenium хорош, но он открывает ссылку и модули сайта в отдельном окне браузера, мне же хотелось интегрировать модуль с сайта в GUIшке на Powershell`е, проще говоря, хочу внедрить.. ну например строку поиска google в GUI, при этом варианты быстрого набора отображались сразу, а в случае если нужна подробная информация, т.е. переход по запросу, в этом случае открывалось окно браузера с соответствующим запросом.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
12.07.2021, 12:36
Цитата Сообщение от DjonyCooper Посмотреть сообщение
например строку поиска google в GUI, при этом варианты быстрого набора отображались сразу
ага,
Google ты не переплюнешь, таких хитреньких было бы и было.
0
 Аватар для DjonyCooper
10 / 7 / 4
Регистрация: 28.05.2021
Сообщений: 136
12.07.2021, 13:00  [ТС]
alpap, ))) не стремлюсь перепрыгнуть гугл, гугл использую как пример, строку которую хочу интегрировать работает по тому же принципу, как поисковик. Вообще просто ищу решение, может можно интегрировать страницу же интернета можно через WebBrowser, вполне себе рабочее решение.. но задался вопросом, можно ли пойти дальше и не закидывать в форму всю страницу, а лишь ее отдельный элемент.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
12.07.2021, 13:44
а может то, что разработано для php и java, должно с их помощью и реализовываться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2021, 13:44
Помогаю со студенческими работами здесь

работа с PowerShell
Добрый вечер, уважаемые Форумчане. есть задача, нужно написать скрипт PowerShell который бы допустим создавал внутри себя объект...

Работа с Powershell
Привет! Пишу приложение которое работает со скриптами PowerShell. Один из скриптов запрашивает состояние устройства и выводит его в...

Работа с папками в powershell
Возникла проблема, необходимо создавать папку по имени пользователя ($env:USERNAME) если она не существует. Вот такой код почему то не...

Работа с Планировщиком Powershell
Доброго времени суток Вопрос следущего характера Освоил уже готовый скриптик, по созданию заданий на win10 Function...

Powershell 7. Лабораторная работа
Преподаватель - я. Предположим. Задание следующее: 0) Есть текст: первая страница первой главы Анны Карениной,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru