Tôi đang tìm kiếm sự hỗ trợ để làm cho một chút mã hiệu quả hơn. Tôi hiện có một tập lệnh Powershell đơn giản (một phần của tập lệnh lớn hơn) liệt kê các mục từ tệp văn bản (cụ thể là chuỗi được sử dụng để xác định chương trình đã cài đặt) và sau đó thử gỡ cài đặt từng chuỗi đó bằng 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"
}
Mã này gỡ cài đặt chính xác mọi phiên bản Java 32 bit khỏi Java 5 và trên đó có trên hệ thống. Tuy nhiên, phải mất mãi mãi . Mỗi mục chạy trong 5-10 giây - và sau đó nó chuyển sang mục tiếp theo. Có cách nào để nhanh chóng bỏ qua các phiên bản không tìm thấy không? Sử dụng một tệp bó này chạy trong dưới 15 giây phẳng.
$_.IdentifyingNumber -match "$java"
được $_.Name -match "$java"
? Mặt khác, nếu $java
đã chứa Mã xác định, tại sao bạn lại truy vấn nó?