上一篇
powershell 连接远程服务器
- CMS教程
- 2025-08-14
- 2
通过
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体系