Я ищу помощь в создании более эффективного кода. В настоящее время у меня есть простой скрипт Powershell (часть более крупного скрипта), который перечисляет элементы из текстового файла (а именно строки, используемой для идентификации установленной программы), а затем пытается удалить каждую из этих строк с помощью msiexec:
$javaUninstall = Get-Content .\jre-uninstall-list.txt
foreach ($java in $javaUninstall) {
write-host "Trying", "$java"
$app = Get-WmiObject -Class Win32_Product | Where-Object {
$_.IdentifyingNumber -match "$java"
}
&cmd /c "msiexec /uninstall $($app.IdentifyingNumber) /passive /quiet"
}
Этот код корректно удаляет любую версию 32-битной Java из Java 5 и ту, которая присутствует в системе. Однако это занимает вечность. Каждый элемент работает в течение 5-10 секунд, а затем переходит к следующему. Есть ли способ заставить его быстро пропустить версии, которые не найдены? При использовании командного файла это выполняется менее чем за 15 секунд.