需先启用目标主机WinRM服务并配置监听器,再设置本地可信主机列表,然后用Enter-PSSession建立交互会话或Invoke-Command执行单次/批量命令,最后排查服务、连通性、防火墙及认证问题。

如果您希望在Windows系统中通过PowerShell远程连接另一台计算机并执行命令,则需确保目标主机已启用PowerShell远程处理功能,并配置了正确的网络与权限策略。以下是实现此操作的具体步骤:
一、启用远程目标主机的PowerShell远程处理服务
PowerShell远程管理依赖WinRM(Windows Remote Management)服务,该服务默认在大多数Windows客户端版本中处于禁用状态,必须手动启用并配置监听器。
1、以管理员身份运行PowerShell。
2、执行命令:Enable-PSRemoting -Force,该命令将启动WinRM服务、设置其为自动启动、创建防火墙规则并注册必要配置。
3、验证WinRM监听器是否已就绪:运行 winrm enumerate winrm/config/listener,确认输出中包含类似“Transport = HTTP”或“HTTPS”的监听条目。
二、配置目标主机的信任主机列表(适用于非域环境)
当远程主机不在同一Active Directory域中时,本地PowerShell会因证书或身份验证策略拒绝连接;此时需将目标IP或主机名添加至本地受信任的主机列表。
1、在本地控制端PowerShell中执行:Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.100" -Force(将IP替换为目标主机实际地址)。
2、如需添加多个地址,使用逗号分隔:Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.100,192.168.1.101" -Force。
3、查看当前可信主机列表:Get-Item WSMan:\localhost\Client\TrustedHosts。
三、使用Enter-PSSession建立交互式远程会话
Enter-PSSession命令启动一个持久的、交互式的远程PowerShell会话,所有后续输入均在远程主机上下文中执行,适合需要多步连续操作的场景。
1、确保已获取目标主机的管理员凭据,或当前用户具备远程管理权限。
2、执行:Enter-PSSession -ComputerName 192.168.1.100 -Credential (Get-Credential),系统将弹出凭据窗口要求输入用户名和密码。
3、成功连接后,命令行提示符将变为 [192.168.1.100]: PS>,表示当前处于远程会话中。
4、输入任意PowerShell命令(如 Get-Service WinRM),结果即时返回并运行于远程主机。
5、退出会话:键入 Exit-PSSession 或按 Ctrl+Z 后回车。
四、使用Invoke-Command执行单次或批量远程命令
Invoke-Command无需维持持续会话,适用于一次性任务或向多台主机并行下发指令,资源开销更低且更易脚本化。
1、对单台主机运行命令:Invoke-Command -ComputerName 192.168.1.100 -ScriptBlock { Get-Process | Where-Object CPU -gt 100 } -Credential (Get-Credential)。
2、对多台主机并行执行相同命令:Invoke-Command -ComputerName "192.168.1.100","192.168.1.101" -ScriptBlock { hostname } -Credential $cred($cred需预先通过Get-Credential赋值)。
3、从本地文件导入脚本块:$script = Get-Content .\remote-task.ps1 -Raw; Invoke-Command -ComputerName 192.168.1.100 -ScriptBlock ([scriptblock]::Create($script)) -Credential $cred。
五、解决常见连接失败问题
连接中断或认证拒绝通常源于网络层、服务状态或安全策略限制,需逐项排查。
1、检查WinRM服务状态:在目标主机上运行 Get-Service WinRM,确认状态为“Running”。
2、测试WinRM连通性:Test-WsMan 192.168.1.100,若返回详细配置信息则证明基础通信正常。
3、验证防火墙放行:确保入站规则“Windows Remote Management (HTTP-In)”在目标主机的专用/公用配置文件中已启用。
4、处理NTLM/Kerberos认证错误:在非域环境中,可临时启用NTLM:Set-Item WSMan:\localhost\Service\Auth\Negotiate -Value $true,但须知此举降低安全性。









