Powershell 比较数组以检查 GUID

Powershell compare array to check for GUID

我正在创建一个 PowerShell 脚本来检查本地系统是否有属于 JRE 的 GUID (IdentifyingNumber) 的预定义列表。目的是在安装 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 Installer/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"
}
....