Điểm:0

WUA IUpdateSearcher::Phương thức tìm kiếm dường như chỉ đóng băng trên 1 máy chủ của tôi

lá cờ th

Chi tiết HỆ THỐNG: Phiên bản = Windows Server 2019 Standard, Phiên bản = 1809, Bản dựng hệ điều hành = 17763.2114

Mã của tôi:
  - $UpdateSession = New-Object -ComObject Microsoft.Update.Session
  - $UpdateServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager
  - $UpdateService = $UpdateServiceManager.AddScanPackageService("Dịch vụ đồng bộ hóa ngoại tuyến", $CabPath, 1)
  - $UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
  - $UpdateSearcher.ServerSelection = 3
  - $UpdateSearcher.ServiceID = $UpdateService.ServiceID.ToString()
  *TREO TẠI ĐÂY* - $Missing = $UpdateSearcher.Search("IsInstalled=0")

Tập lệnh PS chạy tốt trên một số máy chủ khác với 2012 R2, 2016 và 2019; nhưng, cái này làm tôi đau đầu. Sau khi bắt đầu tìm kiếm, -Verbose ngừng cung cấp đầu ra (với Set-PSDebug -Trace 2).Phương pháp tìm kiếm này đã mất từ ​​3 - 15 phút trên các hệ thống khác, nhưng thậm chí sau 24 giờ, nó vẫn ở trên một dòng này.

Trên một chủ đề khác, snip được cung cấp bên dưới, tôi đã tìm thấy giải pháp có thể là gì, nhưng cần biết cách chuyển chức năng tìm kiếm thành không đồng bộ trong khi tìm kiếm. Hoặc có cách nào khác để gỡ lỗi phương thức của API này không? WSUS không nhận được các bản cập nhật từ máy chủ và một số máy chủ không được AD hoặc DNS nhận dạng, vì vậy tôi đã sử dụng tập lệnh api WUA để tìm kiếm ngoại tuyến.

Bài trước của Elliot Labs LLC >>

Tôi đã nói chuyện với người quản lý tại Microsoft phụ trách Windows Update (Dave Roth) và ông ấy nói rằng bạn tuyệt đối không nên cố lấy trạng thái của Windows Update thông qua sổ đăng ký. Ông nói rằng bạn nên sử dụng API COM để nhận trạng thái bằng cách thực hiện phương thức tìm kiếm và sử dụng kết quả trả về cho trạng thái cập nhật của máy tính của bạn.

Anh ấy cũng cho tôi mẹo này:

Là một FYI đơn giản, để kiểm tra những bản cập nhật nào được cài đặt, hãy gọi IUpdateSearcher::Search with IsInstalled=1 sẽ tạo ra một đối tượng updatecollection chứa tất cả các bản cập nhật đã cài đặt. Bạn có thể đi thông qua nó để xem những gì đã được cài đặt.

Mở rộng mẹo của anh ấy, bạn có thể gọi phương thức đó bằng IsInstalled=0 để xem bản cập nhật nào chưa được cài đặt. (xem ví dụ powershell bên dưới).

API COM

API COM là một cách tốt để truy cập trực tiếp Windows Update mà không cần phải phân tích nhật ký. Các ứng dụng của phạm vi API này từ việc tìm kiếm các bản cập nhật có sẵn trên máy tính để cài đặt và gỡ cài đặt cập nhật.

Bạn có thể sử dụng lớp Microsoft.Update.Session để chạy bản cập nhật tìm kiếm và sau đó đếm số lượng bản cập nhật có sẵn để xem có là bất kỳ bản cập nhật nào cho máy tính.

Ví dụ PowerShell:

$updateObject = New-Object -ComObject Microsoft.Update.Session $updateObject.ClientApplicationID = "Tập lệnh ví dụ lỗi máy chủ" $updateSearcher = $updateObject.CreateUpdateSearcher() $searchResults = $updateSearcher.Search("IsInstalled=0") Write-Host $searchResults.Updates.Count Nếu kết quả trả về lớn hơn 0 sau đó có các bản cập nhật cho máy tính cần được cài đặt và/hoặc đã tải xuống. Bạn có thể dễ dàng cập nhật tập lệnh powershell để phù hợp với ứng dụng của bạn.

Xin lưu ý, có vẻ như chức năng tìm kiếm không đồng bộ nên nó sẽ đóng băng ứng dụng của bạn trong khi tìm kiếm. Trong trường hợp đó bạn sẽ muốn làm cho nó không đồng bộ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.