Powershell - Invoke-WebRequest - проблема с отправкой - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю над сценарием powershell, который создаст принтер на моем сервере печати компании, который все готов и работает.

Но у нас, однако, есть место, где мы перечисляем все используемые IP-адреса, чтовеб-страница.

Поэтому я пытаюсь использовать Invoke-WebRequest для этого.Вход на страницу работает, но когда он пытается использовать форму для добавления IP-адреса, это не так.

Вход в систему имеет только одну кнопку отправки в форме, а для добавления IP-адреса есть три кнопки.Я перечислю их в том порядке, в котором они находятся на странице

  1. Очистите форму
  2. Применить
  3. Отмена

Итак, я 'Я думаю, что когда я Invoke-Webrequest использую функцию «очистить форму».Можно ли каким-либо образом указать, какую функцию использовать при отправке веб-запроса?

Я не могу удалить кнопку «Очистить форму», поскольку она часто используется, просто чтобы очистить ее.

$R = Invoke-WebRequest -URI http://localhost -SessionVariable IP
$Form = $R.Forms[0]
$Form.fields["ctlUsername"]=User
$Form.fields["ctlPassword"]=Pass

$R=Invoke-WebRequest -Uri ("http://localhost/" + $Form.Action) -WebSession                 
$IP -Method POST -Body $Form.Fields

$D = Invoke-WebRequest -URI http://localhost/addIP.php -WebSession $Test
$Form2 = $D.Forms[0]

$Form2.fields["IP"]="172.10.0.1"
$Form2.fields["name"]="Printer300"
$Form2.fields["location"]="Room407"
$Form2.fields["MAC"]="000"
$Form2.fields["ID"]="000"

Invoke-WebRequest  -Uri http://localhost/addIP.php -WebSession $IP -Method POST -Body $Form2.Fields

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Обнаружил проблему, нужно скрытое значение, которое не отправлялось через форму, но было добавлено в функцию php позже.Спасибо за вашу помощь.

0 голосов
/ 24 сентября 2018

Не думайте с точки зрения «заполнения веб-страниц», когда речь идет об отправке этих запросов.Веб-страницы для человека.Заполнение формы и нажатие кнопки - это ручной способ создания HTTP-сообщения с данными.

Когда вы публикуете эту форму:

IP:       [172.10.0.1          ]
Name:     [Printer300          ]
Location: [Room407             ]

[Apply] [Cancel] 

, браузер создает текстовую строку, подобную этой:

IP=172.10.0.1&Name=Printer300&Location=Room407

, и отправляет ее на целевой URL.

Invoke-WebRequest может создать этот формат непосредственно из ваших данных.Это означает, что вам не нужно ничего «заполнять».Просто передайте хеш-таблицу с правильными ключами и значениями:

Invoke-WebRequest "http://localhost/addIP.php" -WebSession $IP -Method POST -Body @{
    IP = "172.10.0.1"
    Name = "Printer300"
    Location = "Room407"
    MAC = "000"
    ID = "000"
}

Конечно, ключи должны соответствовать именам полей формы.


При этом я не вижубольшая часть потребности в аутентификации с запросами, поступающими от localhost.Вы можете сэкономить некоторую занятость, отключив аутентификацию для всех локальных запросов и требуя ее только для удаленных запросов.

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

Invoke-WebRequest поддерживает встроенную проверку подлинности Windows, так что выне нужно беспокоиться с именами пользователей и паролями вообще.Это было бы моим предпочтительным решением для аутентификации для таких задач.

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