Массив сравнения Powershell для проверки GUID

1

Я создаю скрипт 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
Теги:
arrays
powershell
msiexec

1 ответ

1
Лучший ответ

Вы одновременно вызываете все процессы 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"
}
....
  • 0
    Спасибо, что избавили меня от головной боли. Это решение сработало отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню