如何使用 PowerShell Remoting 通过手机控制 PC

最后更新: 2025年15月10日

  • 远程处理使用 WinRM/WS-Man (HTTP/HTTPS) 并允许具有安全控制的一对一、一对多和持久会话。
  • Enable-PSRemoting 配置服务、侦听器和防火墙;HTTPS 需要有效的证书和 CN/SAN 匹配。
  • 结果以反序列化形式返回;方法在远程脚本块内调用,并使用自定义端点进行细粒度委派。
PowerShell 远程处理

您可能已经在本地使用 PowerShell 自动执行了许多任务,但您真正需要做的是什么? PowerShell Remoting 带来不同 远程服务器是指在远程计算机上运行命令,无论是几台还是几百台,以交互方式还是并行方式。这项技术自 Windows PowerShell 2.0 开始提供,并在 3.0 版本中得到增强,它基于 WS-Management (WinRM),并将 PowerShell 在强大、可扩展且安全的远程管理通道中。

首先,理解两个关键概念很重要:带有 -ComputerName 参数 (例如,Get-Process 或 Get-Service)不是 Microsoft 推荐的长期路径,并且 PowerShell Remoting 不能作为一种“黑客”手段。事实上, 强制相互认证、审计日志并尊重您的通常权限,而无需存储凭据或以超级权限神奇地运行任何东西。

什么是 PowerShell Remoting 以及为什么要使用它?

PowerShell 远程处理远程执行几乎任何命令 您可以在本地会话中启动,从查询服务到部署配置,并同时在数百台计算机上执行这些操作。与接受“-ComputerName”(许多使用 DCOM/RPC)的 cmdlet 不同,远程处理 通过 WS-Man (HTTP/HTTPS) 传输,它对防火墙更加友好,允许并行并将工作卸载到远程主机而不是客户端。

这转化为三个实际优势:大规模执行时性能更佳, 减少网络摩擦 使用限制性规则和与 Kerberos/HTTPS 一致的安全模型。此外,由于不依赖于每个 cmdlet 实现自己的远程,Remoting 适用于任何剧本或角色 目的地可用。

默认情况下,最新的 Windows 服务器都启用了远程处理;在 Windows 10/11 你激活它 只需一个 cmdlet。没错,您可以使用备用凭据、持久会话、自定义端点等等。

注意:远程处理并不等同于打开所有内容。默认情况下, 只有管​​理员 他们可以连接,并以他们的身份执行操作。如果您需要细粒度的委托,自定义端点允许您仅公开必要的命令。

PowerShell 远程处理体系结构

内部工作原理:WinRM、WS-Man 和端口

PowerShell Remoting 采用客户端-服务器模型。客户端通过以下方式发送 WS-Management 请求: HTTP(5985/TCP)或 HTTPS(5986/TCP)在目标上,Windows 远程管理 (WinRM) 服务会进行侦听、解析端点(会话配置),并在后台托管 PowerShell 会话(wsmprovhost.exe 进程)。 将序列化的结果返回给客户端 通过 SOAP 以 XML 格式。

首次启用 Remoting 时,会配置侦听器、打开相应的防火墙例外并创建会话配置。从 PowerShell 6 开始,多个版本共存,并且 启用PSRemoting 使用反映版本的名称注册端点(例如,PowerShell.7 和 PowerShell.7.xy)。

独家内容 - 点击这里  如何免费从我的手机控制孩子的手机

如果您的环境中仅允许 HTTPS,您可以创建一个 安全监听器 使用受信任 CA 颁发的证书(推荐)。或者,另一种方法是,在工作组场景或非域计算机中,以有限且风险意识强的方式使用 TrustedHosts。

请注意,Powershell Remoting 可以与带有 -ComputerName 的 cmdlet 共存,但是 微软推出WS-Man 作为远程管理的标准和面向未来的方式。

启用 PowerShell 远程处理和有用的参数

在 Windows 上,只需以管理员身份打开 PowerShell 并运行 启用PSRemoting系统启动 WinRM,配置自动启动,启用监听器,并创建相应的防火墙规则。在具有公网配置文件的客户端上,您可以故意允许此操作 -SkipNetworkProfileCheck (然后用具体规则强化):

Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force

 

