Как войти на сайт с базовой аутентификацией с помощью Powershell - программирование
Подтвердить что ты не робот

Как войти на сайт с базовой аутентификацией с помощью Powershell

Я пытаюсь использовать PowerShell для входа на сайт и загрузки файла.

Однако я не могу заставить PS правильно передать учетные данные.

Вот мой PS:

$webclient = new-object System.Net.WebClient
$webclient.Credentials = new-object System.Net.NetworkCredential("username","password","domain")
$webpage = $webclient.DownloadString("url goes here")

Вот окно регистрации, которое я получаю, когда попадаю на сайт в IE: enter image description here

4b9b3361

Ответ 1

Вот что я должен работать. Я считаю, что ключевой частью является "Basic" в CredentialCache

$webclient = new-object System.Net.WebClient
$credCache = new-object System.Net.CredentialCache
$creds = new-object System.Net.NetworkCredential("un","pw")
$credCache.Add("url", "Basic", $creds)
$webclient.Credentials = $credCache
$webpage = $webclient.DownloadString("url")

Ответ 2

Если вы хотите использовать Invoke-WebRequest вместо WebClient:

$securepassword = ConvertTo-SecureString "password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential("username", $securepassword)
Invoke-WebRequest -Uri "url goes here" -Credential $credentials

Я основал код эту статью в блоге Дугласа Тарра. Обратите внимание, что в статье имя пользователя и пароль сбиты с толку, но я исправил их в своем примере.

Ответ 3

По какой-то причине я не смог заставить любое из этих решений работать (используя PowerShell 5 на Win 10). Возможно, это была очевидная, безумная ситуация, поскольку я часто не использую PS. Но FWIW это то, как я смог заставить его работать, вручную настроив заголовок авторизации.

$url = "{url here}"
$username = "{username here}"
$password = "{password here}"

$b = [System.Text.Encoding]::UTF8.GetBytes($username + ":" + $password)
$p = [System.Convert]::ToBase64String($b)

$creds = "Basic " + $p

Invoke-WebRequest -Uri $url -Headers @{"Authorization"=$creds} 

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

Ответ 4

Вот как я это сделал,

сначала создан файл download.ps1, содержащий файл powershell script,

Затем запустите этот script через пакетный файл:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File  C:\Users\SS\Desktop\download.ps1

это PowerShell script:

    $Username = 'Domain\user'
    $Password = 'pass'
    $Url = "http://google.com/target/filename.zip"
    $Path = "C:\path\to\downloaded\file\filename.zip"
    $WebClient = New-Object System.Net.WebClient
    $WebClient.Credentials = New-Object System.Net.Networkcredential($Username, $Password)
    $WebClient.DownloadFile( $url, $path )

Ответ 5

Что вы должны работать (попробуйте код с некоторыми другими сайтами). Как правило, неверное имя пользователя/пароль приведет к сбою кода с ошибкой 401 (а не окном входа в систему Windows). Проблема может быть связана с веб-сайтом, требующим Интегрированная проверка подлинности Windows