Используйте HTML-форму в качестве графического интерфейса для powershell - PullRequest
4 голосов
/ 12 мая 2011

У меня есть скрипт powershell, который я хотел бы запустить с помощью HTML-формы.Все, что у меня есть, это несколько полей формы и кнопка.Когда я запускаю свой скрипт powershell, он открывает новое окно ie, а затем переходит на нужную страницу с формой.Как собрать информацию, которая заполняется в форме после того, как пользователь нажимает кнопку?

РЕДАКТИРОВАТЬ:

Вот код, который я пытаюсь получитьработает:

function onClick($server)
{
    $server.value="here"
}

$ie = new-object -com "Internetexplorer.Application"
$ie.navigate("bulk_upload.html")
$ie.visible = $true

$doc = $ie.document
$btn = $doc.getElementById("submit")
$server = $doc.getElementById("server")

$btn.add_onclick({onClick $server})

Я запускаю этот код, и после нажатия кнопки ничего не происходит

ОБНОВЛЕНИЕ

Я попытался запустить этот код:

$ie = new-object -com "Internetexplorer.Application"
$ie.navigate("bulk_upload.html")
$ie.visible = $true

$doc = $ie.document
$btn = $doc.getElementById("submit")

$eventId = Register-ObjectEvent $btn HTMLButtonElementEvents_Event_onclick -Action {write-host 'hi'}

И я получаю эту ошибку:

Невозможно зарегистрироваться на событие.События, которые требуют возвращаемого значения, не поддерживаются

Ответы [ 6 ]

3 голосов
/ 03 февраля 2012

Я пытался сделать то же самое и наткнулся на ваш пост.Я вижу, прошло около 8 месяцев, но если вы все еще смотрите, вот что я нашел.Я не был в состоянии заставить "onclick" работать.Поэтому я использовал скрытое поле ввода и определил действие для кнопки, чтобы обновить значение этого поля.В powershell я получаюElementbyId для скрытого поля и использую его, чтобы распознать, что пользователь завершил ввод.

$html = @"
<html>
<body>
<form>
First name: <input type="text" id="firstname">
<br>
Last name: <input type="text" id="lastname">
<br>
<input type="hidden" name="finished" value="0">
<input type="button" id="button" value="Continue" onclick="finished.value=1">
</form>
</body>
</html>
"@

$ie = new-object -com "InternetExplorer.Application"
$ie.navigate2("about:blank")
$ie.AddressBar  = $false
$ie.MenuBar     = $false
$ie.StatusBar   = $false

$ie.document.body.innerHTML = $html
$ie.Visible = $true
$doc = $ie.document

while ($doc.getElementByID("finished").value -ne 1) {
    start-sleep -m 500
}

$ie.Visible = $false
"You answered:"
$doc.getElementByID("firstname").value
$doc.getElementByID("lastname").value
$ie.quit()
2 голосов
/ 12 мая 2011

Следующая статья об автоматизации Web UI с PowerShell может вам помочь. http://msdn.microsoft.com/en-us/magazine/cc337896.aspx

1 голос
/ 13 мая 2011

Я знаю, что вы указали HTML-форму, но вам лучше написать для нее графический интерфейс WinForms.

http://www.techotopia.com/index.php/Creating_GUIs_in_Windows_PowerShell_1.0_with_WinForms

0 голосов
/ 02 июня 2017

Я добавляю javascript, используя execScript («Сценарий ЗДЕСЬ», «Тип сценария») родительского окна

$html = @"
<html>
    <body>
        <form>
                First name: <input type="text" id="firstname">
            <br>
                Last name: <input type="text" id="lastname">
            <br>
            <input type="button" id="finished" value="Submit" onclick=''>
            </form>
    </body>
</html>
"@

$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("about:blank")
$ie.document.body.innerHTML = $html
$doc = $ie.Document
$doc.parentWindow.execScript("document.getElementById('finished').onclick = function(){document.getElementById('finished').value = 'Submitted';};","javascript")
$ie.Visible = $true

while ($doc.getElementByID("finished").value -ne "Submitted") {
    start-sleep -m 500
    $firstName = $doc.getElementByID("firstname").value
    $lastName = $doc.getElementByID("lastname").value
}

$ie.Visible = $false
"You answered:"
$doc.getElementByID("firstname").value
$doc.getElementByID("lastname").value
$ie.quit()
0 голосов
/ 13 мая 2011

Мне было интересно, действительно ли это работает хорошо:

http://social.technet.microsoft.com/wiki/contents/articles/how-to-add-a-graphical-user-interface-to-a-powershell-script-by-using-html-applications.aspx

Он основан на запуске процесса PowerShell из VBScript и последующем использовании буфера обмена для передачи вывода обратно вHTA.

Звучит как наполовину приличный хак, хотя я еще не пробовал для себя.

Мэтт

0 голосов
/ 13 мая 2011

Поскольку вы уже можете открыть новое окно ie из сценария powershell и перейти на нужную страницу, я предполагаю, что вы используете InternetExplorer Object .Вот почему я думаю, что ссылка @ravikanth хороша для вас.Оттуда (и из многих других сообщений в Интернете) вы можете увидеть, как получить поля значений, используя $ie.Document.getElementById("fieldid").value, а?

Другой вариант - System.Net.WebClient , который является правильным способом для получения данных веб-страницы.У вас есть хороший пример здесь .

В противном случае, я думаю, вы должны быть более четкими в отношении того, что вы хотите сделать, и предоставить пример кода того, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...