Kako preveriti različico, nadgraditi ali odstraniti Java s programom PowerShell?

Java Runtime Environmentmen (JRE) se pogosto uporablja za zagon različnih podjetniških aplikacij, napisanih v javi. Vendar nekateri programi zahtevajo, da se zažene določena različica Jave in v drugih različicah morda ne bo delovala pravilno. V tem članku bomo pogledali, kako ugotoviti, katere različice Java so nameščene v računalnikih uporabnikov v vašem omrežju, pa tudi, kako odstraniti ali posodobiti različico JRE z uporabo PowerShell.

Vsebina:

  • Kako najti nameščeno različico Jave v sistemu Windows?
  • Kako najti različico Java iz PowerShell-a?
  • PowerShell: Prenesite različico Java v oddaljene računalnike
  • Skript PowerShell za odstranitev vseh različic Jave
  • Kako prenesti namestitev Java JRE s programom PowerShell?

Kako najti nameščeno različico Jave v sistemu Windows?

Če vtipkate ', lahko v računalnik namestite številko različice Jave.java'v iskalnem polju Windows 10 in zaženite programček Java.

Odpre se okno "O Javi", ki prikazuje trenutno različico JRE. V mojem primeru je tako Posodobitev 231 različice Java različice 8 (sestavite 1.8.0_231-b11). Bodite pozorni na vrednost sestave JRE. V vseh različicah Jave je označen začetek 1, nato glavna številka različice JRE (imam to 8), nato številko posodobitve.

Trenutno različico Jave lahko najdete tudi v podoknu "Programi in komponente Windows" (Win + R -> appwiz.cpl).

V ukazni vrstici lahko prikažete trenutno različico Jave. Zaženite cmd.exe in zaženite ukaz:

java -verzija

