当前位置: 首页 > news >正文

[Powershell 入门教程]】第5天内容:远程管理(WinRM、SSH)、PSSession 与 CIM/WMI

本教程专为已有编程基础的学习者设计,强调实战、安全与底层原理,并结合官方文档(Microsoft Learn)进行中文整合。


📅 第5天:远程管理 —— WinRM、SSH、PSSession 与 CIM/WMI

🎯 学习目标

  • 理解 PowerShell 远程管理的两种核心协议:WinRM(Windows 原生)与 SSH(跨平台)
  • 掌握 Enter-PSSession(交互式)与 Invoke-Command(批量执行)的使用
  • 学会创建和管理持久化远程会话(New-PSSession
  • 理解 CIM/WMI 的作用,并能通过远程方式查询系统信息
  • 能在混合环境(Windows/Linux)中统一管理

一、PowerShell 远程管理基础

PowerShell 支持两种远程通信协议:

协议适用系统默认端口特点
WinRM(Windows Remote Management)Windows(需启用)HTTP: 5985
HTTPS: 5986
基于 WS-Management,集成 AD,企业级首选
SSHWindows(需安装 OpenSSH)
Linux/macOS(原生支持)
22跨平台、加密强、防火墙友好

💡 从 PowerShell 6.0+(即 PowerShell Core)开始,SSH 成为跨平台远程标准


二、使用 WinRM 进行远程管理(Windows)

1. 在目标机器上启用 WinRM(以管理员身份运行)

# 快速配置(开发/测试环境)
Enable-PSRemoting -Force# 或手动配置
winrm quickconfig

✅ 此命令会:

  • 启动 WinRM 服务
  • 设置启动类型为自动
  • 创建防火墙规则
  • 允许本地和远程连接

2. 从本地连接远程 Windows 主机

方式A:交互式会话(类似 SSH 登录)
Enter-PSSession -ComputerName SRV01 -Credential (Get-Credential)
  • 输入后进入 [SRV01]: PS C:\> 提示符
  • 所有命令在远程执行
  • 输入 exit 退出
方式B:单次命令执行(适合自动化)
Invoke-Command -ComputerName SRV01 -ScriptBlock {Get-Service Spooler | Select-Object Name, Status
} -Credential (Get-Credential)
方式C:批量操作多台主机
$servers = "SRV01", "SRV02", "SRV03"
Invoke-Command -ComputerName $servers -ScriptBlock {[PSCustomObject]@{Computer = $env:COMPUTERNAMEUptime   = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime}
} -Credential (Get-Credential)

🔍 注意:$env:COMPUTERNAME 在远程上下文中返回的是远程主机名


三、使用 SSH 进行跨平台远程管理

1. 在 Windows 上安装 OpenSSH(Windows 10/11 或 Server 2019+)

# 安装 SSH 客户端和服务器(可选)
Add-WindowsCapability -Online -Name OpenSSH.Client
Add-WindowsCapability -Online -Name OpenSSH.Server# 启动 SSH 服务
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

✅ Linux/macOS 通常已预装 SSH 服务。

2. 使用 SSH 连接远程主机(PowerShell 6+)

# 连接到 Linux
Enter-PSSession -HostName ubuntu01 -UserName XXX-SSHTransport# 连接到 Windows(需已安装 PowerShell + SSH Server)
Enter-PSSession -HostName XXXX.com -UserName XXXX -SSHTransport

⚠️ 要求:

  • 远程主机必须运行 PowerShell Core(pwsh)
  • SSH 服务已配置允许 PowerShell 作为 shell(通过 sshd_config 设置 Subsystem powershell pwsh -sshs

四、持久化远程会话(PSSession)

对于频繁操作同一台主机,建议使用 持久化会话,避免重复认证开销。

# 创建会话
$session = New-PSSession -ComputerName SRV01 -Credential (Get-Credential)# 在会话中执行多个命令
Invoke-Command -Session $session -ScriptBlock { Get-Process }
Invoke-Command -Session $session -ScriptBlock { Get-Service }# 复制文件到远程(PowerShell 5.0+)
Copy-Item -Path .\config.txt -Destination C:\Temp\ -ToSession $session# 最后清理
Remove-PSSession -Session $session

✅ 优势:会话复用、支持文件传输、适合长时间任务。


五、CIM 与 WMI:深入系统底层

1. WMI vs CIM

WMI(旧)CIM(新)
协议DCOMWS-Man(WinRM)或 DCOM
跨平台❌ 仅 Windows✅(通过 WinRM)
PowerShell cmdletGet-WmiObject(已弃用)Get-CimInstance(推荐)

📌 微软官方建议:新脚本一律使用 CIM

2. 本地查询硬件信息(CIM 示例)

# 获取操作系统信息
Get-CimInstance -ClassName Win32_OperatingSystem# 获取磁盘信息
Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3"# 获取 BIOS 信息
Get-CimInstance -ClassName Win32_BIOS

3. 远程查询 CIM 数据

# 通过 WinRM 远程获取内存信息
Get-CimInstance -ClassName Win32_PhysicalMemory -ComputerName SRV01 -Credential (Get-Credential)

💡 底层原理:CIM 使用 WS-Management 协议,与 PowerShell 远程共享同一基础设施(WinRM)。


六、动手实践:综合远程管理任务

场景:检查多台服务器的服务状态并生成报告

$servers = "web01", "db01", "app01"
$cred = Get-Credential "CONTOSO\admin"$results = Invoke-Command -ComputerName $servers -Credential $cred -ScriptBlock {$svc = Get-Service -Name Spooler[PSCustomObject]@{Host       = $env:COMPUTERNAMEService    = $svc.NameStatus     = $svc.StatusStartType  = $svc.StartTypeTimestamp  = Get-Date}
}# 本地格式化输出
$results | Sort-Object Host | Format-Table -AutoSize

扩展:将结果导出为 CSV

$results | Export-Csv -Path ".\ServiceReport.csv" -NoTypeInformation

七、安全与故障排查

常见问题与解决:

问题解决方案
“访问被拒绝”检查凭据、目标机是否启用 WinRM、防火墙是否放行 5985
“RPC 服务器不可用”目标机 WinRM 未启动,运行 winrm quickconfig
SSH 连接失败确保远程主机运行 pwsh,且 sshd 配置了 PowerShell 子系统
双跳(Double-hop)问题使用 CredSSP 或 Kerberos 委派(高级主题)

安全建议:

  • 生产环境优先使用 HTTPS(5986) 或 SSH
  • 避免在脚本中硬编码密码,使用 $PSCredential 或 Azure Key Vault
  • 限制远程用户权限(最小权限原则)

八、今日重点总结

  • ✅ WinRM 是 Windows 企业远程管理的标准,SSH 是跨平台未来。
  • ✅ Enter-PSSession 用于交互,Invoke-Command 用于自动化。
  • ✅ 持久化 PSSession 提升效率,支持文件传输。
  • ✅ CIM(Get-CimInstance 是查询系统信息的现代方式,支持远程。
  • ✅ PowerShell 远程本质是 对象在跨网络流动,保持本地体验。

📚 参考资料(Microsoft Learn)

  • About PowerShell Remoting
  • Using SSH Transport in PowerShell
  • CIM Cmdlets
  • WinRM Security

🏁 课后作业

  1. 在你的本地 Windows 机器上启用 WinRM,并尝试用 Enter-PSSession 连接到 localhost
  2. 编写一个脚本:使用 Invoke-Command 远程获取两台(或模拟两台)主机的磁盘使用率(C 盘),结果包含主机名和剩余空间(GB)。
  3. 使用 Get-CimInstance 查询本地计算机的主板型号(Win32_BaseBoard 类),并思考:如果目标机是 Linux,能否用 CIM 查询?为什么?
http://www.dtcms.com/a/615115.html

相关文章:

  • 知名做漫画网站网站设计制作ihanshi
  • 解释型语言与编译型语言的区别与特点 | 深入了解两者的优势和应用领域
  • 【Java 开发日记】SQL 语句左连接右连接内连接如何使用,区别是什么?
  • 深圳做自适应网站公司网站开发销售怎么做
  • 微电影网站源码xiazai网站购买外链
  • 盐城做网站需要多少钱2023年新开市场动态
  • 投融网站建设方案网站建设要考虑哪些内容
  • 怎么做网站vs2015网站开发实例
  • 数字波束赋型及其数学原理介绍
  • 站长网站模板百度导航地图下载
  • 操作系统?进程(下)!!!
  • “忆境构建师”智能记忆辅助平台 - 产品介绍【具身记忆的软体】
  • 万网 填写网站备案信息西安网站排名推广
  • flash同视频做网站重庆网站搜索引擎seo
  • 网站会员管理一鸣东莞网站建设公司
  • Labview实用03:Labview中事件回调注册与使用
  • 智能制造——解读112页汽车制造业大数据项目之产品主数据蓝图方案【附全文阅读】
  • 如何做优化网站的原创性文章群晖nas做网站性能
  • 龙岗做网站wordpress 4.3.1 下载
  • 关于时间戳
  • 分享一个操作系统一键优化脚本
  • 网站专属定制高端网站建设个人网站建设方案
  • 广东省省考备考(第一百五十一天11.15)——言语、判断推理(强化训练)
  • Android开发-java版:Material Design
  • Python求解随机矩阵的特征值和特征向量
  • 做珠宝商城网站做网站流程 优帮云
  • 定制类做网站多少钱wordpress修改关键字
  • 免费资料网站网址下载锦州建设信息网站
  • 驻马店网站开发公司单页网站程序
  • 个人博客网站设计钢筋网片价格