当前位置:首页 > 云服务器 > 正文

powershell 连接远程服务器

通过 Enter-PSSession -ComputerName 可快速建立 PowerShell

前置条件准备

1 目标服务器要求

组件 要求
操作系统 Windows Server 2008 R2+ / Windows 7+(需安装最新版补丁)
功能模块 已启用且运行 Windows Remote Management (WinRM) 服务
网络策略 开放TCP 5985/5986端口(HTTPS);若使用HTTP则为5985
账户权限 本地管理员或具备远程管理权限的域账户

2 本地客户端配置

执行以下命令验证基础环境:

powershell 连接远程服务器 第1张

核心连接方式详解

1 交互式会话(Enter-PSSession)

适用场景:需要持续操作远程主机的完整Shell环境

语法结构

Enter-PSSession -ComputerName <目标服务器> [-Credential <PSCredential对象>] [-UseSSL] [-Port <自定义端口>]

示例

powershell 连接远程服务器 第2张

2 临时命令执行(Invoke-Command)

适用场景:单次执行特定命令并返回结果

语法结构

powershell 连接远程服务器 第3张

Invoke-Command -ComputerName <目标服务器> -ScriptBlock { <命令序列> } [-Credential <PSCredential>] [-HideComputerName]

示例

# 获取远程服务器系统信息 Invoke-Command -ComputerName WebServer03 -ScriptBlock { Get-CimInstance Win32_OperatingSystem } -Credential (Get-Credential) # 批量执行多台服务器(数组输入) $servers = @("SRV01","SRV02","SRV03") Invoke-Command -ComputerName $servers -ScriptBlock { Get-Service | Where Status -EQ Stopped }

3 持久化会话(New-PSSession)

适用场景:创建可复用的会话对象供后续操作

典型工作流

# 创建新会话 $session = New-PSSession -ComputerName AppServer05 -Credential (Get-Credential) -Authentication Negotiate # 通过会话执行命令 Invoke-Command -Session $session -ScriptBlock { Get-Process } # 接收完整输出对象 Receive-PSSession -Session $session # 结束后清理会话 Remove-PSSession -Session $session


关键参数对照表

参数 作用说明 默认值
-ComputerName 目标服务器名称/IP
-Credential 替代当前用户的认证凭据 当前登录用户
-UseSSL 强制使用HTTPS协议 false
-Port 指定非标准WinRM端口 5985(HTTP)

5986(HTTPS)

-ThrottleLimit 并发连接数限制(仅对Invoke-Command有效) 32
-SessionOption 附加会话配置(如操作超时时间)


常见错误及解决方案

错误现象 根本原因 解决方法
“连接被拒绝” WinRM服务未启动/防火墙拦截 确保服务正在运行+放行5985/5986端口
“基本身份验证失败” 账户无远程登录权限/密码错误 检查用户组成员+重置密码
“证书链不完整” 自签名证书未被信任 导入证书到LocalMachineRoot目录
“访问被拒绝” UAC策略阻止 以管理员身份运行PowerShell
“找不到网络路径” DNS解析异常/网络不通 改用IP地址+测试ping连通性


进阶技巧

1 跳过二次确认(危险操作)

# 添加目标服务器到信任列表(永久有效) Set-Item WSMan:localhostClientTrustedHosts -Value "192.168.1.100" -Force

2 代理跳板机连接

# 通过中间服务器跳转(需双向信任) Enter-PSSession -ComputerName MidServer01 -Credential $cred1 Enter-PSSession -ComputerName BackendDB02 -Credential $cred2

3 日志追踪

# 查看最近连接记录 Get-WinEvent -LogName Microsoft-Windows-WinRM/Operational | Where Message -like "User" | Select TimeCreated,Message


相关问题与解答

Q1: 为什么会出现”访问被拒绝”错误即使提供了正确密码?

解答:这是由于目标服务器的本地安全策略限制,需执行以下任一操作:① 在目标服务器上运行winrm set winrm/config/service/auth @{Basic="true"}启用基本认证;② 将使用的账户加入目标服务器的Remote Management Users组。

Q2: 如何在Linux服务器上实现类似功能?

解答:对于Linux目标,可采用以下两种方式:① 安装OpenSSH服务器后使用ssh命令;② 在PowerShell中使用跨平台方案:ssh admin@linuxhost 'uname -a'(需安装OpenSSH客户端),微软官方提供PSRemoting仅支持Windows体系

0