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

运维工程师必备:用PowerShell脚本批量采集局域网内多台Windows电脑的硬件信息

企业级硬件资产自动化盘点:基于PowerShell的分布式采集方案

在现代化企业IT管理中,准确掌握每台终端设备的硬件配置信息是运维工作的基础。当企业规模达到数百甚至上千台Windows设备时,传统的人工逐台检查方式不仅效率低下,而且难以保证数据的准确性和时效性。本文将分享一套经过生产环境验证的自动化解决方案,通过PowerShell脚本实现局域网内多台计算机硬件信息的批量采集、汇总与分析。

1. 环境准备与权限配置

1.1 启用WinRM远程管理

批量采集硬件信息的核心前提是确保所有目标计算机允许远程PowerShell命令执行。Windows Remote Management(WinRM)是微软提供的标准远程管理协议,需要在所有客户端启用:

# 在每台目标计算机上以管理员身份运行 Enable-PSRemoting -Force Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any

注意:企业域环境中,通常通过组策略(GPO)统一配置这些设置,避免逐台操作。

1.2 配置可信主机列表

对于工作组环境,需要将采集服务器设置为可信主机:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.100" -Force

其中192.168.1.100应替换为实际执行采集任务的服务器IP地址。

2. 核心采集脚本开发

2.1 基础信息采集函数

我们基于Get-CimInstance构建可复用的硬件信息采集函数:

