凌峰创科服务平台

PowerShell远程连接服务器需哪些配置步骤?

核心方法概览

  1. Enter-PSSession (交互式会话):像远程桌面一样,你会在本地 PowerShell 窗口中直接操作远程服务器的命令行,适用于需要长时间、多步骤的交互式管理任务。
  2. Invoke-Command (远程执行命令):这是最灵活、最强大的方法,你可以在本地编写一个或多个命令,然后将它们发送到远程服务器执行,并将结果返回本地,非常适合执行单个命令或脚本块。
  3. WinRM (Windows 远程管理):这是 PowerShell 远程连接的底层协议,理解并配置 WinRM 是成功连接的关键,尤其是在跨网络或不同版本 Windows 系统之间时。
  4. 其他方法:如 plink (PuTTY) 或 SSH,这些是更通用的工具,但不是 PowerShell 的原生方式。

Enter-PSSession - 交互式会话

当你需要进入远程服务器,像坐在它面前一样操作时,这个命令非常方便。

PowerShell远程连接服务器需哪些配置步骤?-图1
(图片来源网络,侵删)

基本语法

Enter-PSSession -ComputerName <服务器名或IP> -Credential <你的用户名>

详细步骤

第1步:准备工作 (在远程服务器上)

确保远程服务器上的 WinRM 服务已启动并配置正确,在大多数现代 Windows Server (2012+) 和 Windows 10/11 系统上,这通常是默认开启的,你可以通过在远程服务器上运行以下命令来检查和配置:

# 检查 WinRM 服务状态,应为 "Running"
Get-Service WinRM
# 如果未运行,可以启动并设置为自动启动
Set-Service -Name WinRM -StartupType 'Automatic'
Start-Service -Name WinRM
# 测试监听器
winrm enumerate winrm/config/listener

第2步:在本地客户端连接

  1. 打开一个 PowerShell 窗口。
  2. 使用 Enter-PSSession 命令。

示例:

PowerShell远程连接服务器需哪些配置步骤?-图2
(图片来源网络,侵删)
# 连接到名为 "SRV01" 的服务器
Enter-PSSession -ComputerName SRV01 -Credential (Get-Credential)
  • 运行此命令后,系统会弹出一个窗口,提示你输入用户名和密码。
  • 输入具有管理员权限(或足够权限)的账户信息后,你的 PowerShell 提示符会改变,通常显示 [SRV01]: PS C:\Users\YourUser\Documents>
  • 现在你输入的所有命令都将在远程服务器 SRV01 上执行。
  • 完成后,输入 Exit 即可返回本地会话。

Invoke-Command - 远程执行命令

这是最常用和推荐的方法,特别是对于自动化任务,它更轻量,不会占用一个持续的会话。

基本语法

Invoke-Command -ComputerName <服务器名或IP> -Credential <你的用户名> -ScriptBlock { <要执行的PowerShell代码> }

详细步骤

第1步:准备工作 (同上) 确保远程服务器的 WinRM 已正确配置。

第2步:在本地客户端执行命令

示例1:执行单个命令

# 获取远程服务器的操作系统版本信息
Invoke-Command -ComputerName SRV01 -Credential (Get-Credential) -ScriptBlock { Get-ComputerInfo | Select-Object WindowsProductName, OsVersion }

示例2:执行多个命令或复杂脚本

使用 & 符号可以在一个 ScriptBlock 中执行多个命令。

Invoke-Command -ComputerName SRV01 -Credential (Get-Credential) -ScriptBlock {
    # 停止 IIS 网站
    Stop-Website -Name "Default Web Site"
    # 创建一个备份文件夹
    $backupPath = "C:\Backup\$(Get-Date -Format 'yyyyMMdd')"
    New-Item -ItemType Directory -Path $backupPath -Force
    Write-Host "备份文件夹已创建在: $backupPath"
}

示例3:从本地文件执行脚本

