Я пытаюсь настроить свой сборочный сервер на прогрев моего сайта с помощью скрипта PowerShell, который посещает сайт и входит в систему.Весь веб-сайт находится за входом в систему.
Мой веб-сайт использует Azure AD B2C для проверки подлинности и был настроен с помощью руководства для начинающих от Microsoft: https://github.com/AzureADQuickStarts/B2C-WebApp-OpenIdConnect-DotNet
При входе в систему через браузер все работаеткак и ожидалось.
Мой текущий код для входа в систему выглядит следующим образом:
$session = Get-AuthenticatedSession $DomainName $config.authenticationDetails $UserName $Password
Function Get-AuthenticatedSession {
param(
[Parameter(Mandatory=$true,Position=0)]
[string]$domainName,
[Parameter(Mandatory=$true,Position=1)]
[object]$authenticationDetails,
[Parameter(Mandatory=$true,Position=2)]
[string]$username,
[Parameter(Mandatory=$true,Position=3)]
[string]$password
)
# Login - to create web session with authorisation cookies
$loginPage = "$domainName$($authenticationDetails.url)"
Write-Host "Getting Login Page $loginPage"
try{
$login = Invoke-WebRequest $loginPage -SessionVariable webSession -TimeoutSec 600 -UseBasicParsing
}catch{
Write-Host "First attempt failed with $($_.Exception.Response.StatusCode.value__) , retrying"
$login = Invoke-WebRequest $loginPage -SessionVariable webSession -TimeoutSec 600 -UseBasicParsing
}
Write-Host "Got Login Page, filling out form"
$fields = @{}
$fields["$($authenticationDetails.userNameField)"] = $username
$fields["$($authenticationDetails.passwordField)"] = $password
Write-Host "logging in"
$request = Invoke-WebRequest -Uri $loginPage -WebSession $webSession -Method POST -Body $form -TimeoutSec 600| Out-Null
$webSession
Write-Host "login done"
}
Это мой код для запроса страницы за входом в систему, которая запускается впоследствии:
foreach ($page in $config.urls) {
RequestPage "$DomainName$($page.url)" $session
}
Function RequestPage {
param(
[Parameter(Mandatory=$true,Position=0)]
[string]$url,
[Parameter(Mandatory=$true,Position=1)]
[object]$webSession
)
Get-Date
Write-Host "requesting $url ..."
try { $request = Invoke-WebRequest $url -WebSession $webSession -TimeoutSec 60000 -UseBasicParsing} catch {
$status = $_.Exception.Response.StatusCode.Value__
if ($status -ne 200){
Write-Host "ERROR Something went wrong while requesting $url" -foregroundcolor red
}
}
Write-Host $request
Get-Date
Write-Host "Done"
Write-Host ""
}
Проблема в том, что сценарий, похоже, неправильно выполняет вход в систему.Всякий раз, когда я запрашиваю страницу за входом в систему, я всегда получаю html страницы входа в систему.Любая помощь очень ценится!
РЕДАКТИРОВАТЬ - Кажется, что на странице нет элемента FORM - дох!Фактический вход - это кнопка-элемент с прикрепленным событием щелчка JavaScript.Страница входа размещена на сервере Microsoft, поэтому я мало контролирую элементы DOM:
<div class="buttons">
<button id="next" tabindex="1">Sign in</button>
</div>
Поэтому я думаю, что мой вопрос заключается в том, можно ли вызвать нажатие кнопки с помощью PowerShell?Когда я также хочу, чтобы скрипт выполнялся на моем сервере сборки, где IE может быть недоступен