onkeldave
Goto Top

Aktuelle Java JRE 32 und 64 Bit exe Download Script

Guten Tag Experts,

probiere verzweifelt über Batch, Java Script, cURL und wget die aktuellste JRE.exe herunterzuladen! face-sad

Das Problem: es gibt eine BundleID zum Download der sich bei jeder Version wieder ändert, zusätzlich muss man mit wget z.b. auch noch "--no-cookies --no-check-certificate" als parameter mitgeben, damit er sie überhaupt runterläd.


Am liebsten hättte ich die beiden Downloads von der java Seite:
http://www.java.com/en/download/manual.jsp


Der windows x86 und x64 EXE Download.


Download Links wären:
http://javadl.sun.com/webapps/download/AutoDL?BundleId=81819
http://javadl.sun.com/webapps/download/AutoDL?BundleId=81821


da sieht man auchmal die nummern die sich immer ändern nach jeder Version und so macht es ja keinen sinn ein script in irgendeine Aufgabenplanung/Crontab zu schmeißen, sodass er nach einer prüfung der version, sich die neusten zwei herunterläd!

Könnte mir jemand ein paar Zeilen editieren, die einfach nur die AKTUELLSTEN beiden JRE.EXE DAteien runterläd ? Ich wäre zu absolutem DANK verpflichtet!!!!

mfg dave

Content-Key: 222295

Url: https://administrator.de/contentid/222295

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: colinardo
colinardo 18.11.2013 aktualisiert um 21:55:00 Uhr
Goto Top
Hallo dave,
habe mir die Seite gerade mal angesehen und dir das folgende Bash-Script geschrieben. Es extrahiert die Links mit curl aus der Seite und lädt sie mit wget herunter und speichert die Files im selben Verzeichnis wie das Script. Der Trick um an den Link der 64-Bit Variante zu kommen besteht darin der Webseite von Oracle via USER_AGENT mitzuteilen das das Betriebssystem 64Bit fähig ist, ansonsten erscheint der Link für die 64-Bit Version nicht auf der Seite.
#!/bin/bash
_SITE=$(curl -A 'WOW64' -s "http://www.java.com/de/download/manual.jsp")  
_LINK32=$(echo "$_SITE" | grep -m 1 'Download der Java-Software für Windows Offline' | cut -d '"' -f4)  
_LINK64=$(echo "$_SITE" | grep -m 1 'Download der Java-Software für Windows (64-Bit)' | cut -d '"' -f4)  

#Check for valid Download URL
echo "$_LINK32" | grep -Eq '^http://.*BundleId=[0-9]+$'  
if [ $? -eq 0 ] ;then
	#Download 32-Bit Version
	wget --no-cookies --no-check-certificate -O 'java32bit.exe' "$_LINK32"	  
else
	echo 'Download-Link 32-Bit Version defekt.'  
fi
#Check for valid Download URL
echo "$_LINK64" | grep -Eq '^http://.*BundleId=[0-9]+$'  
if [ $? -eq 0 ] ;then
	#Download 64-Bit Version
	wget --no-cookies --no-check-certificate -O 'java64bit.exe' "$_LINK64"	  
else
	echo 'Download-Link 64-Bit-Version defekt.'  
fi
Zu beachten gilt es natürlich, dass wenn sich die Seite grundlegend ändert, auch die Links sehr wahrscheinlich nicht mehr extrahiert werden können, aber das ist ein Grundsätzliches Problem beim Extrahieren von Content aus HTML-Seiten.

Grüße Uwe
Mitglied: onkeldave
onkeldave 19.11.2013 aktualisiert um 09:31:34 Uhr
Goto Top
hi uwe sauberer arbeit, ist aber ein linux script und wir haben hier nur windows rechner, insofern schwerst für mich einzupflegen ;) oder versteht die windows powershell sowas inzwischen ? mfg dave
Mitglied: colinardo
colinardo 19.11.2013 aktualisiert um 09:34:35 Uhr
Goto Top
Zitat von @onkeldave:

hi uwe sauberer arbeit, ist aber ein linux script und wir haben hier nur windows rechner, insofern schwerst für mich
einzupflegen ;) oder versteht die windows powershell sowas inzwischen ? mfg dave
wenn du hier mit Begriffen wie curl, wget, crontab hantierst was soll ich da denken ?
lässt sich aber genau so simpel auf VBS oder Powershell portieren.
Mitglied: onkeldave
onkeldave 19.11.2013 aktualisiert um 09:39:59 Uhr
Goto Top
warum sollte ich unter linux eine windows EXE datei herunterladen face-smile (cURL und wget gibt es auch für windows und crontab hab ich nur erwähnt weil aufgabenplanung unter windows kennt doch niemand)

naja wie auch immer, ist jemand in der lage, mir das auf powershell zu konvertieren ? die vorarbeit von uwe ist ja schonmal der hit! danke aufjedenfalll dafür - gute arbeit!

