Cmdlet Enter-PSSession cho phép thiết lập phiên PowerShell tương tác liên tục với máy tính từ xa. Tất cả lệnh bạn nhập trong command prompt được thực thi trên máy tính từ xa. Trong bài này, chúng ta giải thích các tính năng chính của Enter-PSSession và cách dùng để quản lý từ xa máy tính chạy Windows 10/11 và Windows Server 2022/2019/2016.
Cmdlet Enter-PSSession được hỗ trợ bởi stack PowerShell Remoting. PSRemoting dựa trên Web Services for Management (WS-Management) và dịch vụ WinRM (Windows Remote Management). Traffic giữa máy tính được mã hóa ở cấp giao thức (bạn có thể tùy chọn bật mã hóa SSL cho traffic PSRemoting WinRM). Bạn có thể dùng nhiều phương pháp xác thực, bao gồm NTLM và Kerberos.
Trong trường hợp đơn giản, để thiết lập phiên PowerShell tương tác với máy tính từ xa, bạn chỉ cần chỉ định tên máy tính kết nối (tùy chọn ComputerName). Để kết nối máy tính từ xa, chỉ chạy lệnh:
Enter-PSSession hq-srv01.woshub.com
Nếu user hiện tại có quyền kết nối host từ xa, bạn sẽ kết nối shell tương tác trên máy tính từ xa.
Bạn có thể nhắc nhập credential trước khi kết nối:
Enter-PsSession –ComputerName hq-srv01.woshub.com –Credentials woshub\maxbak
Hoặc:
$creds = Get-Credential
Enter-PSSession -ComputerName hq-srv01 -Credential $creds
Lưu ý tên máy tính từ xa giờ hiển thị trong ngoặc vuông ở đầu PowerShell prompt ([hq-srv01.woshub.com]). Cách này giúp bạn biết đang chạy trong shell local hay remote.
Đầu ra tất cả lệnh chạy từ xa hiển thị trong console local. Bạn có thể chạy lệnh hostname và xác nhận bạn đang chạy trên máy tính từ xa.
Bạn có thể chạy bất kỳ lệnh nào trong command prompt tương tác này (theo đặc quyền của bạn).
Ví dụ, hãy hiển thị cài đặt mạng Windows bằng PowerShell:
Get-NetIPConfiguration
Bạn có thể thay đổi cài đặt DNS trên máy tính từ xa:
Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4
Để thoát phiên shell tương tác từ xa, chạy Exit-PSSession hoặc exit. PS prompt sẽ trở về bình thường và bạn quay lại console PowerShell local:
Trước đây, quản trị viên chủ yếu dùng công cụ PsExec để chạy command prompt tương tác trên máy tính Windows từ xa. Tuy nhiên, khi Enter-PSSession xuất hiện, họ không cần dùng công cụ bên ngoài nữa.
Trong Windows Server 2016/2019/2022, PowerShell Remoting được bật mặc định (bạn thấy trong Server Manager → Local Server → Remote Management = Enabled).
Trong phiên bản Windows desktop (Win10, Win11), PSRemoting và WinRM bị tắt.
Bạn có thể kiểm tra PSRemoting có bật trên máy tính hiện tại không bằng lệnh:
Get-PSSessionConfiguration
Lệnh này cũng dùng để lấy danh sách user và group được phép kết nối qua WinRM. Để dùng PSRemoting, tài khoản user phải là thành viên nhóm Administrators hoặc Remote Management Users. Bạn có thể tìm hiểu thêm cách bật WinRM PowerShell Remoting cho user non-admin.
Bạn có thể test xem có thể kết nối máy tính cục bộ qua PowerShell Remoting không:
Test-WSMan -ComputerName localhost
Nếu lệnh trả về phiên bản WSMan schema, kết nối từ xa đến máy tính dùng PS Remoting được phép.
Nếu PowerShell Remoting bị tắt hoặc chưa cấu hình, lỗi sau xuất hiện:
Test-WSMan : The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".
Để bật PowerShell Remoting, chạy lệnh:
Enable-PSRemoting -Force
Lệnh này:
- Bật dịch vụ WinRM và đặt kiểu khởi động Automatic;
- Tạo điểm kết nối trên cổng WinRM mặc định (TCP/5985 cho traffic HTTP);
- Thêm ngoại lệ WS-Management vào Windows Firewall (nếu cấu hình PSRemoting thủ công, thêm rule firewall bằng PowerShell hoặc GPO)
- Cho phép phiên PowerShell từ xa
- Khởi động lại dịch vụ WinRM
Đảm bảo dịch vụ WinRM đang chạy và đặt khởi động tự động:
Get-Service WinRM | Select MachineName,Name,Status, StartType
Lệnh Enable-PSRemoting chỉ hoạt động cho profile mạng domain và private. Nếu muốn bật PSRemoting trên máy tính trong mạng public, đổi network location từ Public sang Private, hoặc dùng lệnh:
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Trong domain Active Directory, cách dễ nhất cấu hình tập trung Windows Remote Management (PSRemoting) trên server và máy tính là qua Group Policy.
Phiên bản PowerShell hiện đại (v6 hoặc v7) hỗ trợ giao thức Secure Shell (SSH) để kết nối máy tính từ xa qua PowerShell Remoting. Điểm kết nối SSH phải có sẵn trên máy tính từ xa (Cách bật OpenSSH Server tích hợp trên Windows 10?). Bạn có thể bắt đầu phiên PSRemoting tương tác qua SSH bằng lệnh:
Enter-PSSession -HostName maxbak@hq-srv01.woshub.com
Hoặc xác thực qua SSH dùng key RSA:
Enter-PSSession -HostName maxbak@hq-srv01.woshub.com:22 -KeyFilePath c:\PS\max_rsa_key
Bạn có thể dùng Enter-PSSession cùng New-PSSession:
$s = New-PSSession -ComputerName hq-srv01.woshub.com
Enter-PSSession -Session $s
Enter-PSSession hỗ trợ nhiều phương pháp xác thực. Bạn có thể đặt phương pháp muốn dùng bằng tham số -Authentication. Hỗ trợ Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge.
Trong ví dụ trên, chúng ta đã chỉ cách tạo kết nối Enter-PSSession tương tác giữa máy tính trong cùng domain Windows (chỉ cần chỉ định FQDN hoặc tên ngắn để kết nối, xác thực Kerberos được dùng). Nếu bạn cố kết nối máy tính từ xa dùng địa chỉ IP hoặc CNAME, bạn sẽ không được xác thực:
Enter-PSSession : Connecting to remote server 192.168.31.12 failed with the following error message: The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated.
Để kết nối máy tính từ xa dùng địa chỉ IP, bạn có thể thêm host vào danh sách trusted hosts (Trusted Hosts) hoặc dùng SSL cho WinRM (an toàn hơn).
Để thêm địa chỉ IP vào trusted hosts, chạy lệnh:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5
Bạn có thể thêm trusted host dùng wildcard mask:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.woshub.com
Để hiển thị danh sách trusted hosts:
Get-Item WSMan:\localhost\Client\TrustedHosts
Cùng cách đó, bạn có thể thêm host của mình vào trusted hosts trên máy tính từ xa.
Khởi động lại dịch vụ:
Restart-Service WinRM
Để kết nối máy tính từ xa dùng địa chỉ IP, chạy lệnh:
Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName woshub\maxbak)
Cmdlet Enter-PSSession và New-PSSession tạo phiên từ xa một-một liên tục và chủ yếu dùng trong kịch bản tương tác. Nếu bạn muốn chạy script hoặc job tự động hoặc làm gì đó trên nhiều máy tính từ xa cùng lúc, dùng lệnh Invoke-Command.