Descargando jdk usando powershell

Estoy tratando de descargar el jdk de Java usando scripts de PowerShell como se indica en el siguiente enlace

http://poshcode.org/4224

. Aquí, como ha especificado el autor, si cambio la URL de origen donde está presente el último jdk, es decir,

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

el contenido no se carga, solo se descargan unos 6 KB. Tengo una duda, si el límite de descarga en el script de PowerShell es de solo 6 KB.

Aquí está el código:

$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)
Respuesta 1

EDITAR: esta es la razón de su problema: no puede descargar directamente el archivo sin aceptar los términos anteriores.

Estoy usando el siguiente script para descargar archivos. Funciona tanto con HTTP como con FTP. Puede ser un poco exagerado para su tarea porque también muestra el progreso de la descarga, pero puede recortarlo hasta que se ajuste a sus necesidades.

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()    
}
Respuesta: 2

Después de necesitar este script para un instalador de plataforma que requirió el JDK como dependencia:

<# 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's 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"
} 

Funciona en PowerShell 6.0 (¡Hola, 2019!) Se requirió una reparación menor de la expresión regular y la forma en que se realizó el escaneo de línea de imitación. La solución para seguir los redireccionamientos 302 se encuentra aquí: https://github.com/PowerShell/PowerShell/issues/2896 (¡la solución de redireccionamiento 302 de fcabralpacheco se readapta para que las descargas de Oracle vuelvan a funcionar!

Esta solución descarga 8u201 para Windows x64 automáticamente.

Respuesta: 3

Modifiqué la respuesta de Robert Smith de la siguiente manera para obtener 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's 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"
}

Tuve que cambiar la línea -split " n" | ForEach-Object { a -split '\ r? \ N' | ForEach-Object {`

Y la línea If ($ _ -imatch '"filepath": "( https: // [ ^"] +) "' { to If ($_ -imatch '"filepath":"(https://[^"]+)"') {

Pero en el archivo jkd-8u211-windows-x64.exe veo

<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>

No estás seguro de qué hacer después. También se agregó un poco de jazz de depuración como #echo "$ i: $ _" >> Oracle.html ...

Respuesta: 4

en Java simple, puedo escribir la clase P {static <A> A id (A x) {return x; } static int y = P. <Integer> id (8); barra de cadena estática = P. <String> id ("foo"); } en jshell, puedo ...

La configuración es la siguiente: // llame a doA varias veces, llame a doB una vez usando algún valor que depende de doA () verificar (mockedThing) .doB (eq (mockedThing.doA ())); // eliminar eq () no cambia nada Obviamente, ...

Tengo un JSONObject que contiene algunos JSONObjects de la siguiente manera: "estadísticas": {"John": {"Edad": "22", "estado": "casado"}, "Ross": {"Edad": "34" , "estado": "...

Usando Fedora 12: la tubería mkfifo crea una tubería. Cuando uso el siguiente código para intentar abrir una secuencia de entrada contra la tubería con nombre que bloquea en el constructor FileInputStream a menos que cree un escritor ...