Download jdk with powershell

I am trying to download java jdk using powershell scripts as indicated in the link below

http://poshcode.org/4224

. Here, as the author pointed out, if I change the source url where the last jdk is present, that is.,

http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-windows-x64.exe

content does not load, only about 6 KB is downloaded. I have doubts whether the restriction on loading in powershell script is only 6 KB?

Here is the code:

$source = "http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-windows-i586.exe"
      $destination = "C:\Download\Java\jdk-7u60-windows-i586.exe"
      $client = new-object System.Net.WebClient
      $client.DownloadFile($source, $destination)
+4
source share
6 answers

When checking the session on the site following a cookie oracle draws attention: oraclelicense=accept-securebackup-cookie. With that in mind, you can run the following code:

$source = "http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-windows-i586.exe"
$destination = "C:\Download\Java\jdk-7u60-windows-i586.exe"
$client = new-object System.Net.WebClient 
$cookie = "oraclelicense=accept-securebackup-cookie"
$client.Headers.Add([System.Net.HttpRequestHeader]::Cookie, $cookie) 
$client.downloadFile($source, $destination)
+9

EDIT: : .

script . HTTP, FTP. , , , .

param(
    [Parameter(Mandatory=$true)]
    [String] $url,
    [Parameter(Mandatory=$false)]
    [String] $localFile = (Join-Path $pwd.Path $url.SubString($url.LastIndexOf('/'))) 
)

begin {
    $client = New-Object System.Net.WebClient
    $Global:downloadComplete = $false

    $eventDataComplete = Register-ObjectEvent $client DownloadFileCompleted `
        -SourceIdentifier WebClient.DownloadFileComplete `
        -Action {$Global:downloadComplete = $true}
    $eventDataProgress = Register-ObjectEvent $client DownloadProgressChanged `
        -SourceIdentifier WebClient.DownloadProgressChanged `
        -Action { $Global:DPCEventArgs = $EventArgs }    
}

process {
    Write-Progress -Activity 'Downloading file' -Status $url
    $client.DownloadFileAsync($url, $localFile)

    while (!($Global:downloadComplete)) {                
        $pc = $Global:DPCEventArgs.ProgressPercentage
        if ($pc -ne $null) {
            Write-Progress -Activity 'Downloading file' -Status $url -PercentComplete $pc
        }
    }

    Write-Progress -Activity 'Downloading file' -Status $url -Complete
}

end {
    Unregister-Event -SourceIdentifier WebClient.DownloadProgressChanged
    Unregister-Event -SourceIdentifier WebClient.DownloadFileComplete
    $client.Dispose()
    $Global:downloadComplete = $null
    $Global:DPCEventArgs = $null
    Remove-Variable client
    Remove-Variable eventDataComplete
    Remove-Variable eventDataProgress
    [GC]::Collect()    
}
+4

, , . @steve-coleman, , https http. $Response -UseBasicParsing Windows Server. , , :

$DownloadPageUri = 'http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html'
$JavaVersion = '8u192'

$Response = Invoke-WebRequest -Uri $DownloadPageUri -UseBasicParsing

$JreUri = @($Response.RawContent -split "'n" | ForEach-Object {If ($_ -imatch '"filepath":"(https://[^"]+)"') {$Matches[1]}} | Where-Object {$_ -like "*-$JavaVersion-windows-x64.tar.gz"})
If (-Not $JreUri.Count -eq 1) {
    throw ('Expected to retrieve only one URI but got {0}' -f $JreUri.Count)
}

If ($JreUri[0] -imatch '/([^/]+)$') {
    $JreFileName = $Matches[1]
}
$JreFileName = 'jre-windows-x64.tar.gz'

If (-Not (Test-Path -Path "$PSScriptRoot\$JreFileName") -Or -Not (Test-Path -Path "$PSScriptRoot\Java-$JavaVersion.tag")) {
    $Cookie  = New-Object -TypeName System.Net.Cookie
    $Cookie.Domain = 'oracle.com'
    $Cookie.Name   = 'oraclelicense'
    $Cookie.Value  = 'accept-securebackup-cookie'
    $Session = New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession
    $Session.Cookies.Add($Cookie)
    Invoke-WebRequest -Uri $JreUri[0] -WebSession $Session -OutFile "$PSScriptRoot\$JreFileName"
    New-Item -Path "$PSScriptRoot\Java-$JavaVersion.tag" -ItemType File | Out-Null
}

, YMMV, Oracle .

0

, JDK :

<# Config #>
$DownloadPageUri = 'https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html';
$JavaVersion = '8u201';

<# Build the WebSession containing the proper cookie 
   needed to auto-accept the license agreement. #>
