Enter-PSSession lệnh ghép ngắn cho phép bạn thiết lập một phiên PowerShell tương tác liên tục với một máy tính từ xa. Tất cả các lệnh bạn nhập vào dấu nhắc lệnh của mình đều được thực thi trên máy tính từ xa. Trong bài viết này, chúng tôi sẽ giải thích các tính năng chính của Enter-PSSession và cách sử dụng nó để quản lý từ xa các máy tính chạy Windows 10/11 và Windows Server 2022/2019/2016.
Enter-PSSession
lệnh ghép ngắn được hỗ trợ bởi PowerShell Remoting cây rơm. PSRemoting dựa trên Dịch vụ web dành cho quản lý (WS-Management) và dịch vụ WinRM (Quản lý từ xa Windows). Lưu lượng giữa các máy tính được mã hóa ở cấp độ giao thức (bạn có thể tùy chọn kích hoạt mã hóa SSL cho lưu lượng truy cập PSRemoting WinRM). Bạn có thể sử dụng các phương pháp xác thực khác nhau, 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ên máy tính Lựa chọn). Để kết nối với máy tính từ xa, chỉ cần chạy lệnh:
Enter-PSSession hq-srv01.woshub.com
Nếu người dùng hiện tại có quyền kết nối với máy chủ từ xa, bạn sẽ kết nối với một trình bao tương tác trên máy tính từ xa.
Bạn có thể nhắc nhập thông tin đăng nhập của người dùng 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 ý rằng tên của máy tính từ xa hiện được hiển thị trong dấu ngoặc vuông ở đầu lời nhắc PowerShell của bạn ( [hq-srv01.woshub.com] ). Bằng cách này, bạn có thể tìm hiểu xem mình đang chạy trong phiên shell cục bộ hay từ xa.
Kết quả của tất cả các lệnh chạy từ xa được hiển thị trong bảng điều khiển cục bộ của bạn. Bạn có thể chạy hostname
và đảm bảo rằng bạn đang chạy nó trên một máy tính từ xa.
Bạn có thể chạy bất kỳ lệnh nào trong dấu nhắc lệnh tương tác này (tù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, hãy chạy Exit-PSSession
hoặc exit
. Lời nhắc PS sẽ trở nên bình thường và bạn sẽ quay lại bảng điều khiển PowerShell cục bộ của mình:
Trước đây, quản trị viên chủ yếu sử dụng PsExec công cụ để chạy dấu nhắc lệnh 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 sử dụng các công cụ bên ngoài nữa.
Trong Windows Server 2016/2019/2022, PowerShell Remoting được bật theo mặc định (bạn có thể thấy nó trong Server Manager -> Local Server -> Remote Management =Enabled).
Trong các phiên bản Windows dành cho máy tính để bàn (Win10, Win11), PSRemoting và WinRM bị tắt.
Bạn có thể kiểm tra xem PSRemoting đã được bật trên máy tính hiện tại của mình chưa bằng lệnh dưới đây:
Get-PSSessionConfiguration
Lệnh này cũng được sử dụng để lấy danh sách người dùng và nhóm được phép kết nối qua WinRM. Để sử dụng PSRemoting, tài khoản người dùng phải là thành viên của Quản trị viên hoặc Người dùng quản lý từ xa tập đoàn. Bạn có thể tìm hiểu thêm về cách bật WinRM PowerShell Remoting cho người dùng không phải quản trị viên.
Bạn có thể kiểm tra xem bạn có thể kết nối cục bộ với máy tính của mình thông qua PowerShell Remoting hay không:
Test-WSMan -ComputerName localhost
Nếu lệnh trả về phiên bản lược đồ WSMan, các kết nối từ xa với máy tính bằng PS Remoting được phép.
Nếu PowerShell Remoting bị tắt hoặc không được định cấu hình, lỗi sau sẽ xuất hiện:
Test-WSMan : <f:WSManFaultxmlns:f="https://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150858770" Machine="srv02"><f: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. 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, hãy chạy lệnh sau:
Enable-PSRemoting -Force
Lệnh này:
- Bật dịch vụ WinRM và đặt kiểu khởi động của nó thành Tự động;
- Tạo điểm kết nối trên cổng WinRM mặc định (TCP / 5985 cho lưu lượng HTTP);
- Thêm các ngoại lệ cho WS-Management vào Windows Firewall (nếu bạn đang định cấu hình PSRemoting theo cách thủ công, hãy thêm quy tắc tường lửa bằng PowerShell hoặc bằng GPO)
- Cho phép các phiên PowerShell từ xa
- Khởi động lại dịch vụ WinRM
Đảm bảo rằng dịch vụ WinRM đang chạy và được đặt tự động khởi động:
Get-Service WinRM | Select MachineName,Name,Status, StartType
Lệnh Enable-PSRemoting chỉ hoạt động cho các cấu hình mạng Windows riêng tư và miền. Nếu bạn muốn bật PSRemoting trên máy tính trong mạng công cộng, hãy thay đổi vị trí mạng từ Công khai sang Riêng tư hoặc sử dụng lệnh bên dưới:
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Trong miền Active Directory, cách dễ nhất để định cấu hình tập trung Windows Remote Management (PSRemoting) trên máy chủ và máy tính là thông qua Group Policy.
Các phiên bản PowerShell hiện đại (v6 hoặc v7) hỗ trợ giao thức Secure Shell (SSH) để kết nối với máy tính từ xa qua PowerShell Remoting. Một điểm kết nối SSH phải có sẵn trên máy tính từ xa (Làm cách nào để bật Máy chủ OpenSSH tích hợp trên Windows 10?). Bạn có thể bắt đầu một phiên PSRemoting tương tác qua SSH bằng lệnh sau:
Enter-PSSession -HostName [email protected]
Hoặc xác thực qua SSH bằng khóa RSA:
Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:\PS\max_rsa_key
Bạn có thể sử dụng Enter-PSSession cùng với New-PSSession :
$s = New-PSSession -ComputerName hq-srv01.woshub.com
Enter-PSSession -Session $s
Enter-PSSession hỗ trợ một số phương pháp xác thực. Bạn có thể đặt một thông số bạn muốn bằng cách sử dụng tham số -Xác thực. Các phương pháp xác thực Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge được hỗ trợ.
Trong ví dụ trên, chúng tôi đã chỉ ra cách tạo kết nối Enter-PSSession tương tác giữa các máy tính trong cùng một miền Windows (chỉ định FQDN hoặc tên viết tắt cho kết nối là đủ, sử dụng xác thực Kerberos). Nếu bạn cố gắng kết nối với một máy tính từ xa bằng địa chỉ IP hoặc CNAME của nó, 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 với một máy tính từ xa bằng địa chỉ IP của nó, bạn có thể thêm máy chủ vào danh sách máy chủ đáng tin cậy (Trusted Hosts) hoặc sử dụng SSL cho WinRM (nó an toàn hơn).
Để thêm địa chỉ IP vào máy chủ đáng tin cậy, hãy chạy lệnh sau:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5
Bạn có thể thêm một máy chủ đáng tin cậy bằng cách sử dụng mặt nạ ký tự đại diện:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.woshub.com
Để hiển thị danh sách các máy chủ đáng tin cậy:
Get-Item WSMan:\localhost\Client\TrustedHosts
Theo cách tương tự, bạn có thể thêm máy chủ của mình vào danh sách máy chủ đáng tin cậy trên một máy tính từ xa.
Khởi động lại dịch vụ:
Restart-Service WinRM
Để kết nối với một máy tính từ xa bằng địa chỉ IP của nó, hãy chạy lệnh bên dưới:
Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName woshub\maxbak)
Enter-PSSession
và New-PSSession
lệnh ghép ngắn tạo ra một phiên từ xa liên tục 1-1 và được sử dụng chủ yếu trong các kịch bản tương tác. Nếu bạn muốn tự động chạy các tập lệnh hoặc công việc hoặc làm việc gì đó trên nhiều máy tính từ xa đồng thời, hãy sử dụng lệnh Invoke-Command.