当前位置:首页 > CMS教程 > 正文

powershell 连接远程服务器

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

前置条件准备

1 目标服务器要求

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

2 本地客户端配置

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

# 查看当前会话加密级别
Get-Item WSMan:localhostClientTrustedHosts
# 添加目标服务器到受信任列表(可选)
Set-Item WSMan:localhostClientTrustedHosts -Value "目标服务器FQDN或IP" -Concatenate

核心连接方式详解

1 交互式会话(Enter-PSSession)

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

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

示例

# 使用当前用户凭证(需满足委派条件)
Enter-PSSession -ComputerName FileServer01
# 显式指定域账户凭证
$cred = Get-Credential -Message "请输入管理员账号"
Enter-PSSession -ComputerName DBServer02 -Credential $cred -UseSSL

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

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

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