这是 Invoke-Command 的一个强大功能,你可以将本地的 .ps1 脚本文件发送到远程服务器执行。

# 假设你本地有一个名为 C:\Scripts\Get-LogSize.ps1 的脚本
$scriptPath = "C:\Scripts\Get-LogSize.ps1"
Invoke-Command -ComputerName SRV01 -Credential (Get-Credential) -FilePath $scriptPath

示例4:使用会话 (Session) 提高性能

如果需要对同一台服务器执行多次命令,创建一个会话可以大大提高效率,因为它避免了每次都建立新的连接。

# 1. 创建一个会话
$session = New-PSSession -ComputerName SRV01 -Credential (Get-Credential)
# 2. 使用这个会话执行多个命令
Invoke-Command -Session $session -ScriptBlock { Get-Process | Where-Object {$_.CPU -gt 10} }
Invoke-Command -Session $session -ScriptBlock { Get-Service | Where-Object {$_.Status -eq 'Running'} }
# 3. 任务完成后,移除会话
Remove-PSSession -Session $session

配置 WinRM (关键步骤)

如果连接失败,90% 的问题是 WinRM 配置不正确。

在远程服务器上启用 WinRM

以管理员身份在远程服务器的 PowerShell 中运行:

# 设置 WinRM 监听器,使用 HTTPS 更安全(需要配置证书)
# WinRM quickconfig
# 如果只是内网测试,可以使用 HTTP
winrm quickconfig -force

运行后,它会提示你设置防火墙规则,选择 Y (是) 即可。

配置信任的主机

如果你的客户端不在远程服务器的“受信任的主机”列表中,连接可能会被策略阻止,在客户端的 PowerShell 中执行以下命令:

# 将远程服务器 IP 或主机名添加到受信任主机列表
# 注意:使用 * 会信任所有主机,存在安全风险,仅限测试环境使用。
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "SRV01,192.168.1.100" -Force
  • 要恢复默认设置,可以运行:Set-Item WSMan:\localhost\Client\TrustedHosts -Value "" -Force

使用 SSH (现代替代方案)

从 PowerShell 6+ 开始,官方支持通过 SSH 进行远程连接,这比 WinRM 更通用,也更容易在 Linux 和 Windows 之间互通。

前提条件

  1. 在客户端和服务器上都安装了 PowerShell 7+
  2. 在客户端和服务器上都安装了 OpenSSH
  3. 在服务器上已配置好 SSH 服务,并允许密码或密钥认证。

连接步骤

  1. 在服务器上设置 PowerShell 为 SSH 的子系统。 编辑服务器的 SSH 配置文件 (C:\ProgramData\ssh\sshd_config),确保有以下行(去掉 注释):

    Subsystem powershell C:/Program Files/PowerShell/7/pwsh.exe -sshs -NoLogo -NoProfile

    然后重启 SSH 服务:Restart-Service sshd

  2. 在客户端使用 Enter-PSSession 连接

    # -KeyFilePath 指定你的 SSH 私钥文件路径
    Enter-PSSession -HostName SRV01 -UserName Administrator -KeyFilePath C:\Users\YourUser\.ssh\id_rsa

    如果使用密码认证:

    Enter-PSSession -HostName SRV01 -UserName Administrator
  3. 在客户端使用 Invoke-Command 连接

    Invoke-Command -HostName SRV01 -UserName Administrator -ScriptBlock { Get-Process }

总结与对比

特性 Enter-PSSession (WinRM) Invoke-Command (WinRM) Enter-PSSession (SSH)
用途 交互式、长时间操作 自动化、一次性或多次命令 交互式或自动化
会话类型 持续的交互式会话 无状态或使用会话 持续的交互式会话
灵活性 较低 极高
协议 WinRM WinRM SSH
跨平台 仅限 Windows 仅限 Windows Windows, Linux, macOS
推荐场景 需要手动排错、探索服务器 脚本自动化、批量管理
分享:
扫描分享到社交APP
上一篇
下一篇