2012-07-04 39 views
34

Khi tôi chạyGet-WmiObject: Máy chủ RPC không khả dụng. (Ngoại lệ từ HRESULT: 0x800706BA)

Get-WmiObject win32_SystemEnclosure -Computer hostname | select serialnumber 

nó hoạt động cho cả host nội bộ và từ xa.

Khi tôi làm việc này cho một danh sách các máy chủ sử dụng

ForEach ($_ in gc u:\pub\list.txt) { 
    Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}} 
} 

nó trả

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

+0

Firewall trên máy tính từ xa trên? Hoặc sự cố bảo mật DCOM –

Trả lời

28

Kiểm tra xem "Windows Management Instrumentation (WMI-In)" quy tắc được kích hoạt trong các bức tường lửa cho mỗi máy từ xa.

Hoặc trong một Command/Powershell chạy nhanh chóng hành chính:

netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes 
9

Nó có thể là do nhiều issues.I không thể nói cái nào là có trong trường hợp của bạn.

Dưới đây lý do nhất định có thể có mặt ở đó:

  • DCOM không được kích hoạt trong máy tính cá nhân hoặc mục tiêu máy tính hoặc trên cả hai.
  • Tường lửa của bạn hoặc thậm chí là phần mềm diệt vi-rút của bạn đang ngăn truy cập.
  • Mọi dịch vụ liên quan đến WMI đều bị tắt.

Một số dịch vụ liên quan WMI được như được đưa ra:

  • Remote Access Auto Connection Manager
  • Remote Access Connection Manager
  • Remote Procedure Call (RPC)
  • Remote Procedure Call (RPC) Định vị
  • Đăng ký từ xa

Đối với thiết lập DCOM tham khảo:

  • chính: HKLM\Software\Microsoft\OLE, Giá trị: EnableDCOM

Giá trị nên được đặt thành 'Y'.

-1

Tôi chỉ đến để cùng vấn đề chính xác và tìm thấy câu trả lời ở đây: http://powershellcommunity.org/Forums/tabid/54/aft/7537/Default.aspx

tôi đã ký tự không gian vào cuối mỗi dòng tập tin đầu vào. Nếu tệp của bạn cũng vậy, chỉ cần xóa chúng và tập lệnh của bạn sẽ hoạt động.

+7

Liên kết chuyển hướng đến miền khác. –

0

Tắt tường lửa đã giải quyết nó cho tôi.

+3

IMO này không nên được coi là một giải pháp. – Chris76786777

+2

Tốt nhất điều này sẽ xác định xem sự cố có xảy ra ở tường lửa hay không. Việc tắt tường lửa sẽ đi ngược lại các thực tiễn tốt nhất và có thể phá vỡ những thứ khác trong môi trường cấp doanh nghiệp như SCCM. –

1

Nếu bạn đã thử một số gợi ý trong câu trả lời khác, đáng chú ý nhất:

  • David Brabant của câu trả lời: xác nhận sự cai trị Windows Management Instrumentation (WMI) tường lửa nội địa được kích hoạt
  • Abhi_Mishra của câu trả lời: xác nhận DCOM được bật trong Registry

Sau đó xem xét lý do phổ biến khác để nhận lỗi này:

  • Chiếc máy từ xa là OFF
  • Bạn đã chỉ định tên máy tính không hợp lệ
  • Có những vấn đề kết nối mạng giữa bạn và máy tính mục tiêu
0

Tôi nghĩ rằng tôi sẽ thêm rằng chúng tôi cũng chạy vào vấn đề này với nhiều máy trong miền của chúng tôi. Tôi đã tạo một danh sách các máy vi phạm và thêm tất cả chúng vào một tệp văn bản để chạy tập lệnh. Tôi chạy điều này từ dấu nhắc CMD bằng cách sử dụng đặc quyền nâng cao.

psexec @firewallFix.txt -d netsh advfirewall firewall 
     set rule name="Windows Management Instrumentation (WMI-In)" 
     profile=domain new enable=yes profile=domain 
10

Mã của bạn có thể không sử dụng tên máy chính xác, bạn nên kiểm tra lại điều đó.

lỗi của bạn là:

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

Đây là kết quả bạn nhận được khi một máy không thể truy cập. Vì vậy, những gợi ý tường lửa là hợp lý, nhưng trong trường hợp này có lẽ không đúng bởi vì bạn nói công trình này:

Get-WmiObject win32_SystemEnclosure -Computer hostname 

Vì vậy, trong trường hợp của bạn có vẻ như khi dòng này được thực thi:

Get-WmiObject win32_SystemEnclosure -Computer $_ 

$ _ doesn' t chứa tên máy tính phù hợp. Bạn có thể kiểm tra loại và nội dung của $ _. Có thể có sự cố với nội dung tệp. Nếu tệp có vẻ đúng, thì có thể các dòng không được chấm dứt đúng cách. Có thể xem xét kỹ hơn bằng cách sử dụng Write-Host:

ForEach ($_ in gc u:\pub\list.txt) { 
    Write-Host "Get-WmiObject win32_SystemEnclosure -Computer '$_'" 
    Get-WmiObject win32_SystemEnclosure -Computer $_ | select serialnumber | format-table -auto @{Label="Hostname"; Expression={$_}}, @{Label="Service Tag"; Expression={$_.serialnumber}} 
} 
+0

Làm việc cho tôi. Kiểm tra các công cụ đơn giản đầu tiên. –

+0

Đồng ý, đảm bảo $ _ của bạn thực sự là một chuỗi. Sử dụng địa chỉ IPv4 không được kiểm soát đã ngăn nó hoạt động cho tôi. – colbybhearn

