Как войти на сайт с базовой аутентификацией с помощью 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]()
Ответы
Ответ 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