fetten gruß dave
Mitglied: colinardo
colinardo 19.11.2013 um 09:40:06 Uhr
Goto Top
Zitat von @onkeldave:
naja wie auch immer, ist jemand in der lage, mir das auf powershell zu konvertieren ?
melde mich später dazu nochmal face-wink
Mitglied: colinardo
colinardo 19.11.2013, aktualisiert am 20.11.2013 um 13:35:55 Uhr
Goto Top
Zitat von @onkeldave:
warum sollte ich unter linux eine windows EXE datei herunterladen
Wenns nur ein Server ist der das für Windows-Clients im Hintergrund erledigt ... kann das schon vorkommen.
naja wie auch immer, ist jemand in der lage, mir das auf powershell zu konvertieren ? die vorarbeit von uwe ist ja
guckst du hier: (Pfade für die Files in Zeile 2 und 3 noch anpassen)
(Script Stand: 19.11.2013 / muss angepasst werden wenn Qracle die Seite grundlegend umbaut)
#Download-Pfade für die Dateien
$targetPathJava32 = "C:\java32bit.exe"  
$targetPathJava64 = "C:\java64bit.exe"  

#Funktion zum einfacheren Extrahieren via Regular Expressions mit Group-Matching
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}

#Webseite mit WebClient passendem Encoding und 64-Bit User-Agent herunterladen
$net = New-Object System.Net.WebClient
$net.Encoding = [System.Text.Encoding]::UTF8
$net.Headers.Add("User-Agent","WOW64")  
$net.Headers.Add("Accept-Language","de-de")  
$content = $net.DownloadString("http://www.java.com/de/download/manual.jsp")  

#Downloadlinks aus dem Quelltext extrahieren
$link32bit = $content | Get-Matches '<a title="Download der Java-Software für Windows Offline" href="([^>\"]+)">' 1 | select -First 1  
$link64bit = $content | Get-Matches '<a title="Download der Java-Software für Windows \(64-Bit\)" href="([^>\"]+)">' 1 | select -First 1  

#Dateien herunteladen wenn die Links erfolgreich extrahiert wurden
if ($link32bit -ne ""){$net.DownloadFile($link32bit,$targetPathJava32)}  
if ($link64bit -ne ""){$net.DownloadFile($link64bit,$targetPathJava64)}  
back-to-topErgänzung (Zusätzliche Variante ab Powershell 3.0):
$targetPathJava32 = "c:\java32bit.exe"  
$targetPathJava64 = "c:\java64bit.exe"  
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}
$content = (Invoke-WebRequest "http://www.java.com/de/download/manual.jsp" -UserAgent "WOW64" -Headers @{"Accept-Language"="de-de"}).Content  
$link32bit = $content | Get-Matches '<a title="Download der Java-Software für Windows Offline" href="([^>\"]+)">' 1 | select -First 1  
$link64bit = $content | Get-Matches '<a title="Download der Java-Software für Windows \(64-Bit\)" href="([^>\"]+)">' 1 | select -First 1  
if ($link32bit -ne ""){invoke-webrequest $link32bit -OutFile $targetPathJava32}  
if ($link64bit -ne ""){invoke-webrequest $link64bit -OutFile $targetPathJava64}  
Grüße Uwe
Mitglied: onkeldave
onkeldave 19.11.2013 um 11:25:47 Uhr
Goto Top
cool du bist ja schnell uwe. danke dafür!

also ich habe den pfad zu wget editiert und gesehen das der ausgabe pfad mein c laufwerk ist - ist top!
es läuft auch fehlerfrei durch, nur downloaded er gar nichts leider.
internet explorer ist v. 11.09
java.com wird auf deutsch angezeigt
system 64bit

script in powershell ausgeführt - mach ich irgendwas falsch ?
Mitglied: onkeldave
onkeldave 19.11.2013 aktualisiert um 11:36:23 Uhr
Goto Top
danke funktioniert! best man of the day uwe! thank you very much!!! closed
Mitglied: colinardo
colinardo 19.11.2013 um 11:36:20 Uhr
Goto Top
Hier läufts einwandfrei ...starte das Script mal in einer Powershell mit Admin-Rechten, normalerweise kann man ins Root-Verzeichnis von C:\ nur mit Admin-Rechten schreiben, oder wähle ein anderes Ausgabeverzeichnis in dem du Schreibrechte hast.
Mitglied: onkeldave
onkeldave 19.11.2013 um 11:39:37 Uhr
Goto Top
eine mini frage hätte ich noch - kann man den output von wget ohne dateinamen angeben? also das die datei so heißt wie sie vom server kommt und nicht unbenannt wird ?
Mitglied: colinardo
colinardo 19.11.2013 aktualisiert um 12:32:52 Uhr
Goto Top
müsste mit dem Parameter -P C:\Pfad gehen, hatte damit aber in der Vergangenheit Probleme das an den Dateinamen dann ein haufen Schriott angehängt wurde. Dann müsste man den Schrott noch mit einem Rename in der Powershell abschneiden...
$wgetPath = "C:\PathTo\\wget.exe"  
$downloadPath = "C:\DownloadPfad"  
Start-Process -FilePath $wgetPath -ArgumentList "-P $downloadPath",$link32bit -Wait  
Start-Process -FilePath $wgetPath -ArgumentList "-P $downloadPath",$link32bit -Wait  
dir "$downloadPath\jre-*@*" | %{Rename-Item -Path $_.FullName -NewName $_.Name.Split("@")}  
Mitglied: onkeldave
onkeldave 20.11.2013 aktualisiert um 12:08:07 Uhr
Goto Top
hi männers, hoffe mir kann nochmal jemand schnell helfen.

