0

我需要一个脚本,将某个文件夹及其所有子文件夹+文件从网络服务器下载到我的电脑。它需要在powershell中。我搜索了一下,发现了这个:

Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip

当我尝试运行它时出现此错误。但我不知道如何通过它传递用户名和密码。如果有人可以帮助我,将不胜感激!另外我如何指定它应该保存到的文件夹?提前致谢

错误

4

2 回答 2

0

跟进我的评论。

我问这个问题是因为有些网站要求您在证书演示中具体说明,而不是仅仅一串东西。例如:

$credentials = Get-Credential

$webServerUrl               = 'http://SomeWebSite'
$r                          = Invoke-WebRequest $webServerUrl -SessionVariable my_session
$form                       = $r.Forms[0]
$form.fields['Username']    = $credentials.GetNetworkCredential().UserName
$form.fields['Password']    = $credentials.GetNetworkCredential().Password

$InvokeWebRequestSplat = @{
    Uri        = $($webServerUrl + $form.Action) 
    WebSession = $my_session 
    Method     = 'GET '
    Body       = $form.Fields
}
$r = Invoke-WebRequest @InvokeWebRequestSplat

更新

评论的后续行动。这是使用 IE 和 PowerShell 进行站点自动化。

# Scrape the site to find form data
$url = 'https://pwpush.com'
($FormElements = Invoke-WebRequest -Uri $url -SessionVariable fe)  
($Form = $FormElements.Forms[0]) | Format-List -Force
$Form | Get-Member
$Form.Fields

# Use the info on the site
$IE = New-Object -ComObject "InternetExplorer.Application"

$FormElementsequestURI = "https://pwpush.com"
$Password = "password_payload"
$SubmitButton = "submit"

$IE.Visible = $true
$IE.Silent = $true
$IE.Navigate($FormElementsequestURI)
While ($IE.Busy) {
    Start-Sleep -Milliseconds 100
}

$Doc = $IE.Document
$Doc.getElementsByTagName("input") | ForEach-Object {
    if ($_.id -ne $null){
        if ($_.id.contains($SubmitButton)) {$SubmitButton = $_}
        if ($_.id.contains($Password)) {$Password = $_}
    }
}

$Password.value = "1234"
$SubmitButton.click()

Invoke-WebRequest 是 Powershell 的 curl 版本。它的别名甚至被命名为 curl。

因此,在 IVR 用例中,您真正需要做的只是 Facebook 和 Linkedin 示例:

$cred  = Get-Credential
$login = Invoke-WebRequest 'facebook.com/login.php' -SessionVariable 'fb'
$login.Forms[0].Fields.email = $cred.UserName
$login.Forms[0].Fields.pass = $cred.GetNetworkCredential().Password
$mainPage = Invoke-WebRequest $login.Forms[0].Action -WebSession $fb -Body $login -Method Post 

$cred = Get-Credential
$login = Invoke-WebRequest 'https://www.linkedin.com/uas/login?goback=&trk=hb_signin' -SessionVariable 'li'
$login.Forms[0].Fields.email = $cred.UserName
$login.Forms[0].Fields.pass = $cred.GetNetworkCredential().Password
$mainPage = Invoke-WebRequest $login.Forms[0].Action -WebSession $LI -Body $login -Method Post 

然而,请注意我在 FB/LI 登录页面上,在尝试此操作之前我需要知道它甚至存在。请注意,这是旧代码,我很长时间没有使用过,而且我没有 FB 帐户。我把这个传给了做过的人。

于 2020-08-05T17:31:12.323 回答
0
$cred = Get-Credential
Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip -Credential $cred
于 2020-08-05T14:02:26.083 回答