Fix lỗi WinRM 'WSManFault: The client cannot connect to the destination' trên Windows

intermediate🪟 Windows2026-06-01| Windows 10/11, Windows Server 2016/2019/2022 — PowerShell Remoting / WinRM

Error Message

WSManFault Message: The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests.
#winrm#powershell#remote#windows#wsmanagement

Chuyện gì đang xảy ra

Bạn chạy Enter-PSSession, Invoke-Command, hoặc bất kỳ công cụ nào dựa trên WinRM và gặp lỗi sau:

WSManFault Message: The client cannot connect to the destination specified in the request.
Verify that the service on the destination is running and is accepting requests.

WS-Management stack ném lỗi này như một thông báo bắt-tất-cả. Client đã gửi request — và nhận lại im lặng. Có bốn nguyên nhân có thể gây ra điều đó: dịch vụ WinRM trên máy từ xa không chạy, tường lửa chặn gói tin trên cổng 5985, client không tin tưởng máy từ xa, hoặc xác thực thất bại. Mỗi cách khắc phục khác nhau, vì vậy hãy xác định đúng lớp bị lỗi trước.

Danh sách kiểm tra nhanh

Chạy ba kiểm tra này trước khi thay đổi bất cứ thứ gì. Chúng cho bạn biết chính xác lớp nào đang bị hỏng.

# 1. Can you reach the remote machine at all?
Test-Connection -ComputerName REMOTE_HOST -Count 2

# 2. Is port 5985 (WinRM HTTP) open?
Test-NetConnection -ComputerName REMOTE_HOST -Port 5985

# 3. What does WinRM say locally?
winrm id -r:REMOTE_HOST

Test-NetConnection trả về TcpTestSucceeded: False có nghĩa là tường lửa hoặc WinRM listener là thủ phạm. Nếu là True nhưng WinRM vẫn thất bại, vấn đề nằm ở TrustedHosts hoặc xác thực — mạng ổn, nhưng lớp WinRM thì không.

Cách khắc phục 1 — Bật và khởi động WinRM trên máy từ xa

WinRM được tắt theo mặc định trên hầu hết các máy tính Windows. Đây là nguyên nhân phổ biến nhất của lỗi này. Nếu bạn có quyền truy cập console, RDP, hoặc GPO vào máy từ xa, hãy bắt đầu từ đây.

# Run on the REMOTE machine (elevated PowerShell)
Enable-PSRemoting -Force

# Verify the service is running
Get-Service WinRM

# Check the listener is active
winrm enumerate winrm/config/listener

Enable-PSRemoting thực hiện ba việc cùng lúc: khởi động dịch vụ WinRM, tạo HTTP listener trên cổng 5985, và thêm quy tắc tường lửa inbound. Trên máy được đặt thành cấu hình mạng Public, lệnh này có thể từ chối chạy — hãy thêm -SkipNetworkProfileCheck để ép buộc:

Enable-PSRemoting -Force -SkipNetworkProfileCheck

Cách khắc phục 2 — Mở tường lửa trên máy từ xa

Dịch vụ có thể đang chạy, listener đang hoạt động — nhưng bạn vẫn bị chặn. Windows Firewall chặn lưu lượng inbound trên cổng 5985 trừ khi có quy tắc cho phép rõ ràng. Thêm thủ công như sau:

# On the REMOTE machine
# Allow WinRM HTTP (5985)
New-NetFirewallRule -DisplayName "WinRM HTTP" `
  -Direction Inbound -Protocol TCP -LocalPort 5985 `
  -Action Allow

# If you use HTTPS (5986)
New-NetFirewallRule -DisplayName "WinRM HTTPS" `
  -Direction Inbound -Protocol TCP -LocalPort 5986 `
  -Action Allow

Tường lửa được quản lý bởi GPO thì phức tạp hơn. Kiểm tra chính sách nào đang được áp dụng bằng gpresult /h gpo.html, mở file HTML báo cáo, và tìm kiếm "Windows Remote Management". Nếu GPO đang chặn cổng 5985, hãy sửa ở cấp độ chính sách — quy tắc local sẽ không ghi đè được GPO.

Cách khắc phục 3 — Thêm máy từ xa vào TrustedHosts trên client

Ngoài domain — workgroup, cross-domain, hoặc kết nối qua IP — WinRM sẽ không thử xác thực trừ khi máy từ xa được liệt kê trong TrustedHosts. Quá trình bắt tay thất bại âm thầm trước khi thông tin xác thực được gửi đi.

# On the CLIENT machine (elevated PowerShell)
# Add a specific host
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "REMOTE_HOST" -Force

# Or add multiple hosts (comma-separated)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "host1,host2,192.168.1.50" -Force

# Or trust everything (lab use only — never in production)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force

# Verify
Get-Item WSMan:\localhost\Client\TrustedHosts

