Я создаю скрипт PowerShell для проверки локальной системы на предопределенный список GUID
(IdentifyingNumber), который принадлежит JRE. Целью является удаление любых старых версий, которые являются частью списка, перед установкой последней версии Java.
Кажется, что скрипт работает правильно для соответствия GUID
но когда я запускаю msiexec.exe/x
внутри цикла for, а оператор if работает только один раз до завершения скрипта. Он должен удалить каждую из найденных старых версий.
Если бы кто-нибудь мог помочь объяснить, что это такое, я буду здесь без особого внимания!
[string[]] $Java_GUIDS = @(
#Java Auto Updater
"{4A03706F-666A-4037-7777-5F2748764D10}",
#Java 8 Update 31 - 64-bit
"{26A24AE4-039D-4CA4-87B4-2F86418031F0}",
#Java 8 Update 31 - 32-bit
"{26A24AE4-039D-4CA4-87B4-2F83218031F0}",
#Java 8 Update 25 - 64-bit
"{26A24AE4-039D-4CA4-87B4-2F83218025F0}",
#Java 8 Update 20 - 32-bit
"{26A24AE4-039D-4CA4-87B4-2F83218020F0}",
#Java 8 Update 20 - 64-bit
"{26A24AE4-039D-4CA4-87B4-2F83218020FF}",
# ARRAY DEFINITION TRUNCATED
#Java 5 Update 22
"{3248F0A8-6813-11D6-A77B-00B0D0150220}",
#Java 5 Update 23
"{3248F0A8-6813-11D6-A77B-00B0D0150230}")
#Show currently installed Java Version(s)
Write-Host "Currently Installed Java Versions:"
gwmi win32_product -filter "name like 'Java%'" | select name,IdentifyingNumber,Version
[string[]] $Installed = (gwmi win32_product -filter "name like 'Java%'" | Select-Object -expand IdentifyingNumber)
foreach($Installed_GUID in $Installed)
{
if ($Java_GUIDS -contains $Installed_GUID)
{
Write-Host "Found $Installed_GUID in Java GUIDS Array. Removing..."
msiexec.exe /x $Installed_GUID /qn /norestart /L*V "C:\Windows\TEMP\Java Removal.log"
Write-Host "Done"
}
else
{
Write-Host "Did NOT find $Installed_GUID in Java GUIDS Array"
}
}
Write-Host "Complete"
Ниже приведены три последовательных прогона скрипта, которые показывают, что только одна версия каждого запуска успешно удаляется.
PS C:\Users\srj3> C:\Users\srj3\Desktop\Java_Removal.ps1
Currently Installed Java Versions:
name IdentifyingNumber Version
---- ----------------- -------
Java 7 Update 75 {26A24AE4-039D-4CA4-87B4-2F03217075FF} 7.0.750
Java 8 Update 31 {26A24AE4-039D-4CA4-87B4-2F83218031F0} 8.0.310
Java 8 Update 25 {26A24AE4-039D-4CA4-87B4-2F83218025F0} 8.0.250
Java 7 Update 75 (64-bit) {26A24AE4-039D-4CA4-87B4-2F06417075FF} 7.0.750
Java 8 Update 31 (64-bit) {26A24AE4-039D-4CA4-87B4-2F86418031F0} 8.0.310
Java Auto Updater {4A03706F-666A-4037-7777-5F2748764D10} 2.8.31.13
Found {26A24AE4-039D-4CA4-87B4-2F03217075FF} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F83218031F0} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F83218025F0} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F06417075FF} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F86418031F0} in Java GUIDS Array. Removing...
Done
Found {4A03706F-666A-4037-7777-5F2748764D10} in Java GUIDS Array. Removing...
Done
Complete
PS C:\Users\srj3> C:\Users\srj3\Desktop\Java_Removal.ps1
Currently Installed Java Versions:
name IdentifyingNumber Version
---- ----------------- -------
Java 8 Update 31 {26A24AE4-039D-4CA4-87B4-2F83218031F0} 8.0.310
Java 8 Update 25 {26A24AE4-039D-4CA4-87B4-2F83218025F0} 8.0.250
Java 7 Update 75 (64-bit) {26A24AE4-039D-4CA4-87B4-2F06417075FF} 7.0.750
Java 8 Update 31 (64-bit) {26A24AE4-039D-4CA4-87B4-2F86418031F0} 8.0.310
Java Auto Updater {4A03706F-666A-4037-7777-5F2748764D10} 2.8.31.13
Found {26A24AE4-039D-4CA4-87B4-2F83218031F0} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F83218025F0} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F06417075FF} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F86418031F0} in Java GUIDS Array. Removing...
Done
Found {4A03706F-666A-4037-7777-5F2748764D10} in Java GUIDS Array. Removing...
Done
Complete
PS C:\Users\srj3> C:\Users\srj3\Desktop\Java_Removal.ps1
Currently Installed Java Versions:
name IdentifyingNumber Version
---- ----------------- -------
Java 8 Update 25 {26A24AE4-039D-4CA4-87B4-2F83218025F0} 8.0.250
Java 7 Update 75 (64-bit) {26A24AE4-039D-4CA4-87B4-2F06417075FF} 7.0.750
Java 8 Update 31 (64-bit) {26A24AE4-039D-4CA4-87B4-2F86418031F0} 8.0.310
Java Auto Updater {4A03706F-666A-4037-7777-5F2748764D10} 2.8.31.13
Found {26A24AE4-039D-4CA4-87B4-2F83218025F0} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F06417075FF} in Java GUIDS Array. Removing...
Done
Found {26A24AE4-039D-4CA4-87B4-2F86418031F0} in Java GUIDS Array. Removing...
Done
Found {4A03706F-666A-4037-7777-5F2748764D10} in Java GUIDS Array. Removing...
Done
Complete
Вы одновременно вызываете все процессы msiexec. Установщик Windows/Msiexec позволяет выполнять только одну транзакцию за раз, поэтому вам нужно дождаться завершения каждого процесса до начала следующего.
....
if ($Java_GUIDS -contains $Installed_GUID)
{
Write-Host "Found $Installed_GUID in Java GUIDS Array. Removing..."
#Defining the command here to make it clean. One object per word (split at whitespace).
$argumentlist = @('/x', $Installed_GUID, '/qn', '/norestart', '/l*v', '"C:\Windows\TEMP\Java Removal.log"')
Start-Process -FilePath msiexec.exe -ArgumentList $argumentlist -Wait
Write-Host "Done"
}
....