0

Đã giải quyết.

Tôi đã chạy vào cùng một thông báo lỗi chính xác khi cố gắng thực thi tập lệnh sau (một phần) đối với máy ảo từ xa đã được định cấu hình nằm trong WORKGROUP.

Restart-Computer -ComputerName MyComputer -Authentication Default -Credential $cred -force 

Tôi nhận thấy tôi có thể chạy tập lệnh từ một máy ảo khác trong cùng WORKGROUP khi tôi tắt tường lửa nhưng vẫn không thể thực hiện từ máy trên miền. Hai điều đó cùng với các đề xuất Stackflow là những gì đưa tôi đến giải pháp sau:

Lưu ý: Thay đổi các cài đặt này có nguy cơ của riêng bạn. Bạn nên hiểu ý nghĩa bảo mật của những thay đổi này trước khi áp dụng chúng.

Trên máy từ xa:

  • Hãy chắc chắn rằng bạn kích hoạt lại Firewall của bạn nếu bạn đã vô hiệu hóa nó trong thử nghiệm.
  • Run Enable-PSRemoting từ PowerShell với thành công
  • Đi vào wf.msc (Windows Firewall with Advanced Security)
  • Xác nhận cá nhân trong nước/công 'Windows Management Instrumentation (DCOM-In)' quy tắc được kích hoạt đảm bảo thuộc tính 'Địa chỉ Từ xa' là 'Bất kỳ' hoặc một cái gì đó an toàn hơn.
  • Xác nhận cá nhân/inbound Công 'Windows Management Instrumentation (WMI-In)' quy tắc được kích hoạt chắc chắn rằng 'từ xa Địa chỉ' tài sản là 'Any' hoặc một cái gì đó an toàn hơn.

Tùy chọn: Bạn cũng có thể cần phải thực hiện những điều sau nếu bạn muốn chạy lệnh như 'Nhập-PSSession'.

  • Xác nhận các cá nhân/công inbound 'Windows Management Instrumentation (async-In)' quy tắc được kích hoạt đảm bảo 'từ xa Địa chỉ' tài sản là 'Any' hoặc một cái gì đó an toàn hơn.
  • Mở một cổng Inbound TCP để 5985

QUAN TRỌNG! - Mất máy ảo từ xa của tôi khoảng 2 phút hoặc lâu hơn sau khi khởi động lại để phản hồi lệnh 'Enter-PSSession' mặc dù các dịch vụ mạng khác đang khởi động mà không gặp sự cố. Cho nó một vài phút và sau đó thử.

Ghi chú bên: Trước khi tôi thay đổi thuộc tính 'Địa chỉ từ xa' thành 'Bất kỳ', cả hai quy tắc được đặt thành 'Mạng con cục bộ'.

1

Tôi đã gặp sự cố tương tự khi sử dụng foreach. Tôi đã lưu danh sách đến $ máy chủ và sử dụng này mà làm việc:

ForEach ($_ in $Servers) { Write-Host "Host $($_)" | Get-WmiObject win32_SystemEnclosure -Computer $_ | format-table -auto @{Label="Service Tag"; Expression={$_.serialnumber}} 
} 
0

Việc kích hoạt sau quy tắc FW trên hệ thống mục tiêu giải quyết các vấn đề trên Win2k16:

  • Windows Management Instrumentation (WMI-In)
  • Điều phối viên giao dịch phân phối (RPC)
  • Điều phối viên giao dịch phân phối (RPC-EPMAP)
-2

tôi đang làm sai lầm này

ForEach ($server in $servers) { 
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server 
} 

Trong đó, tất nhiên, không thể được thông qua, bởi vì đầu ra của máy chủ trong một tập tin csv là @ {Name = hv1g.contoso.com}

tôi đã để gọi thuộc tính từ tệp csv như máy chủ $ này.Tên

ForEach ($server in $servers) { 
$OS = Get-WmiObject win32_operatingsystem -ComputerName $server.Name 
} 

Đã khắc phục sự cố của tôi.

+1

Điều này không thực sự trả lời Câu hỏi khi bạn đang sử dụng CSV, với Tiêu đề như bạn đang đề cập đến thuộc tính Tên. Câu hỏi đề cập đến một tập tin txt mà sẽ không có tiêu đề vì nó đang được lấy bằng cách sử dụng 'Get-Content' mà không xử lý tiêu đề. –

2

Tôi gặp sự cố tương tự nhưng chỉ với một vài máy. Tôi thấy rằng sử dụng Invoke-Command để chạy cùng một lệnh trên máy chủ từ xa đã hoạt động.

Vì vậy, thay vì:

Get-WmiObject win32_SystemEnclosure -ComputerName $hostname -Authentication Negotiate 

Sử dụng này:

Invoke-Command -ComputerName $hostname -Authentication Negotiate -ScriptBlock {Get-WmiObject win32_SystemEnclosure} 
+0

Gọi lệnh làm việc cho tôi, nơi các giải pháp khác không. Devbox của tôi nằm trên miền trong khi máy ảo Azure tôi đang truy cập từ xa thì không. Tôi đã thực hiện cập nhật tường lửa của David Brabant và tôi đã cập nhật danh sách TrustedHosts của mình. [code] $ cred = get-credential $ hostname = "xx.xxx.xx.xxx" Gọi-Command -ComputerName $ tên máy chủ -Authentication Negotiate -ScriptBlock {Restart-Computer -Force} -Credential $ cred [/ mã] – GrayDwarf

Các vấn đề liên quan