Tôi đang làm việc trên tập lệnh PowerShell để thực hiện một số tác vụ Windows Update. Hầu hết các nhiệm vụ tập trung vào việc thu thập các bản cập nhật Windows chưa được áp dụng, sử dụng đoạn mã bên dưới. Khi bộ sưu tập đó được trả về, tôi lặp lại thông qua nó và thực hiện các tác vụ như ẩn, tải xuống hoặc cài đặt các bản cập nhật.Slow WUA (API cập nhật Windows)
Tôi nhận thấy rằng mã này có thể mất từ 6 đến 115 giây để chạy. Thông thường, các lần chạy dài hơn sau khi máy đã khởi động lại hoặc không hoạt động trong hơn 15 phút.
Nhưng nếu tôi mở mục bảng điều khiển Windows Update, nó ngay lập tức biết số lượng cập nhật là nổi bật và có thể cung cấp cho tôi danh sách (bộ sưu tập) của những cập nhật chưa cập nhật đó. Nếu tôi nhấp vào liên kết "kiểm tra cập nhật" của WU, sẽ mất> 10 giây để kiểm tra lại và đôi khi việc kiểm tra đó sẽ mang lại kết quả khác với kết quả "biết" ngay lập tức khi tôi mở nó.
Vì vậy, tôi giả định rằng WUA duy trì bộ sưu tập các bản cập nhật được lưu trong bộ nhớ cache ở đâu đó, có thể được cập nhật tự động một lần mỗi ngày. Câu hỏi của tôi: làm cách nào để mã của tôi truy cập bộ nhớ cache đó, thay vì chạy mã "kiểm tra cập nhật" dài hơn được hiển thị bên dưới? Cụ thể, tôi hy vọng sẽ nhanh chóng có được một IUpdateCollection để làm việc.
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Online = $false #tested $true and $false; $true slightly slower
$Criteria = "IsInstalled=0 and Type='Software'"
$SearchResult = $Searcher.Search($Criteria)
$SearchResult.Updates
Lưu ý rằng tất cả điều này đang xảy ra trên hệ thống Windows2012R2 hiện tại.
Bạn đã kiểm tra các WindowsUpdate.log để xem những gì đang xảy ra? '$ Searcher.GetTotalHistoryCount()' hiển thị trước khi bạn chạy cái này? – xXhRQ8sD2L7Z
ST8Z6FR57ABE6A8RE9UF - không có gì bất thường trong WindowsUpdate.log. Tôi thấy $ Searcher.GetTotalHistoryCount() bắt đầu và hoàn thành ngay lập tức (trở về "46"); $ Searcher.Search ($ Criteria) mất hơn sáu giây để hoàn thành. Không có lỗi. – quux
Thật thú vị, tôi biết bạn có thể lấy số từ sổ đăng ký nhưng tất cả thông tin đó không có trong đó. Có thể tệp kê khai đọc của nó từ thư mục SoftwareDistribution? – xXhRQ8sD2L7Z