Invoke-WebRequest оставляет сеансы открытыми

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

$c = Get-Credential -credential ${CREDENTIAL}

$loginbase = 'http://${IP}'
$loginURL = $loginbase + '/AdminTools/querybuilder/'
$r = Invoke-WebRequest -Uri ($loginURL + 'logonform.jsp') -SessionVariable session

$form = $r.Forms[0];

$form.Fields['aps'] = '${Node.DNS}:6400';
$form.Fields['usr'] = $c.Username;
$form.Fields['pwd'] = SecureStringToString $c.Password;

$r = Invoke-WebRequest -Uri ($loginURL + $form.Action) -Method POST -Body $form.Fields -WebSession $session;

Я слишком долго смотрел на это, и мне просто нужен еще один взгляд, чтобы подтолкнуть меня в правильном направлении.

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


person Resin    schedule 16.11.2016    source источник
comment
Как они определяют устаревший сеанс? Ожидают ли они, что вы выйдете из системы или иным образом прервете сеанс? Что такое сеанс в их контексте (поскольку HTTP не имеет состояния)? Что они предложили в качестве средства, с помощью которого можно не оставлять устаревший сеанс?   -  person alroc    schedule 16.11.2016
comment
Они прислали мне снимок экрана, показывающий, что у учетной записи, которую я использовал, было 36 активных сеансов. Я ничего не делаю с ними, и я предположил, что, как только сценарий завершится, сеанс будет закрыт. Итак, я думаю, чтобы ответить на вопрос, учетная запись была зарегистрирована на веб-сайте большое количество раз.   -  person Resin    schedule 16.11.2016
comment
Тогда это звучит так, как будто вам нужно вызвать WebRequest для вызова метода, который выходит из системы. Тот, кто управляет этим веб-сайтом, должен сказать вам, что вам нужно там делать.   -  person alroc    schedule 16.11.2016
comment
Да, ваш вопрос только что вызвал совершенно новый ход мыслей. Я только что создал веб-запрос для выполнения действия выхода из системы. Я считаю, что это сработало, поскольку я снова получаю страницу входа в систему. Я ценю помощь! Если бы я мог отметить ваш комментарий как решение, я бы это сделал.   -  person Resin    schedule 16.11.2016
comment
Теперь есть ответ :)   -  person alroc    schedule 16.11.2016


Ответы (1)


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

person alroc    schedule 16.11.2016