- Remoting sử dụng WinRM/WS-Man (HTTP/HTTPS) và cho phép các phiên 1-1, 1-nhiều và liên tục với các biện pháp kiểm soát bảo mật.
- Enable-PSRemoting cấu hình dịch vụ, trình lắng nghe và tường lửa; HTTPS yêu cầu chứng chỉ hợp lệ và CN/SAN khớp.
- Kết quả được trả về ở dạng không tuần tự hóa; các phương thức được gọi trong khối lệnh từ xa và các điểm cuối tùy chỉnh được sử dụng để phân quyền chi tiết.
Bạn có thể đã tự động hóa nhiều tác vụ bằng PowerShell cục bộ, nhưng bạn thực sự làm gì? PowerShell Remoting tạo nên sự khác biệt Đó là khi bạn chạy lệnh trên các máy từ xa, dù là vài hay hàng trăm máy, theo cách tương tác hay song song. Công nghệ này, có sẵn từ Windows PowerShell 2.0 và được cải tiến từ phiên bản 3.0, dựa trên WS-Management (WinRM) và chuyển đổi PowerShell trong một kênh quản lý từ xa mạnh mẽ, có khả năng mở rộng và an toàn.
Trước hết, điều quan trọng là phải hiểu hai ý tưởng chính: lệnh ghép ngắn với -Tham số ComputerName (ví dụ: Get-Process hoặc Get-Service) không phải là con đường dài hạn được Microsoft khuyến nghị và PowerShell Remoting không hoạt động như một "phương pháp hack". Trên thực tế, thực thi xác thực lẫn nhau, nhật ký kiểm tra và tôn trọng các quyền thông thường của bạn, mà không lưu trữ thông tin xác thực hoặc chạy bất kỳ thứ gì có đặc quyền siêu cấp một cách kỳ diệu.
PowerShell Remoting là gì và tại sao nên sử dụng nó?
với Điều khiển từ xa PowerShell bạn có thể thực hiện hầu hết mọi lệnh từ xa mà bạn có thể khởi chạy trong một phiên cục bộ, từ truy vấn dịch vụ đến triển khai cấu hình, và thực hiện trên hàng trăm máy tính cùng một lúc. Không giống như các lệnh ghép ngắn chấp nhận -ComputerName (nhiều lệnh sử dụng DCOM/RPC), Remoting di chuyển qua WS-Man (HTTP/HTTPS), thân thiện hơn với tường lửa, cho phép xử lý song song và chuyển giao công việc cho máy chủ từ xa chứ không phải máy khách.
Điều này chuyển thành ba lợi thế thực tế: hiệu suất tốt hơn trong các cuộc thực thi hàng loạt, ít ma sát hơn trong mạng lưới với các quy tắc hạn chế và mô hình bảo mật phù hợp với Kerberos/HTTPS. Hơn nữa, bằng cách không phụ thuộc vào từng cmdlet để triển khai lệnh điều khiển từ xa riêng, Remoting Nó hoạt động cho bất kỳ kịch bản hoặc vai trò nào có sẵn tại điểm đến.
Theo mặc định, các Máy chủ Windows gần đây đều được bật tính năng Remoting; trong Windows 10/11 bạn kích hoạt nó chỉ với một lệnh cmdlet duy nhất. Và vâng, bạn có thể sử dụng thông tin đăng nhập thay thế, phiên liên tục, điểm cuối tùy chỉnh, v.v.
Lưu ý: Remoting không đồng nghĩa với việc mở mọi thứ. Theo mặc định, chỉ quản trị viên Chúng có thể kết nối và các hành động được thực thi dưới danh tính của chúng. Nếu bạn cần phân quyền chi tiết, các điểm cuối tùy chỉnh cho phép bạn chỉ hiển thị các lệnh thiết yếu.