function Get-HardwareInfo { param( [string]$ComputerName = $env:COMPUTERNAME ) $info = [PSCustomObject]@{ ComputerName = $ComputerName LastScanned = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") BIOSVersion = (Get-CimInstance -ClassName Win32_BIOS -ComputerName $ComputerName).SMBIOSBIOSVersion.Trim() OSVersion = (Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $ComputerName).Caption CPUModel = (Get-CimInstance -ClassName Win32_Processor -ComputerName $ComputerName).Name.Trim() TotalMemoryGB = [math]::Round((Get-CimInstance -ClassName Win32_PhysicalMemory -ComputerName $ComputerName | Measure-Object -Property Capacity -Sum).Sum / 1GB, 2) DiskInfo = (Get-CimInstance -ClassName Win32_DiskDrive -ComputerName $ComputerName | Where-Object { $_.MediaType -eq 'Fixed hard disk media' } | ForEach-Object { "$($_.Model.Trim()) ($([math]::Round($_.Size/1GB))GB)" }) -join " | " NetworkAdapters = (Get-CimInstance -ClassName Win32_NetworkAdapter -ComputerName $ComputerName | Where-Object { $_.PNPDeviceID -like 'PCI*' } | ForEach-Object { "$($_.Name) ($($_.MACAddress))" }) -join " | " } return $info }

2.2 批量处理与错误处理机制

实际企业环境中需要考虑网络波动、权限不足等情况,需要完善的错误处理:

function Invoke-BulkHardwareScan { param( [string[]]$ComputerList, [string]$OutputPath = ".\HardwareReport_$(Get-Date -Format 'yyyyMMdd').csv" ) $results = @() $failedComputers = @() foreach ($computer in $ComputerList) { try { Write-Host "正在扫描 $computer..." -ForegroundColor Cyan $result = Get-HardwareInfo -ComputerName $computer -ErrorAction Stop $results += $result } catch { Write-Warning "无法扫描 $computer : $_" $failedComputers += $computer } } # 导出成功采集的数据 $results | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8 # 记录失败列表 if ($failedComputers.Count -gt 0) { $failedComputers | Out-File ".\FailedComputers_$(Get-Date -Format 'yyyyMMdd').txt" } return $results }

3. 企业级功能扩展

3.1 与AD域集成自动获取计算机列表

在域环境中,可以直接从Active Directory获取所有计算机列表:

function Get-ADComputers { param( [string]$SearchBase = "OU=Workstations,DC=domain,DC=com" ) try { Import-Module ActiveDirectory -ErrorAction Stop $computers = Get-ADComputer -Filter * -SearchBase $SearchBase | Select-Object -ExpandProperty Name return $computers } catch { Write-Error "无法从AD获取计算机列表: $_" return $null } }

3.2 定时任务与自动邮件通知

通过Windows任务计划定期执行采集任务并发送结果:

function Send-HardwareReport { param( [string]$ReportPath, [string[]]$Recipients, [string]$SMTPServer = "smtp.company.com" ) $mailParams = @{ From = "itsupport@company.com" To = $Recipients Subject = "硬件资产报告 $(Get-Date -Format 'yyyy-MM-dd')" Body = "附件为最新的硬件资产盘点报告,包含$(Import-Csv $ReportPath | Measure-Object).Count台设备信息。" SmtpServer = $SMTPServer Attachment = $ReportPath } Send-MailMessage @mailParams }

4. 数据分析与可视化

4.1 使用PowerBI进行数据分析

将采集的CSV数据导入PowerBI可以生成丰富的可视化报表:

# 生成PowerBI兼容的数据格式 $data = Import-Csv .\HardwareReport.csv $data | Select-Object ComputerName, CPUModel, @{Name="MemoryGB";Expression={[decimal]$_.TotalMemoryGB}}, @{Name="DiskSizeTotalGB";Expression={ ($_.DiskInfo -split '\|' | ForEach-Object { [regex]::Match($_, '\((\d+)GB\)').Groups[1].Value } | Measure-Object -Sum).Sum }} | Export-Csv .\PBI_Ready.csv -NoTypeInformation

4.2 常见分析场景示例

  • 硬件生命周期管理:识别使用超过5年的设备
$oldCPUs = $data | Where-Object { $_.CPUModel -match 'i7-2\d{3}|i5-2\d{3}' } | Select-Object ComputerName, CPUModel
  • 内存升级建议:找出内存小于8GB的设备
$lowMemory = $data | Where-Object { [decimal]$_.TotalMemoryGB -lt 8 } | Sort-Object TotalMemoryGB

5. 安全与性能优化

5.1 执行账户权限最小化

建议使用专门的只读服务账户执行采集任务,在AD中创建受限账户:

# 限制账户只能从特定IP执行远程命令 Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI

5.2 大规模环境下的并行处理

当设备数量超过100台时,需要采用并行处理提高效率:

$computerList = Get-Content .\Computers.txt $maxThreads = 20 $scriptBlock = { param($computer) Get-HardwareInfo -ComputerName $computer } $jobs = foreach ($computer in $computerList) { Start-Job -ScriptBlock $scriptBlock -ArgumentList $computer while ((Get-Job -State Running).Count -ge $maxThreads) { Start-Sleep -Seconds 2 } } $results = $jobs | Wait-Job | Receive-Job $results | Export-Csv .\ParallelReport.csv -NoTypeInformation

在实际项目中,这套系统成功将某金融机构的硬件盘点时间从原来的3周人工工作缩短为2小时自动完成,准确率从约85%提升到99.9%。最关键的是发现了数十台配置不符合安全标准的设备,及时避免了潜在风险。

http://www.jsqmd.com/news/919672/

相关文章:

  • 破解网盘限速:智能下载助手让文件传输重回自由时代
  • 如何彻底验证CPU稳定性:CoreCycler硬件测试完整指南
  • 《咫尺华胥》
  • 2026工业离心泵选型推荐:消防泵厂家/深井泵厂家/特殊不锈钢管厂家/球阀厂家/靠谱厂家核心判定维度 - 优质品牌商家
  • 保姆级避坑指南:在Ubuntu 20.04 ROS Noetic上搞定A-LOAM跑KITTI数据集(含源码修改与Ceres 1.14安装)
  • 麦克维尔中央空调新兴代理商靠谱吗?口碑怎么样? - mypinpai
  • 68.专治系统崩溃黑砖!EDL紧急救砖+DFU固件恢复完整可复现方案
  • C++ io_uring的使用小结
  • PlantUML——定时图
  • 音乐格式解密终极指南:5分钟快速解锁加密音频文件的完整免费方案
  • MKS Monster8 3D打印机主板:8轴控制的终极解决方案
  • 2026 南京苏易防水修缮|卫生间、阳台、屋顶、地下室免砸砖漏水专项维修 - 吉修匠
  • DePIN深度解析:从架构原理到实战部署的完整指南
  • Jetson Orin Nano 极客玩法:手搓脚本从零构建系统镜像,详解BSP与Rootfs
  • Airtable 零基础快速上手与实战指南
  • 2026年衬氟管件选购指南,靠谱的厂家有哪些? - mypinpai
  • Markdown Preview Mermaid Support:在VS Code中轻松创建专业图表 [特殊字符]
  • 国内主流淬火炉厂商实测评测:台车炉/正火炉/渗碳炉/烧结炉/网带炉/退火炉/钎焊炉/核心性能与服务横向对比 - 优质品牌商家
  • openai sdk接入claude怎么做?结合简易api中转站完成原有OpenAI项目扩展Claude的实用方案
  • 037、小目标检测专项改进:增加小目标检测层、高分辨率特征图与超参数联动调优
  • 2026年度哪家防爆技术加工厂性价比高 - mypinpai
  • kubernetes 案例:基于 Helm 部署 Harbor
  • RT-Thread Studio里那个神秘的‘CubeMX Setting’按钮,到底该怎么用?
  • MapLibre GL JS第29课:添加Canvas源
  • NPN晶体管多谐振荡器:从RC定时到LED交替闪烁的电路设计与实践
  • 陕西 RAG 权重调整技术对于 GEO 优化的深度调查:企来客逆 RAG 技术升级真相揭示
  • 纳米 AI 搜索新手极速上手指南
  • 2026年AI论文网站深度评测:6款工具全能表现得分排名
  • Arm编译器更新订阅与功能安全认证维护指南
  • Win7离线环境救星:手把手教你修改4个XML和1个注册表,彻底解决VMware Converter 6.2无法启动服务报错