java različica "1.8.0_231" Java (TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot (TM) odjemalec VM (graditi 25.231-b11, mešani način) 

Kako najti različico Java iz PowerShell-a?

Različico Java v računalniku najdete s programom PowerShell. Preprosto lahko preverite različico izvršljive datoteke java.exe (pot do nje je zapisana v spremenljivke okolja, ko namestite JRE SE na računalnik). Izdelali bomo različico datoteke Java:

Get-Command Java | Izberite-različica predmeta

Prikažete lahko podrobne informacije o različici, posodobitvi in ​​izdaji Jave:

Get-Command java | Izberite-Predmet-Razširi različico lastnosti

Revizija večjih manjših zgradb ----- ----- ----- -------- 8 0 2310 11 

Če morate za uporabo v skripti dobiti vrednost niza različice Java, uporabite:

(Get-Command java | Select-Object -ExpandProperty Version) .tostring ()

Različico Java lahko najdete tudi v razredu WMI, ki vsebuje seznam nameščenih programov v sistemu Windows:

Get-WmiObject -Class Win32_Product -Filter "Ime, kot je% Java%"

IdentificationNumber: 26A24AE4-039D-4CA4-87B4-2F32180231F0 Ime: Java 8 Update 231 Ponudnik: Oracle Corporation Različica: 8.0.2310.11 Naziv: Posodobitev Java 8 231 IdentificationNumber: 4A03706F-666A-4037-7777-5F2748764D10 Ime: Prodajalec samodejnega posodabljanja: Oracle Corporation Različica: 2.8.231.11 Napis: Java Auto Updater

Pridobljene ID-je lahko v prihodnosti uporabimo za pravilno odstranitev JRE.

Če želite prikazati samo različice Java in morate izključiti Java Auto Updater, uporabite ukaz:

Get-WmiObject -Class Win32_Product -Filter "Ime, kot je"% Java% "in ne Ime, kot je"% Java Auto Updater% "" | Izberite Razširi različico

PowerShell: Prenesite različico Java v oddaljene računalnike

Če želite vnesti seznam različic Java, ki se uporabljajo v računalnikih ali strežnikih v vaši domeni, lahko uporabite naslednji skript PowerShell. Ta skript lahko strežnik na daljavo poišče s seznama, ki je določen ročno, naloži seznam iz besedilne datoteke. Seznam strežnikov ali računalnikov iz AD lahko dobite tudi z ukazno ploščo Get-ADComputer iz modula RSAT-AD-PowerShell.
# Skript PowerShell za preverjanje različice Java SE (JRE) na oddaljenih računalnikih / strežnikih

# Na seznamu računalnikov preverite različico Java

# $ računalniki = @ ('sever1, server2, server3')

# Preverite različico Java po seznamu strežnikov v besedilni datoteki

# $ računalniki = Pridobi vsebino C: \ PS \ ServerList.txt

# Pridobite različico Java na vseh strežnikih domene

$ računalniki = ((get-adcomputer -Filter omogočeno -eq "true" -and OperatingSystem -Like '* Windows Server *'. ime) .tostring ()

Get-WmiObject -Class Win32_Product -ComputerName $ računalniki -Filter "Ime, kot je% Java%" in ne Ime, kot je%% Java Auto Updater% "" | Izberite __Server, Različica

Kot rezultat boste dobili tablico s seznamom računalnikov / strežnikov in različico Jave na njih.

V mojem primeru sem pri preverjanju različice Jave v računalnikih našel 35 različnih različic JRE!

Skript PowerShell za odstranitev vseh različic Jave

Zakaj boste morda morali odstraniti prejšnje različice Jave v operacijskem sistemu Windows?

  • Pred namestitvijo nove različice Jave je priporočljivo odstraniti vse prejšnje različice. Kot pri vseh drugih izdelkih na Javi se tudi funkcionalnost nenehno posodablja in odpravljajo se kritične ranljivosti. Če imate nameščeno starejšo različico Java, računalnik izpostavite tveganju za okužbo in izkoriščanje znanih in 0-dnevnih ranljivosti. Java ima vgrajen mehanizem za samodejno posodabljanje, vendar ga lahko skrbniki iz različnih razlogov onemogočijo v domenskih računalnikih.
  • Nimate komercialne naročnine za uporabo Java JRE. Oracle je od leta 2019 spremenil Javno licenčno politiko. Če želite uporabiti starejše različice Oracle JDK (Java SE), morate kupiti plačano naročnino. To velja za vse izdaje Java JRE po 16. aprilu 2019 (začenši s posodobitvijo Java 8 SE 211). Dolgoročna podpora je na voljo za komercialne različice Java SE (posodobitev je objavljena 5 let po izdaji). Brezplačna različica Java - Odprite jdk (distribuira se pod GPL), vendar jo boste morali posodabljati enkrat na šest mesecev. Še ena pomanjkljivost Odprite jdk - medtem ko za Windows ni običajnih namestitvenih orodij. Odpreti morate Open JDK ročno. Obstaja ena sprejemljiva možnost z namestitvijo Open JDK z upraviteljem paketov Chocolatey: choco install openjdk

Naslednji skript PowerShell lahko uporabite za odstranitev vseh nameščenih različic Java iz računalnika.

$ jre_installed = Get-WmiObject -Class Win32_Product -Filter "Ime kot"% Java% "
$ jre_installed.Uninstall ()

Vendar zgoraj omenjeni ukaz za odstranjevanje temelji na WMI in kljub preprostosti deluje precej počasi.

Namesto tega lahko iz registra dobite seznam nameščene Jave in odstranite vse najdene različice Java s pomočjo GUID izdelka, ki se ustvari pri namestitvi programske opreme prek MSI.

#PowerShell skript za odstranitev vseh različic Java SE (JRE) iz računalnika
$ uninstall32 = gci "HKLM: \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall" | foreach gp $ _. PSPath | ? $ _ -like "* Java *" | izberite OdstraniString
$ uninstall64 = gci "HKLM: \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall" | foreach gp $ _. PSPath | ? $ _ -like "* Java *" | izberite OdstraniString
# Odstranjevanje 64-bitnih različic Jave
če ($ uninstall64)
$ uninstall64 = $ uninstall64.UninstallString -Replace "msiexec.exe", "-Replace" / I "," "-Replace" / X "," "
$ uninstall64 = $ uninstall64.Trim ()
Napišite "Odstranjevanje ..."
start-process "msiexec.exe" -arg "/ X $ uninstall64 / qb" -Pričakaj

# Odstranjevanje 32-bitnih različic Jave
če ($ uninstall32)
$ uninstall32 = $ uninstall32.UninstallString -Replace "msiexec.exe", "" -Replace "/ I", "" -Replace "/ X", ""
$ uninstall32 = $ uninstall32.Trim ()
Napišite "Odstranjevanje vseh različic Java SE ..."
start-process "msiexec.exe" -arg "/ X $ uninstall32 / qb" -Pričakaj


Scenarije PowerShell iz tega članka so na voljo v mojem repozitoriju na GitHubu https://github.com/winadm/posh/tree/master/Java.

Kako prenesti namestitev Java JRE s programom PowerShell?

Naslednji skript PowerShell vam omogoča, da samodejno prenesete zadnjo različico distribucije Java (lahko jo prenesete brez povezave ali prek spletnega namestitvenega programa) z uradnega mesta in jo namestite na uporabnikov računalnik. S tem zavremo zahtevo po ponovnem zagonu in izklopimo samodejne posodobitve Java.

Če želite prenesti namestitveno datoteko s spletnega mesta, uporabite ukazni ukaz Invoke-WebRequest.

#PowerShell skript za samodejni prenos in namestitev najnovejše različice Java SE (JRE) v računalnik
[Net.ServicePointManager] :: SecurityProtocol = [Net.SecurityProtocolType] :: Tls12
# naložite spletni namestitveni program Java
$ URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/sl/download/manual.jsp).Content | % [regex] :: tekmo ($ _, '(? :)'). Skupine [1] .Value
# naložite namestitveni program Java brez povezave
# $ URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/sl/download/manual.jsp).Content | % [regex] :: tekmo ($ _, '(? :)'). Skupine [1] .Value
Pokliči-WebRequest -UseBasicParsing -OutFile jre8.exe $ URL
Start-Process. \ Jre8.exe '/ s REBOOT = 0 SPONSORS = 0 AUTO_UPDATE = 0' -čakaj
odmev $?

Če računalnik stoji za strežnikom proxy, morate konfigurirati PowerShell za dostop do interneta prek proxyja.

Prva vrstica v skriptu je dodana za prehod na protokol TLS 1.2. Sicer sem ob zagonu dobil napako:

Invoke-WebRequest: Zahteva je bila prekinjena: ni bilo mogoče ustvariti varnega kanala SSL / TLS.

Skript bo samodejno prenesel namestitveno datoteko Java, jo shranil na disk kot jre8.exe in namestil JRE.