$Cookie=New-Object -TypeName System.Net.Cookie; 
$Cookie.Domain='oracle.com';
$Cookie.Name='oraclelicense';
$Cookie.Value='accept-securebackup-cookie'; 
$Session= '
   New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession;
$Session.Cookies.Add($Cookie);

<# Fetch the proper Uri and filename from the webpage. #>
$JdkUri = (Invoke-WebRequest -Uri $DownloadPageUri -WebSession $Session -UseBasicParsing).RawContent '
    -split "'n" | ForEach-Object { '
        If ($_ -imatch '"filepath":"(https://[^"]+)"' { '
            $Matches[1] '
        } '
    } | Where-Object { '
        $_ -like "*-$JavaVersion-windows-x64.exe" '
    }[0];
If ($JdkUri -imatch '/([^/]+)$') { 
    $JdkFileName=$Matches[1];
}

<# Use a try/catch to catch the 302 moved temporarily 
   exception generated by oracle from the absance of
   AuthParam in the original URL, piping the exception's
   AbsoluteUri to a new request with AuthParam returned
   from Oracle servers.  (NEW!) #>

try { 
    Invoke-WebRequest -Uri $JdkUri -WebSession $Session -OutFile "$JdkFileName"
} catch { 
    $authparam_uri = $_.Exception.Response.Headers.Location.AbsoluteUri;
    Invoke-WebRequest -Uri $authparam_uri -WebSession $Session -OutFile "$JdkFileName"
} 

PowerShell 6.0 (, 2019!) -imatch. 302 : https://github.com/PowerShell/PowerShell/issues/2896 ( 302 fcabralpacheco Oracle!

8u201 Windows x64.

0

, SDK 8u211

<# Config #>
$DownloadPageUri = 'https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html';
$JavaVersion = '8u211';
<# Build the WebSession containing the proper cookie
   needed to auto-accept the license agreement. #>

$Cookie=New-Object -TypeName System.Net.Cookie;
$Cookie.Domain='oracle.com';
$Cookie.Name='oraclelicense';
$Cookie.Value='accept-securebackup-cookie';
$Session= '
   New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession;
$Session.Cookies.Add($Cookie);

# Fetch the proper Uri and filename from the webpage. #>
$i = 0
#echo $i
#$rc = (Invoke-WebRequest -Uri $DownloadPageUri -WebSession $Session     -UseBasicParsing).RawContent
#echo $rc >> Oracle.html
#-split "'n" | ForEach-Object { '
$JdkUri = (Invoke-WebRequest -Uri $DownloadPageUri -WebSession $Session -UseBasicParsing).RawContent '
-split '\r?\n' | ForEach-Object { '
    #echo "$i : $_" >> Oracle.html
    #echo "$i"
    #$i++
    If ($_ -imatch '"filepath":"(https://[^"]+)"') { '
        $Matches[1] '
    } '
} | Where-Object { '
    $_ -like "*-$JavaVersion-windows-x64.exe" '
}[0];
If ($JdkUri -imatch '/([^/]+)$') {
    $JdkFileName=$Matches[1];
}
echo "JdkUri: $JdkUri" >> out.txt

<# Use a try/catch to catch the 302 moved temporarily
   exception generated by oracle from the absance of
   AuthParam in the original URL, piping the exception's
   AbsoluteUri to a new request with AuthParam returned
   from Oracle servers.  (NEW!) #>

try {
    echo "In the try" >> out.txt
    Invoke-WebRequest -Uri $JdkUri -WebSession $Session -OutFile "$JdkFileName"
} catch {
    echo "In the catch" >> out.txt
    $authparam_uri = $_.Exception.Response.Headers.Location.AbsoluteUri;
    Invoke-WebRequest -Uri $authparam_uri -WebSession $Session -OutFile "$JdkFileName"
}

-split " n" | ForEach-Object { n" | ForEach-Object { to -split '\ r?\N' | ForEach-Object {'

And the line If ($ _ -imatch '"filepath": "( https: // [ ^"] +) "' {to If ($_ -imatch '"filepath":"(https://[^"]+)"') {

But in the jkd-8u211-windows-x64.exe file, I see

<html>
<script language="javascript" type="text/javascript">
function submitForm()
{
    var hash = location.hash;
    if (hash) {
        if(hash.indexOf("#") == -1){
            hash="#"+hash
        }
        document.myForm.action = document.myForm.action+hash;
    }
    document.myForm.submit();
}
</script><head><base target="_self"></head><body onLoad="submitForm()"><noscript>       <p>JavaScript is required. Enable JavaScript to use OAM Server.</p></noscript><form   action="https://login.oracle.com/mysso/signon.jsp" method="post" name="myForm"> <!------------ DO NOT REMOVE -------------><!----- loginform renderBrowserView -----><!-- Required for SmartView Integration --><input type="hidden" name="bmctx" value="05C65B855F507509F2A50E4187F746B908003F815E8CAC65124394831AC5D9EF"><input type="hidden" name="contextType" value="external"><input type="hidden" name="username" value="string"><input type="hidden" name="contextValue" value="%2Foam"><input type="hidden" name="password" value="secure_string"><input type="hidden" name="challenge_url" value="https%3A%2F%2Flogin.oracle.com%2Fmysso%2Fsignon.jsp"><input type="hidden" name="request_id" value="-7095362132919578964"><input type="hidden" name="authn_try_count" value="0"><input type="hidden" name="OAM_REQ" value="VERSION_4~FWMjicP9PEQpljiEhsObqw9ylPjCAidBVTTJxhmD1hxQnGA4pyWKyCqsJWbqRCHi7qV9ZGSvNoA5t9c33sgIg2B%2bVMyE%2b7Ev3v%2f0UWTE5TDtvGOxisL8d7gDA5piF4HZHubed6GfNVCktpGfz0y7KW0roRz3%2b58adfBEomJffDOl1UAkCDbV%2b7712R6CjE6nfODUMJTFUJ6nc9Zq6%2fuooydHQx9GjTeD6RBSlDo2L2b0KDi5g1exggoqrUMintE3QRbymUgvxkJyVAoxC%2bo8xLDF4EOICI0vkYnovHUNN%2bNoiQLGWXv1ryOuFy9FIebX%2bA5uxiDbulaRSDQcGO1LefWYF%2bBP7Vo3wRcNb%2bgc8J9%2fRjGVlKQSETLkUXd%2fo0U7cEPFSrq1qOmE6B7yKkB3zFnIsxHELMwdhVD5WJ95xebDem9xlhv61ImKJH3JdrnnDYZ3e3S1v90epLpFQyG1BExZxc%2fVLQZt%2bAexfGNstpqmlCFnfuC4Xudh0omOLAz5ZCdeWReNh0rC%2f0jXLEAkq6DghomBCNI5pGVKH1CVgb13HZOS%2boOuCaz4nw%2fAkkS949FW8Mzj0P9Cll7AlbTwfLuWnc%2bY8r%2f4bKD7X4WqVo%2f%2bcuS43eTIg%2fxPsoEIedsoixUcnZAfChgbZP%2fJPaLEinf0iR0G%2fy9IzTwPiIx8u6NZmk7Uec6GcGH3q4%2b9sI6D3mcBFJQIAfIxE89v9Nu5%2f62tDAIhD8I4%2fNfwC2uhixRGTHwLA7Fzc5qXRJ7JpaI5ogDbko%2fiSjIajClXUzIwTICAuzZvSOk8uAJfQQusjDVLVdEpVphg3fujGGcWgyvko%2bqQadGQcDWAxxWFMihNQRFpFeJTPaGVFnJfwy6M0tA3KA8HS%2bTA4rTinZyh04Tm1skPHNKi8VASeNSU5xEzdVa%2fKhJhjV4SvNyCwl3gIT%2ba%2b16OFrn3zCSy%2bC4sljmU9zJRH%2f3Bcj8JWnoKIuw51uh6k7OCt7NDoplaAj9YujMm%2bPGyicQv2mPe8vfl1VH9KyLuOYuQERuNNdA%2bdwIXBnKxA3ySClPikrgwRjTRO0bKjBeyDMIjfi4UwNNwb6Mi8K2QYW8Ydt0yJvLnJxLx0JviP1p8PqxrlAMNvHcle04%2bDN1ahBSxYsVvt3fbYkN0KlySSiGyhrixoPVkZR2Rhbkfm8o352YKaibkKIFPyHmTGCGmhr8kgH87qc1uIV7YXymRHfEWej2ZEFIvPEjj8M7%2fCllJ1%2fVEzj%2f1oHvBaPJKsyKt2BguiTnvJ47k9ijEhKluLpBvY5i7dJdvhlzziY1sQ8Iik42PNqVzVL8WIIe6qttdZfl6Hbmm9ZDJDRQAkeFNmWZ4aSicSFZzoEIRB5sa%2b9nSmIHEgE9umTJAqhsiEBeEYtx6quE6BISxCXQQXBIZEwLQ7Dsx1qRgqrIDN2EwjBTO5S9A1JkcR089pnkcHbZUmlSnohyhwizYAegk5te78cq59dVl6e0QyOBzThP0hNrMitYe3KW7yJA5zcqNAqMEsuFDLmviNeKKKCcFlpw4l8H%2fMinEt%2bjM0AuDStGxf1ve3bzkWTtu6GLjGQFCf4Zlq7Q%2f12eMCype4lCnFwL8OA7J7LakMUK8miUiiEgJDfcLsRYDVa4amcR6uUo2E3GueUa4KXXH6XZQg%2fvH6JmzvP%2bLIKx%2fyMWf6JuKdi6w6P34VTBPLi1o9rQVTeIMQB0NsvQWowWcZEm1eGLC1Q%2fVJFMUHTCF9S75hL%2bYSve%2blE2JKf4Fbxp%2fAEGsuHmfRNu8lWHzaNuuFRZwl0mt8OnnmPAhOYpb1fvqkGLQfFRRYF1H7S1zFcTGeFalXa9FeuAQ31xglHgoXYni6TJOSQWbKAEiyh6YjwPza2U0hcaS%2fLbJwblHbhx8dko3My7kED75iKKmfUsvWO%2fxE93ngbP%2bNC8vs7KVzKyJhoKamHYykXfqWCWlCAz%2fyzo2GgU1ZAIdTHQOrysMnTIZxQvm9oOK8egdTbrweyHjsLYNGvA8LbmutI8%2fbtAD5BS9IE02qL2YtmI3nT39srKW%2b8JEP727dtLDGPaFJGDmfszhXZu1elSKEOUa62O8QoIjt5znJaVfJgh3sNrvj6VgGj3WGZf5EVMeD6LUdrQEtv8G3ZIkL1p%2f3qBSlgDjEPjDcTUJtEYNjuly7FNyBq2ZEgwvIjXIB8Q8nId%2b1QPOygTfkM5gqFlK2tG0sRpZEIh6J9Ov1IsgKBTBvfGvGuwI3REk2WXMkt78l7JrS3zvQoXpbM4e724JosN7LnrLQ%2bxn%2f6Ofy4RGNDza9FpGkcXea9%2b5%2fnNEKDNaYl3hZiTS2YxYTDFSKkotkadA3BJBse9dMF1cC5bj3IKgiNrTgSpHOvZbIEVi7bRJg7x66lzWWuellSEd%2bZYpIdxdBqUGrF7KehTh%2fHsjG5T5678e%2fuT8Uvm9S7bmE6xY3tBlQ2aO5FKWIA%3d%3d"><input type="hidden" name="locale" value="en"><input type="hidden" name="resource_url" value="https%253A%252F%252Fedelivery.oracle.com%252Fakam%252Fotn%252Fjava%252Fjdk%252F8u211-b12%252F478a62b7d4e34b78b671c754eaaf38ab%252Fjdk-8u211-windows-x64.exe"></form></body>    </html>

Not sure what to do next.

0
source

I got it here and all the credits go to him .... http://dille.name/blog/2016/06/21/running-minecraft-in-a-windows-container-using-docker/

https://github.com/nicholasdille/docker

It works and downloads Java files.

$DownloadPageUri = 'http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html'
$JavaVersion = '8u172'

$Response = Invoke-WebRequest -Uri $DownloadPageUri

$JreUri = @($Response.RawContent -split "'n" | ForEach-Object {If ($_ -imatch '"filepath":"(http://[^"]+)"') {$Matches[1]}} | Where-Object {$_ -like "*-$JavaVersion-windows-x64.tar.gz"})
If (-Not $JreUri.Count -eq 1) {
    throw ('Expected to retrieve only one URI but got {0}' -f $JreUri.Count)
}

If ($JreUri[0] -imatch '/([^/]+)$') {
    $JreFileName = $Matches[1]
}
$JreFileName = 'jre-windows-x64.tar.gz'

If (-Not (Test-Path -Path "$PSScriptRoot\$JreFileName") -Or -Not (Test-Path -Path "$PSScriptRoot\Java-$JavaVersion.tag")) {
    $Cookie  = New-Object -TypeName System.Net.Cookie
    $Cookie.Domain = 'oracle.com'
    $Cookie.Name   = 'oraclelicense'
    $Cookie.Value  = 'accept-securebackup-cookie'
    $Session = New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession
    $Session.Cookies.Add($Cookie)
    Invoke-WebRequest -Uri $JreUri[0] -WebSession $Session -OutFile "$PSScriptRoot\$JreFileName"
    New-Item -Path "$PSScriptRoot\Java-$JavaVersion.tag" -ItemType File | Out-Null
}
-1
source

Source: https://habr.com/ru/post/1546133/


All Articles