ฉันกำลังมองหาความช่วยเหลือในการทำให้โค้ดมีประสิทธิภาพมากขึ้น ขณะนี้ฉันมีสคริปต์ 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"
}
รหัสนี้ถอนการติดตั้ง Java เวอร์ชัน 32 บิตอย่างถูกต้องจาก Java 5 และบนที่มีอยู่ในระบบ แต่จะใช้เวลาตลอดไป แต่ละรายการจะทำงานประมาณ 5-10 วินาที - จากนั้นจะไปยังรายการถัดไป มีวิธีใดที่จะให้ข้ามเวอร์ชันที่ไม่พบได้อย่างรวดเร็วหรือไม่ การใช้ไฟล์แบตช์จะทำงานในเวลาไม่ถึง 15 วินาที
$_.IdentifyingNumber -match "$java"
เป็น$_.Name -match "$java"
อย่างไร มิฉะนั้นถ้า$java
มี IdentifyingNumber อยู่แล้วทำไมคุณถึงค้นหามัน