该语法还允许, -确认 y -如果什么 用于变更控制。请记住: 仅适用于 Windows,并且您必须运行提升权限的控制台。服务器版本和客户端版本创建的规则有所不同,尤其是在公共网络上,默认情况下,规则仅限于本地子网,除非您扩展范围(例如,使用 Set-NetFirewallRule)。

要列出已记录的会话配置并确认一切准备就绪,请使用 获取 PSSessionConfiguration如果出现 PowerShell.x 和 Workflow 端点,则 Remoting 框架可以运行。

使用 PowerShell 进行远程会话

使用模式:一对一、一对多和持久会话

当您需要在单台计算机上使用交互式控制台时,请转到 进入-的PSSession提示符将会出现,你执行的所有内容都将发送到远程主机。你可以使用 Get-Credential 重复使用凭据,以避免不断重新输入它们:

$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession

如果您需要的是同时向多台计算机发送命令,那么该工具就是 调用命令 使用脚本块。默认情况下,它最多启动 32 个并发连接(可使用 -ThrottleLimit 进行调整)。结果返回如下 反序列化对象 (没有“实时”方法):

Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred

需要调用 .Stop() 或 .Start() 之类的方法吗?那就调用吧。 在脚本块内 在远程上下文中,而不是本地反序列化对象,就是这样。如果有等效的 cmdlet (Stop-Service/Start-Service),通常最好使用它来清晰起见。

为了避免每次通话时开始和结束会话的成本,请创建一个 持久 PSSession 并在多个调用中重复使用它。使用 New-PSSession 创建连接,并使用 Invoke-Command-Session 重复使用隧道。完成后,别忘了使用 Remove-PSSession 关闭它。

序列化、限制和良好实践

一个重要的细节:当移动时,物体会“变平”,并到达 反序列化快照,有属性但没有方法。这是故意的,可以节省带宽,但这意味着您无法使用在本地副本上执行逻辑的成员(例如 .Kill())。解决方案很明显:调用这些方法。 在遥远的地方 如果您只需要某些字段,请使用 Select-Object 进行过滤以发送更少的数据。

独家内容 - 点击这里  如何保证 Facebook Messenger 的安全?

在脚本中,避免使用 Enter-PSSession(用于交互使用),并使用 Invoke-Command 和脚本块。如果您预计会有多个调用或需要保留状态(变量、导入的模块), 使用持久会话 如果适用,使用 PowerShell 3.0+ 中的 Disconnect-PSSession/Connect-PSSession 断开/重新连接它们。

身份验证、HTTPS 和域外场景

在域中,本机身份验证 刻耳柏洛斯 一切顺利。当设备无法验证服务器名称,或者您连接到 CNAME IP 或别名时,您需要以下两个选项之一:1)监听器 带证书的 HTTPS 由您信任的 CA 颁发,或者 2)将目标(名称或 IP)添加到 TrustedHosts 并 使用凭证第二个选项禁用该主机的相互身份验证,因此它将范围缩小到必要的最小值。

设置 HTTPS 监听器需要证书(最好来自您的 PKI 或公共 CA),该证书安装在团队存储中并绑定到 WinRM。然后在防火墙中打开端口 5986/TCP,并从客户端使用。 -使用SSL 在远程 cmdlet 中。对于客户端证书身份验证,您可以将证书映射到本地帐户并连接到 -证书指纹 (Enter-PSSession 不直接接受此命令;请先使用 New-PSSession 创建会话。)

第二跳和凭证委托

著名的“双跳”是指在连接到服务器后,需要该服务器访问 第三资源 代表您(例如,SMB 共享)。有两种方法可以实现这一点:CredSSP 和基于资源的约束 Kerberos 委派。

CredSSP 您允许客户端和中介明确委托凭据,并设置策略(GPO)以允许将凭据委托给特定计算机。这种方法配置起来很快,但安全性较低,因为凭据在加密隧道中以明文形式传输。务必限制来源和目的地。

域中的首选替代方案是 受限的 Kerberos 委派 (基于资源的约束委派)在现代 AD 中。这允许端点依赖于从中间点接收特定服务的委派,从而避免在初始连接时暴露您的身份。需要最新的域控制器和更新的 RSAT。

