
如果您希望在Windows系统中使用PowerShell远程管理其他服务器,需确保目标计算机已启用WinRM服务并配置了正确的信任关系。以下是实现远程会话连接的多种方法:
一、启用并配置目标服务器的WinRM服务
远程PowerShell会话依赖于Windows Remote Management(WinRM)服务,该服务默认可能处于禁用状态,必须手动启动并设置监听策略与身份验证方式。
1、以管理员身份运行PowerShell。
2、执行命令 Enable-PSRemoting -Force,自动启用WinRM、启动服务、创建防火墙规则并配置基本监听器。
3、运行 winrm quickconfig 验证配置结果,确认输出中包含“WinRM service is already running”和“WSManFault”未出现。
4、如需允许HTTP明文传输(仅限受信内网),执行 Set-Item WSMan:\localhost\Client\TrustedHosts -Value “*”;若指定IP,替换为 “192.168.1.10,192.168.1.11”。
二、使用Enter-PSSession建立交互式远程会话
Enter-PSSession用于启动一个实时、交互式的PowerShell会话,所有后续命令均在远程计算机上下文中执行,适用于调试与临时管理任务。
1、确保本地与远程主机时间偏差不超过5分钟,否则Kerberos认证将失败。
2、执行命令 Enter-PSSession -ComputerName Server01 -Credential (Get-Credential),系统将弹出凭据窗口要求输入远程管理员账户。
3、成功连接后,命令行提示符变为 [Server01]: PS C:\>,表示当前处于远程会话中。
4、输入 Exit-PSSession 或按 Ctrl+Z 退出当前远程会话。
三、通过PSSession对象实现持久化会话管理
与Enter-PSSession不同,New-PSSession创建的是可复用、后台驻留的会话对象,支持多命令并发提交、跨会话数据共享及断开重连,适合自动化脚本场景。
1、运行 $s = New-PSSession -ComputerName Server01 -Credential (Get-Credential) 创建会话并保存至变量。
2、使用 Invoke-Command -Session $s -ScriptBlock { Get-Service WinRM } 在该会话中执行单条命令。
3、执行 Import-PSSession -Session $s -Module NetSecurity 将远程模块导入本地会话,使cmdlet可直接调用。
4、完成操作后,运行 Remove-PSSession -Session $s 显式释放远程资源。
四、绕过证书验证连接HTTPS WinRM端点
当目标服务器使用自签名SSL证书或未加入域时,PowerShell默认拒绝建立HTTPS远程连接,需临时禁用证书链验证机制。
1、创建自定义会话选项: $opt = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck。
2、使用该选项发起连接: Enter-PSSession -ComputerName server01.contoso.com -UseSSL -SessionOption $opt -Credential (Get-Credential)。
3、注意:此方式仅适用于测试环境,生产环境中应部署由受信CA签发的有效证书。
五、基于CIM Session的无WinRM依赖远程管理
CIM(Common Information Model)协议可通过WMI提供与PowerShell Remoting相似的能力,且不强制依赖WinRM服务,在某些受限策略下可作为替代方案。
1、确认目标主机启用WMI服务并开放TCP 135端口及动态RPC端口范围。
2、执行 $cim = New-CimSession -ComputerName Server01 -Credential (Get-Credential) 建立CIM会话。
3、运行 Get-CimInstance -CimSession $cim -ClassName Win32_OperatingSystem 获取远程系统信息。
4、使用完毕后执行 Remove-CimSession -CimSession $cim 清理会话。

评论(0)