Cách thức hoạt động bên trong: WinRM, WS-Man và các cổng
PowerShell Remoting hoạt động theo mô hình máy khách-máy chủ. Máy khách gửi yêu cầu WS-Management qua HTTP (5985/TCP) hoặc HTTPS (5986/TCP). Trên mục tiêu, dịch vụ Quản lý từ xa Windows (WinRM) sẽ lắng nghe, giải quyết điểm cuối (cấu hình phiên) và lưu trữ phiên PowerShell ở chế độ nền (quy trình wsmprovhost.exe), trả về kết quả được tuần tự hóa cho khách hàng trong XML thông qua SOAP.
Lần đầu tiên bạn bật Remoting, các trình lắng nghe sẽ được cấu hình, ngoại lệ tường lửa thích hợp sẽ được mở và cấu hình phiên sẽ được tạo. Từ PowerShell 6 trở lên, nhiều phiên bản sẽ cùng tồn tại và Enable-PSRemoting Đăng ký điểm cuối với tên phản ánh phiên bản (ví dụ: PowerShell.7 và PowerShell.7.xy).
Nếu bạn chỉ cho phép HTTPS trong môi trường của mình, bạn có thể tạo một người nghe an toàn với chứng chỉ do một CA đáng tin cậy cấp (khuyến nghị). Ngoài ra, một giải pháp thay thế khác là sử dụng TrustedHosts một cách hạn chế, có tính đến rủi ro, cho các tình huống nhóm làm việc hoặc máy tính không thuộc miền.
Lưu ý rằng Powershell Remoting có thể cùng tồn tại với các lệnh ghép ngắn có -ComputerName, nhưng Microsoft thúc đẩy WS-Man là phương pháp quản lý từ xa tiêu chuẩn và tiên tiến trong tương lai.
Kích hoạt PowerShell Remoting và các tham số hữu ích
Trên Windows, chỉ cần mở PowerShell với tư cách quản trị viên và chạy Enable-PSRemotingHệ thống khởi động WinRM, cấu hình tự động khởi động, kích hoạt trình lắng nghe và tạo các quy tắc tường lửa phù hợp. Trên các máy khách có cấu hình mạng công cộng, bạn có thể chủ động cho phép điều này bằng -SkipNetworkProfileCheck (và sau đó củng cố bằng các quy tắc cụ thể):
Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Cú pháp cũng cho phép, -Xác nhận y -Chuyện gì xảy ra nếu để kiểm soát sự thay đổi. Hãy nhớ: Nó chỉ có sẵn trên Windowsvà bạn phải chạy bảng điều khiển nâng cao. Các quy tắc được tạo khác nhau giữa phiên bản Máy chủ và Máy khách, đặc biệt là trên mạng công cộng, theo mặc định, chúng bị giới hạn trong mạng con cục bộ trừ khi bạn mở rộng phạm vi (ví dụ: với Set-NetFirewallRule).
Để liệt kê các cấu hình phiên đã ghi lại và xác nhận rằng mọi thứ đã sẵn sàng, hãy sử dụng Nhận-PSSessionCấu hìnhNếu điểm cuối PowerShell.x và Workflow xuất hiện thì khung Remoting đang hoạt động.