also der code lässt sich problemlos auf einem windows 8.1 rechner mit:
ie 11.0
wget neuste version
powershell 4.0

ausführen

aber auf einem windows 2008 r2 mit:
ie 10
wget neuste version
powershell 2.0

meckert er:

Start-Process : Das Argument für den Parameter "ArgumentList" kann nicht überpr
üft werden. Das Argument ist NULL oder leer, oder ein Element der Argumentaufli
stung enthält einen NULL-Wert. Geben Sie eine Auflistung an, die keine NULL-Wer
te enthält, und führen Sie dann den Befehl erneut aus.
Bei C:\scripts\test.ps1:13 Zeichen:48

back-to-topStart-Process -FilePath $wgetPath -ArgumentList <<<< "--output-document=C:\S

cripts\java32bit.exe",$link32bit -Wait
+ CategoryInfo : InvalidData: (face-smile [Start-Process], ParameterBindi
ngValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power
Shell.Commands.StartProcessCommand

Start-Process : Das Argument für den Parameter "ArgumentList" kann nicht überpr
üft werden. Das Argument ist NULL oder leer, oder ein Element der Argumentaufli
stung enthält einen NULL-Wert. Geben Sie eine Auflistung an, die keine NULL-Wer
te enthält, und führen Sie dann den Befehl erneut aus.
Bei C:\scripts\test.ps1:14 Zeichen:48

back-to-topStart-Process -FilePath $wgetPath -ArgumentList <<<< "--output-document=C:\S

cripts\java64bit.exe",$link64bit -Wait
+ CategoryInfo : InvalidData: (face-smile [Start-Process], ParameterBindi
ngValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power
Shell.Commands.StartProcessCommand


hab schon recht viel ausprobiert, deshalb lande ich wieder bei euch, mit bitte um hilfestellung face-smile
probiert gänsefüßchen anders zu setzen, parameter -O auszuschreiben (--output-document="DATEI")
nix klappt leider
mach gerade mal ein update auf powershell 3.0


weis jemand rat?
Mitglied: onkeldave
onkeldave 20.11.2013 um 12:15:12 Uhr
Goto Top
powershell 3.0 bringt auch keinen erfolg face-sad
Mitglied: colinardo
colinardo 20.11.2013 aktualisiert um 13:18:58 Uhr
Goto Top
Hallo dave,
sehr wahrscheinlich ist der jeweilige Link leer und deshalb kommt es zu der Fehlermeldung, d.h. der Fehler muss schon vorher beim extrahieren der Links via IE aufgetreten sein.
Den IE zu benutzen ist eigentlich nicht sehr zuverlässig, besonders wenn man den Code auf andere Systeme portiert, da muss dann immer erst getestet werden.
Wenn du schon Powershell 3.0 auf dem System hast kannst du die oben beschriebene Methode nutzen um die Dateien ohne Zusatztools nur mit der Pwershell runterzuladen:
$targetPathJava32 = "e:\java32bit.exe"  
$targetPathJava64 = "e:\java64bit.exe"  
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}
$content = (Invoke-WebRequest "http://www.java.com/de/download/manual.jsp" -UserAgent "WOW64" -Headers @{"Accept-Language"="de-de"}).Content  
$link32bit = $content | Get-Matches '<a title="Download der Java-Software für Windows Offline" href="([^>\"]+)">' 1 | select -First 1  
$link64bit = $content | Get-Matches '<a title="Download der Java-Software für Windows \(64-Bit\)" href="([^>\"]+)">' 1 | select -First 1  
if ($link32bit -ne ""){invoke-webrequest $link32bit -OutFile $targetPathJava32}  
if ($link64bit -ne ""){invoke-webrequest $link64bit -OutFile $targetPathJava64}  
Grüße Uwe

--edit-- habe die IE Version komplett (auch oben) rausgenommen und durch eine bessere die auch unter Powershell 2.0 funktioniert ersetzt.
Mitglied: onkeldave
onkeldave 20.11.2013 um 12:35:00 Uhr
Goto Top
wer ist mein held? ja richtig, uwe ist mein held! danke vielmals dafür! geht! schönen tag noch allerseits
Mitglied: colinardo
colinardo 20.11.2013 aktualisiert um 13:21:50 Uhr
Goto Top
nur zur Info: habe die Scripte noch ein klein wenig korrigiert, so dass auch wirklich nur die deutsche Seite abgerufen wird (Accept-Language Header)
Die IE Variante habe ich ganz gestrichen und durch eine Version die auch unter PS 2.0 funktioniert ersetzt (s. weiter oben)