Các sự cố với vá máy chủ từ xa bằng winrm và Microsoft.Update.Session


10

Tôi có một mạng với các máy chủ windows 2003, 2008 và 2008r2. Tôi có một tập lệnh powershell mà tôi đã viết để vá một máy cục bộ bằng cách sử dụng các đối tượng com "Microsoft.Update". (Tương tự như Windows Update PowerShell Remote .) Kịch bản của tôi hoạt động tuyệt vời cục bộ nhưng tôi muốn sử dụng các chức năng của nó từ xa vì tôi có số lượng máy chủ khá lớn để quản lý. Trong trường hợp đó, nó rơi xuống (tương tự như bài đăng khác, không được giải quyết).

Tuy nhiên tôi đã có thể thu hẹp sự thất bại xuống còn hai phương thức trên một lớp cụ thể.

(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()

Nếu bạn chạy những thứ này trong một quyền hạn cục bộ với tư cách là quản trị viên, bạn sẽ không gặp vấn đề gì. Nếu bạn cố gắng sử dụng lệnh invoke (hoặc enter-session hoặc winrs), bạn sẽ gặp phải lỗi sau. (Đây là thử nghiệm với localhost, nhưng bất kỳ máy chủ nào cũng sẽ làm được. Tôi cũng đã thử với các phương thức xác thực khác nhau như uy tín và kerberos.);

PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
 (E_ACCESSDENIED))"
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

Tôi đã thấy điều này được đề cập trên blog là một lỗi, nhưng không có bản sao lưu cho khiếu nại đó. Hai cách giải quyết tồn tại và cả hai đều không làm tôi hạnh phúc.

  • Sử dụng psexec để chạy các lệnh như người dùng hệ thống. PSExec là những gì tôi đang cố gắng không sử dụng vì nó đã được chứng minh là không đáng tin cậy. Tôi cũng muốn một giải pháp quyền lực thuần túy.
  • Tạo một tác vụ theo lịch trình và nói rằng để chạy tập lệnh của bạn với tư cách là người dùng hệ thống. (thông qua bài đăng của anh ấy ) Điều này không chỉ lộn xộn mà sau đó tôi sẽ không có kết quả cập nhật. Tôi sẽ phải đăng nhập vào một tập tin hoặc cập nhật cơ sở dữ liệu hoặc một cái gì đó.

Tôi mở các cách khác để chạy cập nhật trên máy chủ từ xa vì đây dường như là vấn đề rất nhiều người đang gặp phải.

Tôi tìm thấy một số tài liệu giải thích thông điệp nhưng không phải là lý do hoặc cách giải quyết.

Trả về giá trị Trả về S_OK nếu thành công. Nếu không, trả về mã lỗi COM hoặc Windows.

This method can also return the following error codes.
Return code   Description
E_INVALIDARGA parameter value is invalid. 
E_ACCESSDENIED    This method cannot be called from a remote computer.

Làm thế nào để nó biết tôi trên một máy tính từ xa?


Điều này có vẻ phức tạp hơn nhiều so với việc đứng lên một cá thể WSUS và đi theo lộ trình đó. Bạn đã xem xét tuyến đường đó?
Bánh trôi nước

Bạn không thể kiểm soát chính xác khi nào máy chủ sẽ được mua xuống và đảm bảo rằng nó sẽ hoạt động trở lại với WSUS một mình. Chúng tôi tận dụng nó cho các bản cập nhật. Tôi sẽ quan tâm nếu bạn có thể kích hoạt nó để làm điều đó theo yêu cầu.
recbot

Tôi gặp vấn đề tương tự khi sử dụng PowerShell Web Access trên Server 2012, đằng sau hậu trường nó cũng sử dụng điều khiển từ xa PowerShell. Cùng một lỗi.
Peter Hahndorf

1
Câu trả lời có thể có ở đây serverfault.com/a/474031/23300
Nic

@reconbot tôi biết câu hỏi rất cũ nhưng tôi cũng đang gặp vấn đề. Bạn đã có bất kỳ sửa chữa hoặc cách thay thế?
Máy tính

Câu trả lời:



0

Một lệnh như vậy cần được chạy với các đặc quyền trên máy từ xa, do đó cần phải được chạy như một người dùng quản trị viên tên miền hoặc quản trị viên trên máy từ xa.

Nếu bạn là trường hợp đầu tiên, tôi không có trợ giúp, nhưng bạn chỉ là quản trị viên cục bộ, không phải từ xa, hãy sử dụng get-credentialnhư thế này.

$cred = get-credential

Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}

Một hình thức thay thế và trực tiếp hơn là cho phép Invoke-Commandyêu cầu thông tin đăng nhập:

Invoke-Command -scriptblock {$ENV:username} -Credential ""

Tôi đang chạy với thông tin đăng nhập của tài khoản quản trị viên, lỗi chỉ định "Phương thức này không thể được gọi từ máy tính từ xa".
recbot

0

Tôi đã có thể làm việc này bằng cách thiết lập điểm cuối JEA trên máy chủ từ xa để chạy như một tài khoản ảo cục bộ.

Từ https://docs.microsoft.com/en-us/powershell/jea/session-configurations :

Tài khoản ảo cục bộ

Nếu tất cả các vai trò được hỗ trợ bởi điểm cuối JEA này được sử dụng để quản lý máy cục bộ và tài khoản quản trị viên cục bộ đủ để chạy các lệnh thành công, bạn nên định cấu hình JEA để sử dụng tài khoản ảo cục bộ. Tài khoản ảo là tài khoản tạm thời là duy nhất cho một người dùng cụ thể và chỉ tồn tại trong suốt thời gian của phiên PowerShell của họ. Trên máy chủ thành viên hoặc máy trạm, tài khoản ảo thuộc nhóm Quản trị viên của máy tính cục bộ và có quyền truy cập vào hầu hết các tài nguyên hệ thống. Trên Bộ điều khiển miền Active Directory, các tài khoản ảo thuộc về nhóm Quản trị viên tên miền.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.