Chế độ sử dụng: 1 đến 1, 1 đến nhiều và phiên liên tục
Khi bạn cần một bảng điều khiển tương tác trên một máy tính duy nhất, hãy chuyển sang Nhập cảnhLời nhắc sẽ xuất hiện và mọi thứ bạn thực hiện sẽ được chuyển đến máy chủ từ xa. Bạn có thể sử dụng lại thông tin đăng nhập bằng lệnh Get-Credential để tránh phải nhập lại liên tục:
$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession
Nếu những gì bạn đang tìm kiếm là gửi lệnh đến nhiều máy tính cùng một lúc, công cụ này là Lệnh gọi với một khối lệnh. Theo mặc định, nó khởi chạy tối đa 32 kết nối đồng thời (có thể điều chỉnh bằng -ThrottleLimit). Kết quả được trả về dưới dạng các đối tượng được hủy tuần tự hóa (không có phương pháp “trực tiếp”):
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred
Bạn cần gọi một phương thức như .Stop() hoặc .Start()? Hãy thực hiện. bên trong khối lệnh trong ngữ cảnh từ xa, chứ không phải đối tượng cục bộ đã được khử tuần tự hóa, và thế là xong. Nếu có lệnh ghép ngắn tương đương (Stop-Service/Start-Service), thì thường nên sử dụng lệnh đó để rõ ràng hơn.
Để tránh chi phí bắt đầu và kết thúc phiên họp trong mỗi cuộc gọi, hãy tạo một PSSession liên tục và sử dụng lại nó qua nhiều lần gọi. Sử dụng New-PSSession để tạo kết nối và sử dụng Invoke-Command-Session để sử dụng lại đường hầm. Đừng quên đóng nó bằng Remove-PSSession khi bạn hoàn tất.
Tuần tự hóa, giới hạn và thực hành tốt
Một chi tiết quan trọng: khi di chuyển, các vật thể "+phẳng ra" và đến nơi như ảnh chụp nhanh được hủy tuần tự hóa, với các thuộc tính nhưng không có phương thức. Điều này là cố ý và tiết kiệm băng thông, nhưng đồng nghĩa với việc bạn không thể sử dụng các thành viên thực thi logic (như .Kill()) trên bản sao cục bộ. Giải pháp rất rõ ràng: gọi các phương thức đó. từ xa và nếu bạn chỉ cần một số trường nhất định, hãy lọc bằng Select-Object để gửi ít dữ liệu hơn.
Trong các tập lệnh, hãy tránh Enter-PSSession (dành cho mục đích tương tác) và sử dụng Invoke-Command với các khối tập lệnh. Nếu bạn dự đoán có nhiều lệnh gọi hoặc cần bảo toàn trạng thái (biến, mô-đun đã nhập), sử dụng các phiên liên tục và nếu có thể, hãy ngắt kết nối/kết nối lại chúng bằng Disconnect-PSSession/Connect-PSSession trong PowerShell 3.0 trở lên.
Xác thực, HTTPS và các tình huống ngoài miền
Trong một miền, xác thực gốc là Kerberos Và mọi thứ đều diễn ra trôi chảy. Khi thiết bị không thể xác minh tên máy chủ hoặc bạn kết nối với IP hoặc bí danh CNAME, bạn cần một trong hai tùy chọn sau: 1) Trình lắng nghe HTTPS có chứng chỉ được cấp bởi CA mà bạn tin cậy hoặc 2) thêm đích (tên hoặc IP) vào TrustedHosts và sử dụng thông tin xác thựcTùy chọn thứ hai vô hiệu hóa xác thực lẫn nhau cho máy chủ đó, do đó giảm phạm vi xuống mức tối thiểu cần thiết.
Việc thiết lập trình nghe HTTPS yêu cầu một chứng chỉ (lý tưởng nhất là từ PKI hoặc CA công cộng), được cài đặt trong kho lưu trữ nhóm và được liên kết với WinRM. Cổng 5986/TCP sau đó được mở trong tường lửa và được sử dụng từ máy khách. -Sử dụng SSL trong các lệnh ghép ngắn từ xa. Để xác thực chứng chỉ máy khách, bạn có thể ánh xạ chứng chỉ vào một tài khoản cục bộ và kết nối với -Chứng chỉDấu vân tay (Enter-PSSession không chấp nhận điều này trực tiếp; trước tiên hãy tạo phiên bằng New-PSSession.)
Bước nhảy thứ hai và ủy quyền thông tin xác thực
"Nhảy kép" nổi tiếng xuất hiện khi, sau khi kết nối với máy chủ, bạn cần máy chủ đó truy cập vào nguồn tài nguyên thứ ba thay mặt bạn (ví dụ: chia sẻ SMB). Có hai cách để cho phép điều này: CredSSP và ủy quyền Kerberos bị hạn chế dựa trên tài nguyên.
với Tín dụngSSP Bạn cho phép máy khách và bên trung gian ủy quyền thông tin đăng nhập một cách rõ ràng, đồng thời thiết lập chính sách (GPO) để cho phép ủy quyền cho các máy tính cụ thể. Việc cấu hình nhanh chóng, nhưng kém an toàn hơn vì thông tin đăng nhập được truyền dưới dạng văn bản thuần túy trong đường hầm được mã hóa. Luôn giới hạn nguồn và đích.
Sự thay thế được ưa thích trong miền là ủy quyền Kerberos bị hạn chế (ủy quyền hạn chế dựa trên tài nguyên) trong AD hiện đại. Điều này cho phép điểm cuối dựa vào việc nhận ủy quyền từ điểm trung gian cho các dịch vụ cụ thể, tránh để lộ danh tính của bạn khi kết nối ban đầu. Yêu cầu bộ điều khiển miền mới nhất và RSAT được cập nhật.
Điểm cuối tùy chỉnh (Cấu hình phiên)
Một trong những viên ngọc của Remoting là có thể đăng ký các điểm kết nối với khả năng và giới hạn được thiết kế riêng. Trước tiên, bạn tạo một tệp với New-PSSessionConfigurationFile (các mô-đun để tải trước, các hàm hiển thị, bí danh, ExecutionPolicy, LanguageMode, v.v.), sau đó bạn đăng ký tệp đó với Register-PSSessionConfiguration, nơi bạn có thể thiết lập RunAsCredential và quyền (SDDL hoặc giao diện GUI với -ShowSecurityDescriptorUI).
Để ủy quyền an toàn, chỉ hiển thị những gì cần thiết với -VisibleCmdlets/-VisibleFunctions và vô hiệu hóa tập lệnh miễn phí nếu thích hợp với Chế độ ngôn ngữNgôn ngữ bị hạn chế hoặc NoLanguage. Nếu bạn rời khỏi FullLanguage, ai đó có thể sử dụng khối tập lệnh để gọi các lệnh chưa được hiển thị, kết hợp với RunAs, nó sẽ là một cái lỗ. Thiết kế các điểm cuối này một cách tỉ mỉ và ghi lại phạm vi của chúng.
Miền, GPO và Groupware
Trong AD, bạn có thể triển khai Powershell Remoting ở quy mô lớn với GPO: cho phép tự động cấu hình trình lắng nghe WinRM, đặt dịch vụ thành Tự độngvà tạo ngoại lệ tường lửa. Hãy nhớ rằng GPO thay đổi cài đặt, nhưng không phải lúc nào cũng bật dịch vụ ngay lập tức; đôi khi bạn cần khởi động lại hoặc buộc cập nhật gpupdate.
Trong nhóm làm việc (không phải miền), hãy cấu hình Remoting với Enable-PSRemoting, thiết lập TrustedHosts trên máy khách (winrm set winrm/config/client @{TrustedHosts=»host1,host2″}) và sử dụng thông tin xác thực cục bộ. Đối với HTTPS, bạn có thể gắn chứng chỉ tự ký, mặc dù khuyến nghị sử dụng CA đáng tin cậy và xác thực tên mà bạn sẽ sử dụng trong -ComputerName trong chứng chỉ (CN/SAN khớp).
Các lệnh cmdlet và cú pháp chính
Một số ít lính biệt kích bao phủ 90% các tình huống hàng ngày. Để kích hoạt/hủy kích hoạt:
Enable-PSRemoting
Disable-PSRemoting
Phiên tương tác 1 đến 1 và thoát:
Enter-PSSession -ComputerName SEC504STUDENT
Exit-PSSession
1 đến nhiều, với sự song song và thông tin xác thực:
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred
Phiên liên tục và tái sử dụng:
$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s
Kiểm tra và WinRM hữu ích:
Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https
Ghi chú thực tế về tường lửa, mạng và cổng
Mở 5985/TCP cho HTTP và 5986/TCP cho HTTPS trên máy tính mục tiêu và trên bất kỳ tường lửa trung gian nàoTrên máy khách Windows, Enable-PSRemoting tạo các quy tắc cho hồ sơ miền và hồ sơ riêng tư; đối với hồ sơ công khai, quy tắc này bị giới hạn ở mạng con cục bộ trừ khi bạn sửa đổi phạm vi bằng Set-NetFirewallRule -RemoteAddress Any (giá trị bạn có thể đánh giá dựa trên rủi ro của mình).
Nếu bạn sử dụng tích hợp SOAR/SIEM chạy lệnh từ xa (ví dụ: từ XSOAR), hãy đảm bảo máy chủ có Giải quyết DNS đến máy chủ, kết nối đến 5985/5986 và thông tin đăng nhập có đủ quyền cục bộ. Trong một số trường hợp, xác thực NTLM/Basic có thể cần điều chỉnh (ví dụ: sử dụng người dùng cục bộ trong Basic với SSL).
Kích hoạt tham số PSRemoting (Tóm tắt hoạt động)
-Xác nhận yêu cầu xác nhận trước khi thực hiện; -Bắt buộc bỏ qua các cảnh báo và thực hiện các thay đổi cần thiết; -SkipNetworkProfileCheck cho phép Remoting trên các mạng máy khách công cộng (mặc định bị giới hạn ở mạng con cục bộ); -WhatIf cho bạn biết điều gì sẽ xảy ra nếu không áp dụng các thay đổi. Ngoài ra, giống như bất kỳ lệnh ghép ngắn chuẩn nào, nó hỗ trợ thông số chung (-Verbose, -ErrorAction, v.v.).
Hãy nhớ rằng "Kích hoạt" không tạo trình nghe hoặc chứng chỉ HTTPS cho bạn; nếu bạn cần mã hóa đầu cuối ngay từ đầu và xác thực dựa trên chứng nhận, cấu hình trình lắng nghe HTTPS và xác thực CN/SAN với tên bạn sẽ sử dụng trong -ComputerName.
Các lệnh WinRM và PowerShell Remoting hữu ích
một số các vật dụng thiết yếu bên giường hàng ngày:
winrm get winrm/config
winrm enumerate winrm/config/listener
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Test-WSMan -ComputerName host -Authentication Default -Credential (Get-Credential)
New-PSSession -ComputerName host
Enter-PSSession -ComputerName host
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Khi quản lý Windows ở quy mô lớn, Remoting cho phép bạn chuyển từ phương pháp "máy tính-đến-máy tính" sang phương pháp khai báo và bảo mật. Bằng cách kết hợp các phiên liên tục, xác thực mạnh (Kerberos/HTTPS), các điểm cuối bị hạn chế và dấu vết rõ ràng để chẩn đoán, bạn đạt được tốc độ và khả năng kiểm soát mà không ảnh hưởng đến bảo mật hoặc kiểm toán. Nếu bạn cũng chuẩn hóa kích hoạt GPO và nắm vững các trường hợp đặc biệt (TrustedHosts, double hop, chứng chỉ), bạn sẽ có một nền tảng từ xa vững chắc cho các hoạt động hàng ngày và ứng phó sự cố.
Biên tập viên chuyên về các vấn đề công nghệ và internet với hơn mười năm kinh nghiệm trong các lĩnh vực truyền thông kỹ thuật số khác nhau. Tôi đã từng làm biên tập viên và người sáng tạo nội dung cho các công ty thương mại điện tử, truyền thông, tiếp thị và quảng cáo trực tuyến. Tôi cũng đã viết trên các trang web kinh tế, tài chính và các lĩnh vực khác. Công việc của tôi cũng là niềm đam mê của tôi. Bây giờ, qua bài viết của tôi trong Tecnobits, Tôi cố gắng khám phá tất cả những tin tức và cơ hội mới mà thế giới công nghệ mang đến cho chúng ta hàng ngày để cải thiện cuộc sống của chúng ta.