自定义端点(会话配置)

远程处理的一大亮点是能够注册连接点 定制功能和限制。首先,使用 New-PSSessionConfigurationFile 生成一个文件(要预加载的模块、可见函数、别名、ExecutionPolicy、LanguageMode 等),然后使用 Register-PSSessionConfiguration 注册它,您可以在其中设置 以凭据运行 和权限(带有 -ShowSecurityDescriptorUI 的 SDDL 或 GUI 界面)。

为了安全委派,仅使用 -VisibleCmdlets/-VisibleFunctions 公开必要的内容,并在适当的情况下禁用自由脚本 语言模式受限语言 或 NoLanguage。如果保留 FullLanguage,有人可能会使用脚本块调用未公开的命令,这些命令与 RunAs 结合使用, 那将是一个洞. 仔细设计这些端点并记录其范围。

域、GPO 和群件

在 AD 中,您可以使用 GPO 大规模部署 Powershell Remoting:允许自动配置 WinRM 侦听器, 将服务设置为自动,并创建防火墙例外。请记住,GPO 会更改设置,但它们并不总是会立即启用服务;有时您需要重新启动或强制执行 gpupdate。

独家内容 - 点击这里  网络安全

在工作组(非域)中,使用以下方式配置远程处理 启用PSRemoting,在客户端上设置 TrustedHosts(winrm set winrm/config/client @{TrustedHosts=»host1,host2″})并使用本地凭据。对于 HTTPS,您可以挂载自签名证书,但建议使用受信任的 CA 和 验证名称 您将在证书中的 -ComputerName 中使用它(CN/SAN 匹配)。

关键 cmdlet 和语法

少数突击队员掩护 90% 的日常场景. 要激活/停用:

Enable-PSRemoting    
Disable-PSRemoting

互动环节 1 比 1 并退出:

Enter-PSSession -ComputerName SEC504STUDENT 
Exit-PSSession

一对多,具有并行性和凭证:

Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred

持久会话 并重复使用:

$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s

测试和 WinRM 有用:

Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https

防火墙、网络和端口实用说明

在目标计算机上打开 5985/TCP 以进行 HTTP 连接,打开 5986/TCP 以进行 HTTPS 连接。 任何中间防火墙在 Windows 客户端上,Enable-PSRemoting 为域和私有配置文件创建规则;对于公共配置文件,它仅限于本地子网,除非您使用 Set-NetFirewallRule -RemoteAddress Any(您可以根据风险评估的值)修改范围。

如果您使用运行远程命令的 SOAR/SIEM 集成(例如来自 XSOAR),请确保服务器具有 DNS解析 连接到主机、连接到 5985/5986 以及具有足够本地权限的凭证。在某些情况下,NTLM/Basic 身份验证可能需要调整(例如,在 Basic 中使用 SSL 的本地用户)。

Enable-PSRemoting 参数(操作摘要)

-Confirm 执行前要求确认;-Force 忽略警告 并进行必要的更改;-SkipNetworkProfileCheck 启用在公共客户端网络上进行远程处理(默认情况下仅限于本地子网);-WhatIf 显示在不应用更改的情况下会发生什么。此外,与任何标准 cmdlet 一样,它支持 通用参数 (-Verbose、-ErrorAction 等)。

请记住,“启用”不会为您创建 HTTPS 侦听器或证书;如果您从一开始就需要端到端加密,并且需要基于 证书,配置 HTTPS 侦听器并根据您将在 -ComputerName 中使用的名称验证 CN/SAN。

有用的 WinRM 和 PowerShell 远程命令

一些 床头必备物品 日常:

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

在大规模管理 Windows 时,远程处理允许您从“计算机到计算机”迁移到声明式的安全方法。通过结合持久会话、强身份验证 (Kerberos/HTTPS)、受限端点和清晰的诊断跟踪, 你获得速度和控制力 无需牺牲安全性或审计。如果您还能标准化 GPO 激活并掌握特殊情况(TrustedHosts、双跳、证书),您将拥有一个可靠的远程平台,用于日常运营和事件响应。

隐形恶意软件
相关文章:
如何保护您的 PC 免受 XWorm 和 NotDoor 等隐形恶意软件的侵害