Khởi động lại dịch vụ WinRM trên client sau khi thay đổi TrustedHosts — cài đặt sẽ không có hiệu lực cho đến khi dịch vụ tải lại:

Restart-Service WinRM

Cách khắc phục 4 — Chỉ định thông tin xác thực rõ ràng

Kerberos chỉ hoạt động trong domain. Kết nối cross-domain và workgroup cần thông tin xác thực rõ ràng — truyền chúng qua Get-Credential:

$cred = Get-Credential  # prompts for username/password

# Test with explicit credentials
Enter-PSSession -ComputerName REMOTE_HOST -Credential $cred

# Or for Invoke-Command
Invoke-Command -ComputerName REMOTE_HOST -Credential $cred -ScriptBlock {
    hostname
    whoami
}

Trên máy workgroup, hãy thêm tên máy làm tiền tố cho tên người dùng: MACHINENAME\Administrator. Chỉ dùng Administrator thường thất bại — nó mặc định tra cứu domain không tồn tại trong workgroup.

Cách khắc phục 5 — Kiểm tra và tạo lại WinRM listener

Listener bị hỏng hoặc cấu hình sai ít xảy ra hơn, nhưng vẫn có — đặc biệt sau khi cập nhật Windows hoặc chạy winrm quickconfig bị lỗi. Xóa listener hiện tại và tạo lại từ đầu:

# On the REMOTE machine
# List current listeners
winrm enumerate winrm/config/listener

# Delete all listeners
winrm delete winrm/config/listener?Address=*+Transport=HTTP

# Recreate the default HTTP listener
winrm create winrm/config/listener?Address=*+Transport=HTTP

# Or use the quick config shortcut
winrm quickconfig -q

Cách khắc phục 6 — Tăng WinRM MaxEnvelopeSizekb (payload lớn)

Kết nối hoạt động với các lệnh đơn giản như hostname, nhưng thất bại khi bạn trả về một object lớn? Kích thước envelope mặc định là 500 KB — quá nhỏ cho bất cứ thứ gì phức tạp. Tăng lên 8 MB:

# On the REMOTE machine
Set-Item WSMan:\localhost\MaxEnvelopeSizekb -Value 8192

Xác minh sau khi khắc phục

# From the CLIENT machine
# 1. Test connectivity
Test-NetConnection -ComputerName REMOTE_HOST -Port 5985

# 2. Test WinRM directly
Test-WSMan -ComputerName REMOTE_HOST

# 3. Open an interactive session
Enter-PSSession -ComputerName REMOTE_HOST

# 4. Run a remote command
Invoke-Command -ComputerName REMOTE_HOST -ScriptBlock { hostname; $PSVersionTable.PSVersion }

Một lệnh Test-WSMan thành công trông như sau:

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 0.0.0 SP: 0.0 Stack: 3.0

Nếu Enter-PSSession đưa bạn vào [REMOTE_HOST]: PS C:\Users\...>, bạn đã kết nối thành công. Chạy exit để đóng phiên sạch sẽ.

Xử lý sự cố theo chi tiết lỗi

  • "WinRM cannot complete the operation" — kiểm tra cổng 5985/5986: tường lửa đang chặn. Chuyển đến Cách khắc phục 2.
  • "The WinRM client cannot process the request" — đề cập TrustedHosts: chuyển đến Cách khắc phục 3.
  • "Access is denied": sai thông tin xác thực hoặc không đủ quyền. Chuyển đến Cách khắc phục 4.
  • "The server certificate on the destination computer has the following errors": HTTPS listener có chứng chỉ lỗi hoặc tự ký. Sửa chứng chỉ, hoặc chuyển sang HTTP cho mạng nội bộ.
  • "Connecting to remote server failed" — sau khi đẩy GPO: chạy gpupdate /force trên máy từ xa trước, sau đó thử lại.

Môi trường domain — bỏ qua hầu hết các bước trên

Cả hai máy đều trong cùng một domain? WinRM thường hoạt động ngay sau khi Enable-PSRemoting chạy trên máy từ xa. Bỏ qua TrustedHosts hoàn toàn — Kerberos tự động xử lý việc tin tưởng host. Điều duy nhất vẫn có thể gây rắc rối là thiếu quy tắc tường lửa ở phía máy từ xa. Cách khắc phục 2 sẽ giải quyết vấn đề đó.

Điều cần ghi nhớ

Một lỗi mơ hồ, bốn nguyên nhân gốc rễ khác nhau: dịch vụ bị tắt, tường lửa chặn, host không được tin tưởng, thông tin xác thực sai. Đừng đoán mò. Chạy Test-NetConnection -ComputerName REMOTE_HOST -Port 5985 trước. TcpTestSucceeded: True có nghĩa là mạng ổn — chuyển sang cấu hình WinRM. False có nghĩa là dừng lại và sửa tường lửa. Một kiểm tra duy nhất đó giúp giảm một nửa thời gian xử lý sự cố.

Related Error Notes